2017-09-28 57 views
0

我正在使用Spring Redis存儲庫,我對刪除操作和幻像鍵感到困惑。從redis刪除鍵/值 - 幻影密鑰沒有刪除

當執行刪除操作時,幻影密鑰不會被刪除,這是正常行爲嗎?如果是,當從代碼中刪除原始密鑰時是否可以強制刪除幻像密鑰。

我期待刪除刪除原始密鑰和相關的幻影密鑰。

我計劃使用timeToLive功能來確保未被我的應用程序刪除的密鑰在一段時間後過期。

註釋有關域對象

@RedisHash(value = "requestContext", timeToLive = 9000) 

的刪除設置上這樣進行的:

repository.delete(id) 

預先感謝您的幫助。

回答

0

當您從Redis中刪除密鑰/值時,Phantom密鑰不會立即刪除。 Spring Data Redis管理幻影密鑰以管理二級索引以及其他功能。 Spring Data Redis將原始散列的副本保留爲具有稍長TTL(5分鐘)的幻像散列。這意味着:幻像 Redis中的TTL比常規密鑰TTL多5分鐘。 當原始散列期滿時,彈簧數據Redis的加載幻象散列來執行清理諸如去除二級索引等的引用 瞭解更多:Redis key Expirations

當期滿被設定爲正的值,根據EXPIRE命令被執行。除了保留原始文件外,幻影副本在Redis中保留並設置爲在原始文件後5分鐘到期。這樣做的目的在於,即使原始值已經消失,只要密鑰過期,Repository支持也可以通過Springs ApplicationEventPublisher發佈RedisKeyExpiredEvent持有過期值。所有連接的應用程序將使用Spring Data Redis存儲庫接收到期事件。