2017-04-13 1 views
1

지정한 만료 날짜 이후에 내 C# 서비스에서 전체 캐시를 지우거나 플러시하는 방법이 있는지 알고 싶습니다. C#에서 어떻게 이것을 할 수 있습니까?ClearExchangeExchange.Redis 구성 가능한 만료가있는 캐시

// 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); 
     } 
    } 
} 

C#을 내가 실제로 객체 캐시를 채울 수 있지만 오히려 글로벌 캐시 맑은 용액을 할 때 내가 만료에 전달할 수있는 유사한 솔루션을 보았다.

도움이나 의견을 보내 주시면 감사하겠습니다.

답변

1

_waitforit과 같은 가짜 키를 TTL 세트와 함께 추가 할 수 있습니다. 그런 다음 만료 될 때까지 기다립니다. 만료 된 키는 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