问题描述
做黑马点评项目的时候,视频中存Redis用的是String。由于String很熟练了 因此想着用Hash结构存,没想到就出错了。
使用Redis做缓存时,如果缓存未命中,需要回写缓存,但是putAll
方法要传递Map,不可避免的需要把Bean转成Map。
由于使用StringRedisTemplateredis
需要转换成的map的各个字段都是字符串,而bean的各个字段类型各不相同。
Hutool的BeanUtil中封装了很多好用的方法,且提供了允许自定义转换规则的
CopyOptions
https://apidoc.gitee.com/dromara/hutool/
之前使用过所以就很自然的写成如下:
Map<String, Object> map = BeanUtil.beanToMap(shop,new HashMap<>(),
CopyOptions.create()
.setIgnoreNullValue(true)
.setFieldValueEditor((fieldName,fieldValue) -> fieldValue.toString()));
stringRedisTemplate.opsForHash().putAll(RedisConstants