日期:2014-05-16  浏览次数:20395 次

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(