Skip to content

Redis知识点总结

基础

text
1.数据类型
string,list,hash,set,sorted set,pipeline,bitmap,hyperloglog,geo,stream
2.lua脚本保持原子性
3.编码方式
raw,int,embstr,zipmap,linkedlist,ziplist,intset,quicklist,skiplist
4.为什么定义动态字符串
redis 为什么要自己写一个SDS的数据类型,主要是为了解决C语言 char[] 的四个问题

字符数组必须先给目标变量分配足够的空间,否则可能会溢出
查询字符数组长度 时间复杂度O(n)
长度变化,需要重新分配内存
通过从字符串开始到结尾碰到的第一个\0来标记字符串的结束,因此不能保存图片、音频、视频、压缩文件等二进制(bytes)保存的内容,二进制不安全
redis SDS

不用担心内存溢出问题,如果需要会对 SDS 进行扩容
因为定义了 len 属性,查询数组长度时间复杂度O(1) 固定长度
空间预分配,惰性空间释放
根据长度 len来判断是结束,而不是 \0
5.geo
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。
Redis GEO 操作方法有:
geoadd:添加地理位置的坐标。
geopos:获取地理位置的坐标。
geodist:计算两个位置之间的距离。
georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
geohash:返回一个或多个位置对象的 geohash 值。

持久化

text
RDB
AOF
混合模式

事务

text

缓存淘汰策略

text
被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key
主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key
当前已用内存超过maxmemory限定时,触发主动清理策略。
volatile-lru:会使用 LRU 算法筛选设置了过期时间的键值对删除。
volatile-lfu:会使用 LFU 算法筛选设置了过期时间的键值对删除。
LRU 算法(Least Recently Used,最近最少使用)
手写LRU缓存:https://blog.csdn.net/nianqrzhanghw/article/details/116838461?spm=1001.2014.3001.5502
淘汰很久没被访问过的数据,以最近一次访问时间作为参考。

LFU 算法(Least Frequently Used,最不经常使用)
淘汰最近一段时间被访问次数最少的数据,以次数作为参考。

架构

text
哨兵模式
主从复制
Redis cluster
限流算法
缓存雪崩
缓存失效
缓存穿透
热点key失效
双写不一致

问题

text
1.redis是单线程还是多线程?
2.scan遍历重复键的问题

创作不易请尊重他人劳动成果,未经授权禁止转载!