SpringBoot操作Redis哈希類型


概述

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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM