概述
SpringBoot操作Redis復雜對象,通常使用RedisTemplate,直接聲明即可。
@Autowired
private RedisTemplate redisTemplate;
put、putAll
- put設置對象的單個屬性值
- putAll設置對象的多個屬性值
//設置user的name、age、sex(本文所有demo都是重新初始化該對象,后面的代碼沒有再貼出這一塊了)
HashMap<String, Object> map = new HashMap<>();
map.put("name", "張三");
map.put("age", "23");
map.put("sex", "男");
redisTemplate.opsForHash().putAll("user", map);
//使用entries獲取整個user對象
System.out.println("user:" + redisTemplate.opsForHash().entries("user"));
- 輸出如下:
user:{sex=男, name=張三, age=23} - 再次設置部分屬性,其他屬性的值不會受到影響
//這次只設置name、age
HashMap<String, Object> map2 = new HashMap<>();
map2.put("name", "李四");
map2.put("age", "24");
redisTemplate.opsForHash().putAll("user", map2);
//獲取user對象
System.out.println("user:" + redisTemplate.opsForHash().entries("user"));
- 輸出如下(sex值不變):
user:{sex=男, name=李四, age=24}
- 其他用法
//使用put設置單個屬性
redisTemplate.opsForHash().put("user", "name", "張三三");
//使用get獲取單個屬性
System.out.println("user name:" + redisTemplate.opsForHash().get("user", "name"));
putIfAbsent
- 跟put類似,區別是putIfAbsent只有當屬性不存在才生效
//設置birth為當前時間
System.out.println(redisTemplate.opsForHash().putIfAbsent("user", "birth", LocalDateTime.now()));
System.out.println("birth:" + redisTemplate.opsForHash().get("user", "birth"));
//等待2秒
Thread.sleep(2000);
//再次設置birth為當前時間
System.out.println(redisTemplate.opsForHash().putIfAbsent("user", "birth", LocalDateTime.now()));
System.out.println("birth:" + redisTemplate.opsForHash().get("user", "birth"));
- 輸出如下(第2次設置會失敗,返回false,birth不變):
true
birth:2020-08-17T16:34:22.355
false
birth:2020-08-17T16:34:22.355
hasKey
- 判斷指定的屬性是否在對象中
System.out.println(redisTemplate.opsForHash().hasKey("user", "name"));;
System.out.println(redisTemplate.opsForHash().hasKey("user", "name2"));;
- 輸出如下:
true
false
delete
- 刪除對象的一個或多個屬性
//刪除age、sex
redisTemplate.opsForHash().delete("user", "age", "sex");
System.out.println("user:" + redisTemplate.opsForHash().entries("user"));
- 輸出如下:
user:{name=張三}
keys
- 獲取對象的所有屬性名
System.out.println(redisTemplate.opsForHash().keys("user"));
- 輸出如下:
[name, sex, age]
multiGet
- 獲取對象的多個屬性值,entries是獲取對象所有屬性值,兩個用法不同
List<String> keyList = new ArrayList<>();
keyList.add("name");
keyList.add("age");
System.out.println(redisTemplate.opsForHash().multiGet("user", keyList));
- 輸出如下:
[張三, 23]