首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果密钥正在使用,如何保存在redis中,如果没有,如何使密钥过期?

如果密钥正在使用,如何保存在redis中,如果没有,如何使密钥过期?
EN

Stack Overflow用户
提问于 2013-11-04 19:18:43
回答 3查看 3K关注 0票数 3

我在Redis中有一个特定的缓存系统。

这个系统的内容非常不稳定,值总是会被添加和删除。我希望尽可能多地将“用过的”密钥保留在内存中,同时让旧的密钥过期。每个请求可能需要来自缓存的数百个键。

我知道我可以设置一个“足够长”的过期时间,并且只处理Cache未命中,但我希望尽可能少的未命中。

目前我正在做这样的事情,当我写/读缓存时(伪代码)

代码语言:javascript
复制
# write
write(key, value)
expire(key, ttl)

# read
read(key)
expire(key, ttl)

我可以通过使用流水线来优化读取。

现在,这看起来仍然不是最好的方法。有人能给我一个更好的策略吗?

EN

回答 3

Stack Overflow用户

发布于 2013-11-05 14:20:05

如果您可以接受10秒的(当前)分辨率,那么OBJECT IDLETIME命令将让您更好地了解哪些内容有一段时间没有使用(以10秒为单位)

代码语言:javascript
复制
> SET X 10
OK
> OBJECT IDLETIME X
10
票数 3
EN

Stack Overflow用户

发布于 2018-06-09 04:35:27

我将创建一个脚本(https://redis.io/commands/script-load),它直接在服务器端以原子方式更快地完成此任务,然后在EvalSha (https://redis.io/commands/evalsha)中使用它。

这节省了每个命令的额外往返行程。

或者,你可以实现一个类似于Redis在空间不足时运行的LRU的算法(https://redis.io/topics/lru-cache) --每隔一段时间获取随机的密钥,如果它们对你来说太旧了,就把它们移除,或者循环直到你得到一个长序列的新密钥。

票数 1
EN

Stack Overflow用户

发布于 2013-11-06 22:13:28

如果你想实现的是一个完美的LRU缓存(最近最少使用),你可以在全球范围内调整Redis的行为,这里有一个关于Redis的链接,LRU:http://oldblog.antirez.com/post/redis-as-LRU-cache.html

请注意,它在redis上使用的是maxmemory属性,除非您查看易失性LRU:How to make Redis choose LRU eviction policy for only some of the keys?,否则驱逐规则是全局的。

您正在使用一个手动解决方案来清除自定义过期/ TTL,这是最强大的解决方案,但使用此解决方案可能会简化您的配置,并在内存大小方面具有更好的可预测性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19766626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档