redis 设置过期时间会立刻删除吗

原创
ithorizon 8个月前 (09-01) 阅读数 67 #Redis

Redis 设置过期时间会立刻删除吗?

Redis 是一款开源的高性能键值数据库,常用于缓存和消息传递。在实际使用中,我们时常需要为某些键设置过期时间,以防止内存空间的无限增长。那么,问题来了,当我们为键设置过期时间后,Redis 会立刻删除这个键值对吗?下面我们就来探讨一下这个问题。

1. 过期策略

Redis 提供了两种过期策略:

  • 被动删除:当访问一个键时,Redis 会检查这个键是否已经过期,如果过期了,则删除它。
  • 主动删除:Redis 定期检查数据库中的键,删除那些已经过期的键。

2. 不会立刻删除

当你为键设置过期时间后,Redis 不会立刻删除这个键值对。而是等待以下两种情况出现:

  • 被动删除:当客户端访问这个键时,Redis 检查它是否已经过期,如果过期了,则删除它。
  • 主动删除:Redis 定期进行键空间扫描,删除那些已经过期的键。

3. 主动删除的触发时机

主动删除的触发时机与以下两个配置参数有关:

  • redis.conf 中的 hz 参数:它定义了 Redis 主循环的运行频率。默认值为 10,描述每秒运行 10 次。
  • 每个数据库的键数量:Redis 默认会每个 hz 次数检查一部分键,具体检查的键数量由每个数据库的键数量决定。

4. 代码示例

下面是一个为键设置过期时间的 Python 代码示例:

import redis

# 连接到 Redis

r = redis.Redis(host='localhost', port=6379, db=0)

# 为键设置过期时间(5 秒)

r.setex('mykey', 5, 'myvalue')

# 获取键的值

print(r.get('mykey')) # 输出:b'myvalue'

# 等待 5 秒

import time

time.sleep(5)

# 再次获取键的值,此时键已经过期并被删除

print(r.get('mykey')) # 输出:None

通过以上分析,我们可以得出结论:Redis 设置过期时间后,不会立刻删除键值对,而是等待被动删除或主动删除出现时才删除。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Redis


热门