Redis 数据过期后的删除策略是什么?

Redis 在数据过期后的删除策略主要包括两种方式:惰性删除(Lazy Expiration)和定期删除(Active Expiration)。

1. 惰性删除(Lazy Expiration)

  • 原理:当客户端尝试访问某个键时,Redis 会检查该键是否已过期。如果已过期,则删除该键并返回相应的错误信息。
  • 优点:不会对性能产生显著影响,因为删除操作只在访问时发生。
  • 缺点:可能会占用较多内存,因为过期的键在被访问之前不会被删除。

2. 定期删除(Active Expiration)

  • 原理:Redis 会定期检查并删除已过期的键。具体来说,Redis 会在后台线程中周期性地随机选择一些键进行检查,如果发现这些键已过期,则立即删除。
  • 优点:可以及时释放内存,减少内存占用。
  • 缺点:可能会对性能产生一定影响,尤其是在大量键过期的情况下。

具体实现

  • 惰性删除:在每次访问键时进行检查。

GET key

如果 key 已过期,Redis 会自动删除该键并返回 nil

  • 定期删除:Redis 会在后台线程中执行以下步骤:

    1. 从所有数据库中随机选择一些键。
    2. 检查这些键是否已过期。
    3. 如果已过期,立即删除这些键。

配置参数

Redis 提供了一些配置参数来调整定期删除的频率和强度:

  • hz:控制 Redis 服务器每秒执行的周期性任务次数。默认值为 10,可以增加该值以提高定期删除的频率。
  • CONFIG SET hz 100

示例代码

以下是一个简单的 Python 示例,演示如何设置键的过期时间:

import redis

# 连接 Redis 服务器
r = redis.Redis(host='localhost', port=6379, db=0)

# 设置键值对并设置过期时间(5秒后过期)
r.set('name', 'Alice', ex=5)

# 获取键值对
name = r.get('name')
print(name)  # 输出: b'Alice'

# 等待 6 秒后再次获取键值对
import time
time.sleep(6)
name = r.get('name')
print(name)  # 输出: None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值