一尘不染

存储前缀在Redis中到期的密钥

redis

尝试使用键前缀存储过期时间x的值

我正在使用Redis。我目前正在使用hset存储值

import redis


r = redis.StrictRedis('localhost')


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


print(r.hgetall('name'))

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

我该怎么做呢?


阅读 369

收藏
2020-06-20

共1个答案

一尘不染

这不能直接完成。您可以在整个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 })
    )

然后,如果您曾经读取过期的值,则认为这是缓存未命中。如果您试图使密钥过期以释放内存,这将无济于事,但是如果您的目标是出于某种正确性原因使密钥过期,那么这可能对您有用。

2020-06-20