用jedis操做redis hash

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

相關文章
相關標籤/搜索