怎么创建网站论坛,网站备案说主体已注销,天津网站搜索排名,公司企业宣传片拍摄Redis只能存5G数据#xff0c;可是你写了10G#xff0c;那会删5G的数据。怎么删的#xff1f;还有#xff0c;你的数据已经设置了过期时间#xff0c;但是时间到了#xff0c;为什么内存占用率还是比较高?
一、Redis的过期策略 Redis采用的是定期删除惰性删除策略。
1…Redis只能存5G数据可是你写了10G那会删5G的数据。怎么删的还有你的数据已经设置了过期时间但是时间到了为什么内存占用率还是比较高?
一、Redis的过期策略 Redis采用的是定期删除惰性删除策略。
1、为什么不用定时删除策略? 定时删除用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放但是十分消耗CPU资源。
2、定期删除惰性删除是如何工作的呢? 定期删除Redis默认每隔100ms检查是否有过期的key,有过期key则删除。需要说明的是Redis不是每隔100ms将所有的key检查一次而是随机抽取进行检查(如果每隔100ms,全部key进行检查Redis岂不是卡死)。因此如果只采用定期删除策略会导致很多key到时间没有删除。 于是惰性删除派上用场。也就是说在你获取某个key的时候Redis会检查一下这个key如果设置了过期时间那么是否过期了如果过期了此时就会删除。
3、采用定期删除惰性删除就没其他问题了么? 不是的如果定期删除没删除key。然后你也没即时去请求key也就是说惰性删除也没生效。这样redis的内存会越来越高。那么就应该采用内存淘汰机制。
二、数据内存淘汰策略
1、LRU算法 最开始时内存空间是空的因此依次进入A、B、C是没有问题的。 当加入D时就出现了问题内存空间不够了因此根据LRU算法内存空间中A待的时间最为久远选择A,将其淘汰。 当再次引用B时内存空间中的B又处于活跃状态而C则变成了内存空间中近段时间最久未使用的。 当再次向内存空间加入E时这时内存空间又不足了选择在内存空间中待的最久的C将其淘汰出内存这时的内存空间存放的对象就是E-B-D。
2、Redis中的LRU算法 在redis.conf中有一行配置
span stylecolor:#000000span stylebackground-color:#282c34code# maxmemory-policy allkeys-lru
/code/span/span
1 noeviction当内存不足以容纳新写入数据时新写入操作会报错。应该没人用吧。 allkeys-lru当内存不足以容纳新写入数据时在键空间中移除最近最少使用的key。推荐使用。 allkeys-random当内存不足以容纳新写入数据时在键空间中随机移除某个key。应该也没人用吧你不删最少使用Key,去随机删。 volatile-lru当内存不足以容纳新写入数据时在设置了过期时间的键空间中移除最近最少使用的key。这种情况一般是把redis既当缓存又做持久化存储的时候才用。不推荐。 volatile-random当内存不足以容纳新写入数据时在设置了过期时间的键空间中随机移除某个key。依然不推荐。 volatile-ttl当内存不足以容纳新写入数据时在设置了过期时间的键空间中有更早过期时间的key优先移除。不推荐。