存储带有以redis到期的前缀的密钥

时间:2016-03-15 01:12:01

标签: python redis

尝试使用键前缀

存储超过x时间的值

我正在使用redis。我目前正在使用hset

存储值
import redis


r = redis.StrictRedis('localhost')


for i in range(10):
    r.hset('name', i, i)


print(r.hgetall('name'))

我希望每个密钥都有不同的到期时间,因为我将单独存储每个密钥。

我该怎么做?

1 个答案:

答案 0 :(得分:8)

这不能直接完成。您可以在整个hset上添加过期,但不能在单个字段上添加过期。如果您想这样做,可以致电r.expire('name', time),其中time是到期前的秒数。

作为替代方案,您可以使用set代替hset

for i in range(10):
    r.set('name:' + str(i), i, ex=time_to_expire_s)

这将取消一些功能,因为(例如)你没有一个好的方法来列出以'name:'开头的所有键,但它可以让你独立设置键的到期。

作为第二个选项,您可以在hset的值中设置到期日。这需要客户端逻辑,Redis不会为您做任何删除;但你可以这样做:

for i in range(10):
    r.hset(
        'name',
        i,
        json.dumps({ 'value': i, 'expiration': time.time() + time_to_expire_s })
    )

然后,如果您曾读过过期的值,则认为这是一个缓存未命中。如果您尝试使密钥过期以释放内存,这对您没有帮助,但如果您的目标是让密钥因某种正确原因而过期,这可能对您有用。