在Redis中是否可以设置TTL(生存时间)而不是特定键,而是设置成员?
我正在使用Redis文档提出的标签结构 - 数据是简单的键值对,标签是包含与每个标签对应的键的集合,例如
> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
Run Code Online (Sandbox Code Playgroud)
密钥id:id_1将按预期到期,但我没有看到从tag:tag_1集合中删除相应成员的有效方法.
我提出的一种方法是使用包含脚本的cron作业,该脚本将定期从集合中删除过期的密钥 - 通过将所有标记名称添加到另一个集合然后遍历所有标记,然后对应于每个标记的所有ID并检查是否存在相应的密钥 - 如果不存在,则调用SREM.
我不认为这将是一种有效的方式,我可能希望保持标签尽可能干净,因为集合的大小可能会影响多个标签(SINTER)的搜索性能.有更"内部"的方式吗?
我想基于Redis实现会话存储.我想将会话数据放入Redis.但我不知道如何处理会话过期.我可以循环遍历所有redis密钥(sessionid)并评估最后的访问时间和最大空闲时间,因此我需要将所有密钥加载到客户端,并且可能有1000m会话密钥并且可能导致非常差的I/O表演.
我想让Redis管理过期,但是当密钥到期时没有监听器或回调,所以不可能触发HttpSessionListener.有什么建议?