概述
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]
Q.E.D.