redis过期策略与淘汰策略

x33g5p2x  于2021-10-31 转载在 Redis  
字(1.0k)|赞(0)|评价(0)|浏览(228)

1.过期策略

1.redis中所有的key都可以通过expire命令来设置过期时间,所有被设置了过期时间的key会被存放在一个独立的字典中,删除这些key有两种不同的策略:

1)定时删除,redis默认每1秒进行10次过期扫描,每次从字典中取出20个key,删除这20个key中已经过期的key,如果删除的数量大于1/4,那么会继续取20个key出来,继续删除20个key中已经过期的key,以此类推,为了避免无限循环扫描,redis规定每次过期扫描时间为25毫秒!

2)惰性删除,当客户端连接到redis服务器时,再去检查key是否过期,如果这个key过期,则删除这个key

注意:如果是主从架构,从机是不会有过期扫描的,过期扫描只会在主机上出现,主机中的key过期后,会同步到从机

2.淘汰策略

1.概念:redis用于做缓存的内存已经满时,这个时候,我们再将数据写到redis中,redis将以什么方式来处理

2.八大策略
1)针对于全局键
1.1 noeviction,这是redis默认的策略,此时写操作停止,允许读和删除操作
1.2 allkeys-lru,淘汰最近少用的key
1.3 allkeys-lfu,淘汰使用频率低的key
1.4 allkeys-random,随机淘汰key

2)针对于设置了过期时间的键
2.1 volatitle-lru,在所有设置了过期时间的key中,淘汰最近少用的key
2.2 volatitle-ttl,在所有设置了过期时间的key中,淘汰ttl值小的key,ttl值代表设置的过期时间的大小
2.3 volatitle-lfu,在所有设置了过期时间的key中,淘汰使用频率低的key
2.4 volatitle-random,在所有设置了过期时间的key中,随机淘汰key

3.在哪里配置?

1.在redis.conf中,有这么一个参数maxmemory-policy

4.Lazy Free

1.懒惰删除,为什么需要懒惰删除呢,因为redis时一个单线程程序,如果我们删除一个key很大,那么很容易就会出现卡顿的情况,懒惰删除也称为异步删除

2.unlink key,这个命令就相当于懒惰删除一个key,redis4.0后提供

3.flushall async/flushdb async 也可以实现懒惰删除所有key

相关文章

微信公众号

最新文章

更多