Redis和“无效的到期时间”

我们运行一个Python(Django)应用程序,将数据临时存储在Redis中。 有时,虽然数据在Redis中存储的时间已经过期,因此调用setex的过期时间<= 0。

有没有办法让Redis在没有公开抱怨的情况下悄悄丢弃这样一个setex命令:

ResponseError: invalid expire time in setex 

现在我不能从应用程序中做到这一点。

Django对于处理这种情况有非常好的原始。 只需将redis设置为您的一个CACHES,并使用cachr.set方法将存储过程设置为过期n秒。

你可以写一个LUA脚本来做到这一点。

发送密钥名称为KEYS,并将string和过期值设置为ARGV:

 redis.call('set', KEYS[1], ARGV[1],'EX', ARGV[2]) return 1 

只有到期date> 0时,您才可以拨打电话。不pipe操作如何,您都可以返回所需的任何答案。

用SCRIPT LOAD载入一次LUA脚本,保存其SHA1答案,并将其与EVALSHA一起使用,以避免发送/编译每个用法的lua脚本。