首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Openstack中使用Redis,在redis中使用一些垃圾

在Openstack中使用Redis,在redis中使用一些垃圾
EN

Stack Overflow用户
提问于 2017-04-18 07:53:25
回答 1查看 816关注 0票数 1

最近,我正在使用Redis来缓存OpenStack Keystone的令牌。这个函数很好,但是一些过期的缓存数据仍然在Redis中。

我的Keystone配置:

代码语言:javascript
复制
[cache]
enabled=true
backend=dogpile.cache.redis
backend_argument=url:redis://127.0.0.1:6379

[token]
provider = uuid
caching=true  
cache_time= 3600
driver = kvs
expiration = 3600

但是Redis中的一些过期数据:数据过期了,但仍然在这里,因为TTL是-1。

我的问题是:

  1. 如何更改设置以阻止创建的垃圾数据?
  2. 是某种优雅的方式来清理它吗?
    • 我试着使用命令‘keystone-管理令牌_刷新’,但是在阅读了代码之后,我意识到这个命令只是清理Mysql中过期的令牌。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 11:20:07

我希望这个问题仍然适用。

我正试图和您做同样的事情,目前我发现唯一可行的方法是关于dogpile.cache.redis: redis_expiration_time的论点。签出后端dogpile.redis API或源代码。time

这个参数的唯一问题是,它不允许您为不同的类别选择不同的TTL,例如,您需要10分钟的令牌和24小时左右的目录。根据我的经验,keystone.conf上的其他参数不起作用(expiration_time和cache_time在每个类别上).无论如何,如果您使用redis只存储keystone令牌,则此问题与此无关。

代码语言:javascript
复制
[cache] 
enabled=true
backend=dogpile.cache.redis
backend_argument=url:redis://127.0.0.1:6379
// Add this line
backend_argument=redis_expiration_time:[TTL]

只需将TTL替换为您想要的ttl,您就会开始注意到在redis中有ttl的键,过一段时间,您就会发现它们不再存在了。

关于第二个问题:

这可能不是最好的答案,但您可以在redis-cli上使用OBJECT idletime [key]命令来查看没有使用特定键的时间(甚至可以获得重置空闲时间)。您可以使用简单的脚本删除空闲时间大于令牌撤销的密钥。

请记住,Redis上的数据不是持久数据,这意味着您可以始终使用FLUSHALL,并且您的OpenStack和keystone将像往常一样工作,但是ofc第一个身份验证将花费更长的时间。

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

https://stackoverflow.com/questions/43466631

复制
相关文章

相似问题

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