最近,我正在使用Redis来缓存OpenStack Keystone的令牌。这个函数很好,但是一些过期的缓存数据仍然在Redis中。
我的Keystone配置:
[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。
我的问题是:
发布于 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令牌,则此问题与此无关。
[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第一个身份验证将花费更长的时间。
https://stackoverflow.com/questions/43466631
复制相似问题