首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Redis(四)Learn from Example

2012-07-02 
Redis(4)Learn from ExampleRedis(4)Learn from Example1. Domain LayerMap the Java classes of our doma

Redis(4)Learn from Example
Redis(4)Learn from Example

1. Domain Layer
Map the Java classes of our domain to Hash Type in redis.

User id =1, username = karl, password = 111111, role = 1
redis>hmset user:1 id 1 username karl password 111111 role 1
redis>hgetall user:1

If you want to validate your redis command, you can try it here: http://try.redis-db.com/

So there is no annotation in domain layer. So my domain will be just the User and Role
public class User {
private String id;
private String firstName;
private String lastName;
private String username;
private String password;
private Role role;
...snip... getter and setter

public class Role {
private String id;
private Integer role;
...snip... getter and setter

2. Service Layer
package com.sillycat.easynosql.service.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

import com.sillycat.easynosql.model.Role;
import com.sillycat.easynosql.model.User;
import com.sillycat.easynosql.service.UserService;

public class UserServiceRedisImpl implements UserService{

@Autowired
private RedisTemplate<String, String> template;

public User create(User user) {
String key = "user"+user.getUsername();
String id = UUID.randomUUID().toString();
//use hash structure to store the columns
template.opsForHash().put(key, "id", id);
template.opsForHash().put(key, "firstName", user.getFirstName());
template.opsForHash().put(key, "lastName", user.getLastName());
template.opsForHash().put(key, "username", user.getUsername());
template.opsForHash().put(key, "password", user.getPassword());
template.opsForHash().put(key, "role", user.getRole().getRole().toString());
//use set structure to store the users
template.opsForSet().add("user", key);
user.setId(id);
return user;
}

public User read(User user) {
String key = "user"+user.getUsername();
String existingRecord = (String) template.opsForHash().get(key, "id");

if (existingRecord == null) {
return null;
}
User returnUser = new User();
returnUser.setId((String) template.opsForHash().get(key, "id"));
returnUser.setFirstName((String) template.opsForHash().get(key, "firstName"));
returnUser.setLastName((String) template.opsForHash().get(key, "lastName"));
returnUser.setPassword((String) template.opsForHash().get(key, "password"));
returnUser.setUsername((String) template.opsForHash().get(key, "username"));

Role role = new Role();
role.setRole(Integer.valueOf((String) template.opsForHash().get(key, "role")));
returnUser.setRole(role);
return user;
}

public List<User> readAll() {
List<User> users = new ArrayList<User>();

Collection<String> fieldKeys = new HashSet<String>();
fieldKeys.add("id");
fieldKeys.add("firstName");
fieldKeys.add("lastName");
fieldKeys.add("username");
fieldKeys.add("password");
fieldKeys.add("role");

//fetch all the key from set
Collection<String> keys = template.opsForSet().members("user");
for (String key: keys) {
User user = new User();
//find the value with key/column name
user.setId((String) template.opsForHash().get(key, "id"));
user.setFirstName((String) template.opsForHash().get(key, "firstName"));
user.setLastName((String) template.opsForHash().get(key, "lastName"));
user.setPassword((String) template.opsForHash().get(key, "password"));
user.setUsername((String) template.opsForHash().get(key, "username"));

Role role = new Role();
role.setRole(Integer.valueOf((String) template.opsForHash().get(key, "role")));
user.setRole(role);

users.add(user);
}

return users;
}

public User update(User user) {
String key = "user"+user.getUsername();
String existingRecord = (String) template.opsForHash().get(key, "id");

if (existingRecord == null) {
return null;
}

template.opsForHash().put(key, "firstName", user.getFirstName());
template.opsForHash().put(key, "lastName", user.getLastName());
template.opsForHash().put(key, "role", user.getRole().getRole().toString());

return user;
}

public Boolean delete(User user) {
String key = "user"+user.getUsername();
template.opsForHash().delete(key, "id");
template.opsForHash().delete(key, "firstName");
template.opsForHash().delete(key, "lastName");
template.opsForHash().delete(key, "username");
template.opsForHash().delete(key, "password");
template.opsForHash().delete(key, "role");

String existingRecord = (String) template.opsForHash().get(key, "id");
Boolean existingMember = template.opsForSet().remove("user", key);
if (existingRecord != null) {
return false;
}
if (existingMember == false) {
return false;
}
return true;
}
}

And init data Service is as follow:
package com.sillycat.easynosql.dao.redis.init;

import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

public class InitRedisService {

@Autowired
private RedisTemplate<String, String> template;

public void init() {
// Delete existing ones
String key = "user"+"john";
template.opsForHash().delete(key, "id");
template.opsForHash().delete(key, "firstName");
template.opsForHash().delete(key, "lastName");
template.opsForHash().delete(key, "username");
template.opsForHash().delete(key, "password");
template.opsForHash().delete(key, "role");

key = "user"+"jane";
template.opsForHash().delete(key, "id");
template.opsForHash().delete(key, "firstName");
template.opsForHash().delete(key, "lastName");
template.opsForHash().delete(key, "username");
template.opsForHash().delete(key, "password");
template.opsForHash().delete(key, "role");

// Create new records
key = "user"+"john";
template.opsForHash().put(key, "id", UUID.randomUUID().toString());
template.opsForHash().put(key, "firstName", "John");
template.opsForHash().put(key, "lastName", "Smith");
template.opsForHash().put(key, "username", "john");
template.opsForHash().put(key, "password", "21232f297a57a5a743894a0e4a801fc3");
template.opsForHash().put(key, "role", "1");
template.opsForSet().add("user", key);
//overwrite set value here

key = "user"+"jane";
template.opsForHash().put(key, "id", UUID.randomUUID().toString());
template.opsForHash().put(key, "firstName", "Jane");
template.opsForHash().put(key, "lastName", "Adams");
template.opsForHash().put(key, "username", "jane");
template.opsForHash().put(key, "password", "ee11cbb19052e40b07aac0ca060c23ee");
template.opsForHash().put(key, "role", "2");
template.opsForSet().add("user", key);
}
}

Operation for Hash
template.opsForHash()
template.opsForHash().put
template.opsForHash().delete
Operation for Set
template.opsForSet()
template.opsForSet().add
template.opsForSet().remove

4. Spring Configuration:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<bean id="jedisConnectionFactory" p:port="${redis.port}"/>
<bean id="redisTemplate" init-method="init"/>   
</beans>

There is no repository in redis, so one template to deal with the server is enough.

references:
http://krams915.blogspot.com/2012/02/spring-mvc-31-implement-crud-with_6764.html



热点排行