1.redis为什么那么快
1. 基于内存的读写;
2.单线程的key-value操作,保证并发安全,无线程切换的开销
3.存储数据结构优化,全局hash
2.redis跳表
在有序列表基础上,增加分层索引,增强查询效率(类似折半查找),以此实现读效率提升
3. key过期了,但是内存未释放
1. redis删除机制
1.1 惰性删除,在读取时,检查过期时间,过期了,再删除,返回空(依赖于下次读取时间点)
1.2 定时删除,可能是100ms全检查一次,将过期的删除
ps. 对于设定过期时间的key,在有效期或未删除是再次set,而且未指定过期时,该key变成了永久有效
4.redis内存清理策略
redis内存大小由maxmemory设置来限制内存大小,对于超出内存容量的,会依据内存淘汰策略进行内存的释放,来进行新数据的存储,这就会可能导致未到期的key被删除
8个内存淘汰策略
volatile-ttl: 针对设置了过期时间的key,按过期时间排序,越接近的优先释放;
volatile-random:针对设置了过期时间的key,随机删除
volatile-lru:针对设置了过期时间的key,采用lru算法进行内存释放
vloatile-lfu:针对设置了过期时间的key,采用lfu算法释放内存
allkey-random:针对所有key,随机删
allkey-lru:针对所有key,采用lru算法
allkey-lfu:针对所有key,采用lfu
noevoctin:不删除,但是不接受写入,返回OOM异常
5.LRU与LFU内存淘汰策略
LRU:least recently used 最近最少使用,以最近使用时间为参考
LFU:least frequency used 最少使用次数,以最少使用次数为参考
绝大多数情况我们偏向使用LRU;当存在大量热点数据时,可以考虑使用LFU