往redis里存对象,将bean存入redis hash中
1.SpringBoot中添加redis配置类2. 实现代码附录 ⭐哈希(hash)复习
由于redis中Hash数据类型的特点,特别适合存储对象,所以我们使用hash存储对象
我们最后要完成的效果是这样的:
我们首先要知道如果往hash的key中加英文冒号:,用可视化工具看的时候就会自动变成上面图左上角那样
这里我存的key是:umbrella:王五oR83j4kkq2CyvVmuxl6znKbrWi2A
往hash中存数据一共有三种形式,我放到文章最后面,可以复习看一下
1.SpringBoot中添加redis配置类坐标依赖:
org.springframework.boot spring-boot-starter-data-redis org.apache.commons commons-pool2
配置类代码:
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate
2. 实现代码
@Resource private RedisTemplate附录 ⭐哈希(hash)复习redisTemplate; @Test public void TestRedis() throws InstantiationException, IllegalAccessException { //拿到一个JavaBean UmbrellaBorrow umbrellaBorrow = umbrellaBorrowService.getById(1); //设置key String key="umbrella:"+"张三oR83j4kkq2CyvVmuxl6znKbrWi2A"; String key2="umbrella:"+"李四oR83j4kkq2CyvVmuxl6znKbrWi2A"; String key3="umbrella:"+"王五oR83j4kkq2CyvVmuxl6znKbrWi2A"; //拿到redis操作对象 HashOperations redisHash = redisTemplate.opsForHash(); try { //存入redis中 parseMap(key,redisHash,umbrellaBorrow); parseMap(key2,redisHash,umbrellaBorrow); parseMap(key3,redisHash,umbrellaBorrow); } catch (InvocationTargetException e) { e.printStackTrace(); } } private void parseMap(String key,HashOperations redisHash, Object bean) throws IllegalAccessException, InstantiationException, InvocationTargetException { //1. 获得所有的get方法 List allGetMethod = getAllGetMethod(bean); //2. 遍历往redis中存入值 for(Method m : allGetMethod){ //截取属性名 String field = m.getName().substring(3); //激活方法得到值 Object value = m.invoke(bean)+"";//加一个空串是为了将LocalDataTime转换成字符串 //往redis里存这些字段 redisHash.put(key,field,value); } } private List getAllGetMethod(Object bean) { List getMethods = new ArrayList<>(); Method[] methods = bean.getClass().getMethods(); for (Method m : methods) { if (m.getName().startsWith("get")) { getMethods.add(m); } } return getMethods; }
Redis hash 是一个键值对集合。
Redis hash 是一个 String 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。类似 Java 里面的 Map
第一种:将对象转换成一个JSON字符串,例如上图所示:user={id=1,name=“张三”,age=20}
缺点:无法直接操作这个对象,例如想将age加一,需要先反序列化 改好后再序列化回去。开销较大。太复杂,一般不用
第二种:通过用户key:id+对象属性标签,value:属性的方式存储
优点:方便对对象中的属性进行操作
缺点:数据太过分散,数据一多就显得十分混乱,一般我们也不用
第三种:通过hash映射存储,key:id,value:
的形式
第三种方式是最适合存储对象的
常用命令:
hset 数据结构: Hash 类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。 当 field-value 长度较短且个数较少时,使用 ziplist,否则使用 hashtable。



