为什么redis单线程模型会效率高
一:redis中数据为什么会丢失?
redis是缓冲用的并不是数据库,缓存的数据会过期的,另外也可能是被设置了过期时间,redis自己给干掉了
二:数据都过期了为什么还占这内存呢?
如:在redis中设置了过期时间,到期之后我们查数据会出现查不到数据但是还占内存的情况。
其实它内部是 定期删除和惰性删除两个在起作用。
定期删除指:redis每隔100ms随机抽取一些key来检查和删除。如果全部检查cpu消耗会很多,可能会宕机。
惰性删除:定期删除中过期的key没有被删除的,当某个key被使用的时候redis会检查一下是否过期,如果过期了则不会返回任何东西。
三:如果定期删除没删除的惰性删除也没检查到的过期数据怎么办呢?
走内存淘汰机制
四:redis内存淘汰机制
如果redis的内存占用过多的时候,此时会进行内存淘汰,有如下一些策略:
redis 10个key,现在已经满了,redis需要删除掉5个key
1个key,最近1分钟被查询了100次
1个key,最近10分钟被查询了50次
1个key,最近1个小时倍查询了1次
2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的key给干掉啊
4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(这个一般不太合适)
5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
其实,你写的数据太多,内存满了,或者触发了什么条件,redis lru,自动给你清理掉了一些最近很少使用的数据