2017-04-13 28 views
1

我想知道是否有方法在指定的失效日期後從我的c#服務中清除/刷新整個緩存。我怎樣才能在c#中實現這一點?清除可配置到期的StackExchange.Redis緩存

C#

// library 
using StackExchange.Redis; 

public class RedisCacheService 
{ 
    // Fields 
    ConnectionMultiplexer _Redis = null; 
    IDatabase _RedisDB = null; 

    // ctor 
    public RedisCacheService(String redisConnectionString) // , DateTime ExpiryDate ? - Extracted from config 
    { 
     try 
     { 
      if (String.IsNullOrEmpty(redisConnectionString)) 
      { 
       throw new Exception("The 'redisConnectionString' parameter is unassigned"); 
      } 

      this._Redis = ConnectionMultiplexer.Connect(redisConString); 

      if (_Redis == null) 
      { 
       throw new Exception("_Redis object not initialized"); 
      } 

      this._RedisDB = _Redis.GetDatabase();   

      // I need to set some sort of expiry config here in the constructor. 

      // The redisConnectionString is passed through when an instance of this class is created in the host startup and 
      // the redisConnectionString is extracted from the config. 
     } 
     catch (Exception e) 
     { 
      throw new Exception(e); 
     } 
    } 
} 

我看到了一個類似的解決方案,我可以在到期傳遞時,我竟與物體填充緩存,但我寧願要一個全局緩存澄清溶液。

任何幫助或建議,將不勝感激。

回答

1

您可以添加一個假密鑰到redis,如_waitforit,設置TTL。 然後您等待它過期。 與此同時,您訂閱key space events已過期的密鑰。您的_waitforit密鑰到期時,您刷新數據庫。

這些事件唯一的缺點是您必須在Redis服務器上明確啓用它。可以通過配置或命令行來完成。你需要CONFIG SET notify-keyspace-events Exe我覺得

在網站上附註:

你可以使用CacheManager做大部分工作的你,如果你不想編寫所有的自己。

它建立在到期配置,你可以聽所有這些事件。

您將可以訂閱正常的C#事件onRemoveByHandle,該事件通過鍵空間事件(如果一切配置正確)觸發。

+0

關於「關鍵空間事件」沒有事件知道。這令人敬畏的東西感謝我的讚賞! – ThatAwesomeCoder

+0

np;)唯一的缺點是你必須在redis服務器上顯式啓用它。可以通過配置或命令行來完成。你需要'CONFIG SET通知密鑰空間事件Exe'我想 – MichaC