redis 7.x 高级篇5内存过期淘汰策略的处理办法

一 redis内存过期讨论策略

1.1 查看与设置redis默认的内存大小

1.查看redis默认内存大小

config  get  maxmemory

config set  maxmemory    1024

注意:在64-bit系统下,maxmemory设置为0表示不限制redis的内存使用。

1.2 操作案例说明

127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379> config set maxmemory 1
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "1"
127.0.0.1:6379> set k1  liujianfu
(error) OOM command not allowed when used memory > 'maxmemory'.
127.0.0.1:6379> config set maxmemory 0
OK
127.0.0.1:6379> config get maxmemory 1
1) "maxmemory"
2) "0"
127.0.0.1:6379> set k1 liujianfu
OK
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> 

1.2 lru与lfu 页面淘汰算法

LRU: 最近最少使用页面置换算法,查看页面最后一次被使用到发生调度的时间长度,首先淘汰最长时间未被使用的页面。
LFU:最近最不经常使用页面置换算法,淘汰规定时间段范围内,使用次数最少的页面。
举个例子:某次时间time为10分钟,如果每分钟进行一次调度,主存块为3,页面走向为2121234
假设页面4时会发生页面中断。
如果按LRU算法,应该置换页面1(3个一组,234,没有1,则1最少使用);使用LFU算法应该置换页面3(10分钟3出现次数最少)
总结:LRU主要看页面最后一次被使用到发生调度的时间长短;而LFU在一定时间内页面被使用的频率。

1.3  redis过期key删除策略

1.3.1 立即删除

立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力,让CPU心累,时时需要删除,忙死。。。。。。。这会产生大量的性能消耗,同时也会影响数据的读取操作。

1.3.2 惰性删除

数据到达过期时间,不做处理。等下次访问该数据时,如果未过期,返回数据 ;发现已过期,删除,返回不存在。

 惰性删除策略的缺点是,它对内存是最不友好的

1.3.3 定时删除

Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

Redis 提供 8种数据淘汰策略

1.noevication 不设置策略,达到峰值直接报error。默认的配置。

2.allkeys-lru:对所有key使用LRU算法进行删除,优先删除掉最近不经常使用的key,用以保存最新数据。

3.allkeys-random:对所有key随机删除

4.allkeys-lfu:对所有key使用lfu算法进行删除。

5.volatile-lru:对所有设了过期时间的key使用lru进行删除。

6.volatile-random: 对设置过期时间的key随机进行删除

7.volatile-ttl:删除马上要过期的key

8.volatile-lfu:对所有设置了过期时间的key使用lfu算法进行删除。

你可能感兴趣的:(redis,redis,数据库,java)