Redis 中的拒绝策略和删除策略是不同的概念,目的和实现方式也不同。以下是它们之间的区别:
- 拒绝策略
在 Redis 中,当内存使用达到上限时,会触发拒绝策略,即拒绝新的写入操作。Redis 提供了几种不同的拒绝策略,可以通过 maxmemory-policy
配置项来设置。
常见的拒绝策略包括:
noeviction
:默认选项,表示不进行清理操作,直接拒绝新写入操作。allkeys-lru
:根据最近最少使用的原则(Least Recently Used)选择最近最少使用的 key 进行清理。volatile-lru
:仅对设定了过期时间的 key 进行 LRU 清理。allkeys-random
:随机删除一部分 key 以释放空间。volatile-random
:仅对设定了过期时间的 key 进行随机删除。
- 删除策略
在 Redis 中,删除策略指控制键(key)的过期时间的方式。Redis 支持两种主要的过期时间模式:
- 定时删除:在设置键的过期时间时,同时创建一个定时器,在该定时器的到期时间点上,Redis 服务器会检查键是否过期,并在键已过期时自动删除键。
- 惰性删除:在获取键时,Redis 服务器会检查该键是否过期,如果过期则自动删除。惰性删除的缺点是可能导致过期键长时间存在于内存中,占用宝贵的内存空间。
可以使用 EXPIRE
、PEXPIRE
、EXPIREAT
、PEXPIREAT
等命令来设置 Redis 键的过期时间,并使用 PERSIST
命令将其取消。
需要注意的是,拒绝策略和删除策略都是为了解决 Redis 内存不足的问题,但它们实现的方式不同。拒绝策略是根据一定的规则拒绝新的写入操作,而删除策略是在键过期后自动删除该键。拒绝策略可以预防 Redis 内存溢出,而删除策略可以减少存储空间的占用。