2017-04-13 10 views
1

指定した有効期限が過ぎても、キャッシュ全体をクリア/フラッシュする方法があるかどうかを知りたい。どうすればC#でこれを達成できますか?ClearExchangeExchange.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

TTLを設定して、_waitforitのようなレディスに偽のキーを追加できます。 それが期限切れになるのを待つ。 有効期限が切れているキーについては、key space eventsに登録してください。 _waitforitキーが期限切れになると、データベースをフラッシュします。

これらのイベントの唯一の欠点は、Redisサーバーで明示的に有効にする必要があることです。しかし、設定やコマンドライン経由で行うことができます。あなたは、私は、サイトのノートで

思いCONFIG SET notify-keyspace-events Exe必要があるでしょう:あなたはすべてのことを自分でコーディングしたくない場合は

あなたは、あなたのための仕事のほとんどを行うためにCacheManagerを使用することができます。

これは有効期限設定でビルドされており、これらすべてのイベントを聴くことができます。

通常のC#イベントonRemoveByHandleを購読することができます。キースペースイベント(すべてが適切に設定されている場合)によってトリガーされます。

+0

イベントは「キースペースイベント」について知りませんでした。この素晴らしいスタッフのおかげで私は感謝しています! – ThatAwesomeCoder

+0

np;)の唯一の欠点は、Redisサーバーで明示的に有効にする必要があることです。しかし、設定やコマンドライン経由で行うことができます。 'CONFIG SET notify-keyspace-events Exe'が必要だと思います – MichaC

関連する問題