Python 3.x 有没有一种方法可以在N秒后设置一个键?
我在Python 3.x 有没有一种方法可以在N秒后设置一个键?,python-3.x,redis,Python 3.x,Redis,我在windows10上使用python3.6.1::anaconda4.4.0(64位)和rediscli3.2.100通过pip安装redis==2.10.6 我知道有一种方法可以设置密钥在N秒后过期,方法是使用 但现在我需要一种在N秒后设置密钥的方法,例如SETAF,还有一种在N秒后生成密钥的方法,例如AFTTL > SETAF s 10 "hi" # set s="hi" after 10 seconds OK > GET s (nil) > AFTTL s (int
windows10上使用python3.6.1::anaconda4.4.0(64位)
和rediscli3.2.100
通过pip安装redis==2.10.6
我知道有一种方法可以设置密钥在N秒后过期,方法是使用
但现在我需要一种在N秒后设置密钥的方法,例如SETAF
,还有一种在N秒后生成密钥的方法,例如AFTTL
> SETAF s 10 "hi" # set s="hi" after 10 seconds
OK
> GET s
(nil)
> AFTTL s
(integer) 5
> GET s # ↑ within 10 seconds
(nil)
> GET s # ↓ 10 seconds later
"hi"
没有一种内在的方式可以做到这一点。我可以建议两种方法:
使用SETEX
在redis中设置一个虚拟计时器键,当它在N秒后过期时,我们设置实际的键。
我们如何知道密钥是否过期?
这是可以做到的。
EXPIRE在将EXPIRE设置为密钥时生成一个EXPIRE事件,或者每次在密钥上设置的正超时导致密钥被删除时生成一个EXPIRE事件(有关详细信息,请参阅EXPIRE文档)
一种更简单的方法(您不需要做很多时间的同步工作)是使用任务队列,如,并创建一个Python方法来设置所需的键。
芹菜允许使用装饰器和类似或的方法,将任务保持在队列中N秒,并执行post,以便在N秒后在redis中设置密钥
应用异步(args=None,kwargs=None,task\u id=None,producer=None,
link=None,link\u error=None,shadow=None,**选项)[source]应用
通过发送消息异步执行任务
参数:
args(Tuple)–传递给
任务
kwargs(Dict)–传递给任务的关键字参数
倒计时(浮点)–任务执行到未来的秒数
应该执行。默认为立即执行
没有一种内在的方式可以做到这一点。我可以建议两种方法:
使用SETEX
在redis中设置一个虚拟计时器键,当它在N秒后过期时,我们设置实际的键。
我们如何知道密钥是否过期?
这是可以做到的。
EXPIRE在将EXPIRE设置为密钥时生成一个EXPIRE事件,或者每次在密钥上设置的正超时导致密钥被删除时生成一个EXPIRE事件(有关详细信息,请参阅EXPIRE文档)
一种更简单的方法(您不需要做很多时间的同步工作)是使用任务队列,如,并创建一个Python方法来设置所需的键。
芹菜允许使用装饰器和类似或的方法,将任务保持在队列中N秒,并执行post,以便在N秒后在redis中设置密钥
应用异步(args=None,kwargs=None,task\u id=None,producer=None,
link=None,link\u error=None,shadow=None,**选项)[source]应用
通过发送消息异步执行任务
参数:
args(Tuple)–传递给
任务
kwargs(Dict)–传递给任务的关键字参数
倒计时(浮点)–任务执行到未来的秒数
应该执行。默认为立即执行
最后,我使用以下方法:
首先定义在redis中删除密钥的方法
r是一个redis.StrictRedis
实例
def remove_alarm(code, alarm_last): # alarm_last means how many seconds the key will keep alive
time.sleep(alarm_last)
r.srem('alarms', code)
在我的主程序中,我设置了redis names alarms和values code的一个键,并触发一个线程调用remove\u alarm
r.sadd('alarms', code) # for code, it a paramater to my function
threading.Thread(target=remove_alarm, args=(code, alarm_last)).start()
虽然键“alarms”比“alarms\u last”更能保持活动状态(启动线程需要一些时间),但它对我很有用。最后,我使用以下方法:
首先定义在redis中删除密钥的方法
r是一个redis.StrictRedis
实例
def remove_alarm(code, alarm_last): # alarm_last means how many seconds the key will keep alive
time.sleep(alarm_last)
r.srem('alarms', code)
在我的主程序中,我设置了redis names alarms和values code的一个键,并触发一个线程调用remove\u alarm
r.sadd('alarms', code) # for code, it a paramater to my function
threading.Thread(target=remove_alarm, args=(code, alarm_last)).start()
虽然“alarms”(报警)键比“alarms”(上一次)键更能保持活动状态(启动线程需要一些时间),但它对我很有用。没有内置的方法,你需要自己实现它。没有内置的方法,你需要自己实现它。