Python 在redis中存储具有过期前缀的密钥
尝试使用密钥前缀存储过期x个时间段的值 我正在使用redis。我目前正在使用hset存储这些值Python 在redis中存储具有过期前缀的密钥,python,redis,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')) 我希望每个密钥都有不同的过期时间,因为我将分别存储每个密钥 我该怎么做?这不能直接完成。您可以在整个hset上添加过期信息,但不能在单个字段上添加过期信息
import redis
r = redis.StrictRedis('localhost')
for i in range(10):
r.hset('name', i, i)
print(r.hgetall('name'))
我希望每个密钥都有不同的过期时间,因为我将分别存储每个密钥
我该怎么做?这不能直接完成。您可以在整个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 })
)
然后,如果你读过一个过期的值,你会认为这是一个缓存缺失。如果您试图使密钥过期以释放内存,这对您没有帮助,但是如果您的目标是使密钥因某种正确性原因过期,这可能对您有用。
我确实需要密钥过期,因为我可能会在一分钟内获得1-2k的输入。要存储它们,调用它们,然后让它们过期,因为将有一个新的1-2k输入。我想,我唯一感到困惑的是,如果我像你说的那样将它们存储为一个集合,我会遇到一个问题来查询它们。所以我不确定我将如何存储这些输入,因为它们是随机单独输入的。您的用例是什么?您已经解释了如何写入Redis,但没有解释以后如何使用数据。我想展示最近完成的搜索。因此,我从我的搜索栏中获取搜索结果,将其存储在redis中,并将其显示给其他用户显示每分钟有一个hset
,然后显示最近的M?与中一样,使用类似于name+“:“+datetime.datetime.now().strftime(“%Y-%m-%dT%H:%m”)
的键,让它们在N>m分钟内过期,然后在处理显示结果时让应用程序逻辑组合最近m的结果。