Redis Hashes 是一個表示鍵值對映射的集合,所以它是表示對象的完美數據類型,好比一個有name、surname和age等不少字段的User對象。Redis的官方文檔中也這樣解釋。redis
接下來咱們看看下面這個簡單的user類:工具
public class User { private String username; private String email; private String password; private String firstName; private String lastName; }
使用jedis能將這個類對象存儲到Redis中,例如:code
public void insertUser(User user){ Map<String, String> userProperties = new HashMap<String, String>(); userProperties.put("username", user.getUsername()); userProperties.put("firstName", user.getFirstName()); userProperties.put("lastName", user.getLastName()); userProperties.put("email", user.getEmail()); userProperties.put("password", user.getPassword()); jedis.hmset("user:" + user.getUsername(), userProperties); }
能夠看到咱們須要爲hash類型建立一個Map對象來存儲這些字段,而後咱們使用HMSET
命令將一個或多個字段設置到Redis中。對象
還能夠使用hset
命令給hash類型設置一個字段,例如:文檔
public void updateEmail(User user){ jedis.hset("user:" + user.getUsername(), "email", user.getEmail()); }
如今咱們須要從Redis Hash中獲取User對象,咱們既能夠使用HMGET
命令獲取指定key中的字段,也能夠使用HGETALL
命令獲取指定key中的全部字段,下面是使用HGETALL
命令的例子:get
public User loadUser(String username){ Map<String, String> properties = jedis.hgetAll("user:" + username); User user = new User(); user.setUsername(username); user.setEmail(properties.get("email")); //fill all attributes return user; }
爲了不從bean中建立map和從map中獲取bean的代碼重複,咱們能夠使用一些第三方庫(如:commons Bean Utils)中的工具類來簡化這項工做:hash
//Getting the map of properties properties = BeanUtilsBean.getInstance().describe(object); //Populating the bean from the Map BeanUtilsBean.getInstance().populate(bean, properties);
還有一些其餘關於redis hash的操做,能夠參考redis官方文檔。ast