Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在redis中存储具有过期前缀的密钥_Python_Redis - Fatal编程技术网

Python 在redis中存储具有过期前缀的密钥

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上添加过期信息,但不能在单个字段上添加过期信息

尝试使用密钥前缀存储过期x个时间段的值

我正在使用redis。我目前正在使用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的结果。