2017-07-18 164 views
3

我在我的大數據應用程序中使用Redis作爲緩存服務。 Redis的主要目的是驗證我們從每個請求中收到的密鑰。Redisson捕獲密鑰到期事件

我們使用旋轉地圖存儲鍵和值對,例子是如下,

key = 1212sads23sads341212saas23asds45 
value = Regular java object with some complex data. 

我想爲我插入每個鍵指定TTL,我知道我能做到這一點使用RMap.expire()。我沒有得到的是,當特定的密鑰過期時,我怎麼能聽到。由於每個密鑰都將具有不同的TTL,並且如Redis文檔中所述,它會處理密鑰的自動過期並生成事件。

我的問題是,

  1. 我怎樣才能捕捉生成EXPIRE事件,也得到其關鍵就得到了在Redisson java庫生成的?

  2. 這是更好的方法(redis內置自動檢測),還是運行一些線程來檢查過期的密鑰更好?

回答

3

由於2.9.3和3.4.3版本Redisson提供了爲地圖條目到期註冊偵聽器的功能。

下面是使用例子:

RMapCache<String, String> mapCache = redisson.getMapCache("myMap"); 
int expireListener = map.addListener(new EntryExpiredListener<Integer, Integer>() { 
    @Override 
    public void onExpired(EntryEvent<String, String> event) { 
     event.getKey(); // expired key 
     event.getValue() // expired value 
     // ... 
    } 
}); 

map.put("key", "value", 10, TimeUnit.SECONDS); 
+0

我有2個疑點進一步1.從哪裏可以下載最新版本。 2.正在使用監聽器更好的方法,因爲在Redis上他們提到,實際過期事件和通知可能會有重大延遲? –

+1

@RahulBorkar回答您的問題:1.這裏是[快速入門](https://github.com/redisson/redisson#quick-start)指南。 2.它使用Redis中不提供的自有失效方法。是的,在實際到期時間和火災事件之間可能會出現延遲。 –

+0

感謝您的詳細回覆。你有沒有關於你提到的延誤的表現評估? –