在 Openstack Keystone 中使用 Redis,redis 中的一些垃圾
using Redis in Openstack Keystone, some Rubbish in redis
最近,我正在使用 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。
我的问题:
- 如何更改设置以停止创建这些垃圾数据?
- 有什么优雅的清理方法吗?
- 我试图使用命令 'keystone-manage token_flush',但在阅读代码后,我意识到这个命令只是清理 Mysql
中的过期令牌
我希望这个问题仍然有意义。
我正在尝试做与您相同的事情,目前我发现唯一可行的选择是 dogpile.cache.redis 上的论点:redis_expiration_time。
检查后端 dogpile.redis API 或源代码。
http://dogpilecache.readthedocs.io/en/latest/api.html#dogpile.cache.backends.redis.RedisBackend.params.redis_expiration_time
这个参数的唯一问题是它不允许您为不同的类别选择不同的 TTL,例如您想要 10 分钟的令牌和 24 小时左右的目录。根据我的经验,keystone.conf 上的其他参数不起作用(每个类别上的 expiration_time 和 cache_time)...无论如何,如果您使用 redis 存储,则此问题无关紧要只有基石标记。
[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]
命令来查看特定密钥未使用的时间(甚至 GET 重置空闲时间)。您可以使用一个简单的脚本删除空闲时间大于令牌撤销的密钥。
请记住,Redis 上的数据不是持久性数据,这意味着您始终可以使用 FLUSHALL,并且您的 OpenStack 和 keystone 将照常工作,但第一次身份验证需要更长的时间。
最近,我正在使用 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。
我的问题:
- 如何更改设置以停止创建这些垃圾数据?
- 有什么优雅的清理方法吗?
- 我试图使用命令 'keystone-manage token_flush',但在阅读代码后,我意识到这个命令只是清理 Mysql 中的过期令牌
我希望这个问题仍然有意义。
我正在尝试做与您相同的事情,目前我发现唯一可行的选择是 dogpile.cache.redis 上的论点:redis_expiration_time。 检查后端 dogpile.redis API 或源代码。 http://dogpilecache.readthedocs.io/en/latest/api.html#dogpile.cache.backends.redis.RedisBackend.params.redis_expiration_time
这个参数的唯一问题是它不允许您为不同的类别选择不同的 TTL,例如您想要 10 分钟的令牌和 24 小时左右的目录。根据我的经验,keystone.conf 上的其他参数不起作用(每个类别上的 expiration_time 和 cache_time)...无论如何,如果您使用 redis 存储,则此问题无关紧要只有基石标记。
[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]
命令来查看特定密钥未使用的时间(甚至 GET 重置空闲时间)。您可以使用一个简单的脚本删除空闲时间大于令牌撤销的密钥。
请记住,Redis 上的数据不是持久性数据,这意味着您始终可以使用 FLUSHALL,并且您的 OpenStack 和 keystone 将照常工作,但第一次身份验证需要更长的时间。