栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Redis:在“设置”中为键值对设置超时

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis:在“设置”中为键值对设置超时

抱歉不行。Redis的“容器”(即列表,哈希,集合和排序集合)不支持按成员过期,尽管过去多次要求使用此功能。

但是,您可以实现自己的逻辑以实现该结果。解决此问题的方法有几种-
这是一个示例。代替使用集合,而使用排序集合(ZSET),并使用历元值将每个成员的分数设置为到期时间。例如,可以使用Lua脚本来实现这种类型的工作流程。要添加成员,请使用以下方法:

redis.call('zadd', KEYS[1], os.time()+ARGV[1], ARGV[2])

并按照您的示例使用“ 1 a 60 1”和“ 1 a 120
2”作为参数进行评估。要实际上从集合中“过期”项目,您需要在时间过去后将其删除。您可以通过实施扫描列表的定期过程或在访问列表时进行此操作。例如,以下Lua可用于使成员过期:

redis.call('zremrangebyscore', KEYS[1], '-inf', os.time())

并根据您的示例使用“ 1 a”作为参数进行评估。

编辑:如何使用Python实现以上

import timeimport redisdef add(r, key, ttl, member):    r.zadd(key, member, int(time.time()+ttl))def expire(r, key):    r.zremrangebyscore(key, '-inf', int(time.time()))...r = redis.Redis()add(r, 'a', 1, 60)add(r, 'a', 2, 120)# periodically or before every operation doexpire(r, 'a')


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号