2017-04-18 63 views
0

一些垃圾最近,我使用Redis的緩存爲OpenStack的梯形令牌。該功能很好,但仍有一些過期的緩存數據仍在Redis中。使用Redis的OPENSTACK中的梯形校正,在Redis的

我的梯形配置:

[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. 是一些優雅的方式來清理?
    • 我試圖用命令「梯形管理token_flush」,但看完代碼之後,我意識到這個命令只是清理過期的令牌在MySQL

回答

1

我希望這個問題仍然具有現實意義。

我試圖做同樣的事情,你是,而且現在我找到工作的唯一選擇是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來存儲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]命令,看看有多少時間沒有使用特定鍵(甚至GET重置空閒時間)。您可以使用簡單的腳本刪除空閒時間大於令牌撤銷的密鑰。

請記住,Redis上的數據不是持久數據,這意味着您始終可以使用FLUSHALL,OpenStack和keystone將照常工作,但第一次驗證需要更長時間。

+0

非常感謝你。添加這條線對我來說是完美的。 'backend_argument = redis_expiration_time:[TTL]' 例如:如果最長緩存超時時間爲3小時,我會將dogpile的Redis過期時間設置爲3小時。 3小時後,所有緩存的數據將被自動刪除。 –