一、Redis的基本使用总结
1、RedisTemplate与StringRedisTemplate的使用
- 两个操作组件都可以用来操作存储字符串类型数据信息
- 对于RedisTemplate,还可以用来操作List,Set,SortedSet,Hash等
2、Redis的List列表
- 和Java的List类型很类似,用来存储一系列具有相同类型的数据,底层对于数据的存储和读取可以理解为
一个数据队列,往List中添加数据,相当于从队列中的队尾插入,获取数据从队头获取数据。 - 总结:使用List存入对象的时候,JavaBean必须要实现Serializable接口序列化,因为Spring会将对象先序列化后再存入Redis,否则会报错。
3、Redis的Set集合
- Redis的Set和Java里的Set集合类似性质,存储的数据相同类型且不重复,也就是Redis集合中的数据是唯一的,底层的数据结构是通过Hash表来实现的。所以对它增、删、查操作的复杂度都是O(1)。
- 使用场景:在实际开发中,set常用来解决重复提交,剔除重复id等业务场景
4、Redis的有序集合Zset
- Redis的Zset和Set具有某些相同特征,也就是存储的数据不重复,不同之处
在Zset可以通过底层的Score(分数/权重)值对数据进行排序,实现存储的集合数据有序不重合。 - 使用场景:Zset常用来充值排行榜,积分排行榜,成绩排名等应用场景。
5、Redis的Hash存储
- Redis的Hash有点类似Java的HashMap,底层数据结构是Key-Value的哈希表。
- 使用场景:当需要存入redis中的对象信息具有某种共性,为了减少缓存中key的数量,应考虑采用hash存储。
6、使用Redis总结
- 如果已经用Redis将JavaBean保存到集合类型中,如果后续再修改JavaBean的类型,重新插入,会报错
local class incompatible: stream classdesc serialVersionUID = 72892319061181, local class serialVersionUID = -3998150864330771094 - 出现这个问题后,不论是在model类里面添加
private static final long serialVersionUID = -6743567631108323096L;
还是重新Build都还是有这些问题。是因为第一次保存数据到Redis进入需要进行序列化,而修改JavaBean的属性类型,会导致序列化的UID不一样,自然无法操作。如果想要重新插入数,需要把所有的对应的key清空
把redis服务关闭或者清空后再登录就好了。 - 因为redis存的是字节数据,所以model必须要序列化,改变model的属性值类型,序列化UID会发生变化。
7、Redis中Key的失效与判断是否存在
- 在有些业务场景下,redis的key对应的数据不需要永久保留,这个时候就需要对缓存中的key进行清理。
- redis缓存架构中,delete与expire操作都可以用来清理key。
- 区别:
- 方法1:valueOperations.set(key,”expire操作”,10L, TimeUnit.SECONDS);
- 方法2:valueOperations.set(key,”expire操作”);
redisTemplate.expire(key,10L,TimeUnit.SECONDS);7.2、判断key是否存在
- 使用redisTemplate.hasKey(key)判断key是否存在
二、Redis使用的实例代码
1 | package com.victor.redis; |
- 本文作者: Victor Dan
- 本文链接: https://victorblog.github.io/2018/05/11/Redis的基本使用/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
