Redis 缓存过期处理与缓存淘汰机制

2020-08-28  本文已影响0人  snoopy_fly_

引子

计算机内存有限,越大越贵,redis 的高并发高性能都是基于内存的,用硬盘的话 GG

已过期的 key 如果处理?

设置了 expire 的 key 缓存过期了,但是服务器的内存还是会占用,这是因为 redis 所基于的两种删除策略

所以,即使 key 过期了,但是只要没有被 redis 所清理,那么内存还是占用着的。

如果内存被 redis 占用满了怎么办?

内存如果占满了,可以使用硬盘,但是没有意义,因为硬盘没有内存块,会严重影响 redis 的性能,所以,当内存占用满了之后,redis 提供了一套缓存淘汰机制,即 memory management


# 当内存已使用值达到 maxmemory,开始清理缓存 
# 单位:bytes(字节),123000000Byte ≈ 117.3M
maxmemory 123000000

# maxmemory-policy 缓存淘汰策略值枚举:

volatile-lru:在使用 expire 设置了过期时间的 key 中,删除最近最少使用的缓存,然后保存新的缓存

allkeys-lru:删除最近最少使用的缓存,然后保存新的缓存(推荐使用)

volatile-lfu:在使用 expire 设置了过期时间的 key 中,删除最不经常使用的缓存,然后保存新的缓存

allkeys-lfu:删除最不经常使用的缓存,然后保存新的缓存(推荐使用)

volatile-random:在使用 expire 设置了过期时间的 key 中,随机删除一个 key

allkeys-random:在所有 key 中,随机删除一个 key

volatile-ttl:在使用 expire 设置了过期时间的 key 中,删除最快要过期的 key,即删除 TTL 最小的 key

noeviction:不删除任何数据,报出写操作异常(默认值)

LRU 和 LFU 的区别

参考:缓存淘汰算法 LRU 和 LFU

上一篇下一篇

猜你喜欢

热点阅读