尝试使用键前缀
存储超过x时间的值我正在使用redis。我目前正在使用hset
存储值import redis
r = redis.StrictRedis('localhost')
for i in range(10):
r.hset('name', i, i)
print(r.hgetall('name'))
我希望每个密钥都有不同的到期时间,因为我将单独存储每个密钥。
我该怎么做?
答案 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 })
)
然后,如果您曾读过过期的值,则认为这是一个缓存未命中。如果您尝试使密钥过期以释放内存,这对您没有帮助,但如果您的目标是让密钥因某种正确原因而过期,这可能对您有用。