2016-03-15 46 views
0

尝试使用密钥前缀存储过期x时间的值存储带有在redis中过期的前缀的密钥

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

import redis 


r = redis.StrictRedis('localhost') 


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


print(r.hgetall('name')) 

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

我该怎么做?

回答

3

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

,然后如果你读过其到期是在过去的一个值,你认为这是一个高速缓存未命中。如果您试图为了释放内存而试图使密钥过期,这不会对您有所帮助,但如果您的目标是由于某种正确性原因而使密钥过期,这可能适用于您。

+0

我确实需要的按键到期的说,我可能过了一分钟的过程中得到1-2K输入。想要存储这些内容,打电话给他们,然后让他们到期,因为会有新的1-2k输入。 – nadermx

+0

那么'set'会为你工作吗? – sasmith

+0

我想,我仍然在迷茫的唯一的事情是,如果我将它们存储为一组,你说我遇到一个问题来查询它们。所以不知道我将如何存储这些输入,因为它们是随机进入的。 – nadermx