복붙노트

[REDIS] 레디 스에서 푸른 캐시 / DataCache 스타일의 지역

REDIS

레디 스에서 푸른 캐시 / DataCache 스타일의 지역

나는 푸른에 걸쳐 C # ASP.Net 웹 응용 프로그램을 이동하는 계획 과정 (현재 단일 전용 서버에서 호스팅)에서 오전과 옵션을 캐싱에서 찾고 있어요. 우리는 한 번에 실행중인 응용 프로그램의 인스턴스를 가지고 있기 때문에 현재, 우리는 몇 가지 동일한 요청의 SQL DB를 완화하는 '과정에서'메모리 캐시를 가지고있다.

매니저가 / 서비스는 데이터베이스, 예를 들어,의 그 부분에 대한 변경을 할 때 순간이 프로세스는 캐시의 명확한 특정 부분이다 우리는 사용자 테이블을 가지고 우리가 같은 키를해야합니다 "사용자. {0}"단일 사용자 기록 / 객체와 "Users.ForeignKey. {0}"반환 외부 키에 관련된 모든 사용자를 반환. 우리는 하나의 사용자 레코드를 업데이트하는 경우 (사용자 ID = 1 경우) 쉽게 목록 컬렉션의 모든 사람들이 변경되었을 수 있기 때문에 우리는 "User.1"키를 제거합니다. 우리는 패턴으로 키를 제거하여이 작업을 수행 할 만 영향을받는 키가 제거되고,이 수단과 다른 모든 지속.

우리는 지금 잠시 동안 푸른이 이동을 계획하고있다 그리고 우리는 먼저 모든 것을 찾기 시작 때 푸른 레디 스 캐시 서비스는 우리가 AppFabric에 따라 푸른 캐시 서비스, 바라 보았다 그래서 적어도, 지원, 사용할 수 없습니다. 우리는 우리가 그냥 꽤 정확한 현재의 방법하지만 OK로, 영향을받은 지역을 세척 한 후 다른 개체 유형을 구분 DataCache 영역을 사용하고 것이 결정이 사용. 레디 스이 장면에 온 이후 이제, 우리는보고있다 그리고 가능하면 그것을 사용하는 것을 선호합니다. 그러나, 그것이 우리가 / 섹션, 각 '지역'에 대해 별도의 레디 스 캐시를해야 할 것 같은 일을 달성 할 것으로 보인다 나는 그것이 우리가 푸른에서 레디 스 캐시 서비스의 작은 인스턴스 많은 비용을 지불 할 의미 이해하는 방법과 어떤 어떤 꽤 많은 우리가 캐시에 별도로 풀림 성 부분을 10 + 필요가 주어진 비용 것입니다.

누구나 레디 스에 푸른 DataCache 지역과 비슷한 무언가를 달성하기 위해 또는 내가 아마 누락 것을 눈부시게 분명 무언가를 제안 할 수 있습니다 방법을 알고있다.

죄송합니다 같은 긴 질문 / 설명하지만 어려운 내가 배경 / 문맥없이 달성하기 위해 노력하고있어 설명을 발견했다.

감사, 가레스

최신 정보:

나는 패턴으로 키를 삭제 여기에 '열쇠'명령 여기 루아 스크립트 EVAL 명령을 사용하여 포함시키는 작업을 할 수있는 몇 bash는 명령을 발견했습니다.

StackExchange.Redis를 사용할 때의 상호 작용에 StackExchange.Redis 클라이언트를 사용하여 계획하고있어, 누구 아는 방법 (패턴에 의해 삭제 키)에게 명령이나 대안의 이러한 유형을 사용합니까?

읽기, 가레스 주셔서 감사합니다

해결법

  1. ==============================

    1.당신은 활용 비동기 / await를 기능을이 방법을 사용할 수 있습니다 및 스택 교환 클라이언트를 레디 스 사용 패턴에 의해 삭제 키에 파이프 라이닝 레디 스

    당신은 활용 비동기 / await를 기능을이 방법을 사용할 수 있습니다 및 스택 교환 클라이언트를 레디 스 사용 패턴에 의해 삭제 키에 파이프 라이닝 레디 스

    private static Task DeleteKeysByPatternAsync(string pattern)
    {
        IDatabase cache1 = Connection.GetDatabase();
        var redisServer1 = Connection.GetServer(Connection.GetEndPoints().First());
        var deleteTasks = new List<Task>();
        var counter = 0;
        foreach (var key in redisServer1.Keys(pattern: pattern, database: 0, pageSize: 5000))
        {
            deleteTasks.Add(cache1.KeyDeleteAsync(key));
            counter++;
            if (counter % 1000 == 0)
                Console.WriteLine($"Delete key tasks created: {counter}");
        }
        return Task.WhenAll(deleteTasks);
    }
    

    그럼 당신은 다음과 같이 사용할 수 있습니다 :

    DeleteKeysByPatternAsync("*user:*").Wait(); //If you are calling from main method for example where you cant use await.
    

    또는

    await DeleteKeysByPatternAsync("*user:*"); //If you run from async method
    

    당신은 pageSize가 조정할 또는 방법 PARAM로받을 수 있습니다.

  2. ==============================

    2.나는 당신의 질문으로 이해하고 무엇을 위해 당신은 그 기록에 관련된 모든 데이터는 하나를 사용하여 캐시 무효화되고, 그 기준에 관한 기록이 변경 될 때마다 그래서, 어떤 기준 (귀하의 경우 사용자)에 따라 데이터 그룹에 필요 캐시 API 호출.

    나는 당신의 질문으로 이해하고 무엇을 위해 당신은 그 기록에 관련된 모든 데이터는 하나를 사용하여 캐시 무효화되고, 그 기준에 관한 기록이 변경 될 때마다 그래서, 어떤 기준 (귀하의 경우 사용자)에 따라 데이터 그룹에 필요 캐시 API 호출.

    당신은 푸른 여러 캐싱 토폴로지와 함께 다양한 기능을 가지고 Alachisoft하여 푸른위한 분산 캐싱 솔루션을 NCache를 사용하여 푸른이를 얻을 수 있습니다.

    NCache는 작업의 유형을 수행 할 수있는 여러 가지 방법으로 할 수 있습니다. 사용 사례에 적합한 하나는 또한에 그룹 / 하위 그룹에서 그룹 데이터에 당신을 수 있도록 데이터를 그룹화하는 기능입니다. 데이터는 나중에 페치 / 그룹 / 서브 그룹들에 기초하여 제거 할 수있다.

    NCache는 항목이 추가되는으로 태그를 추가 할 수 있습니다. 이 태그는 하나 개 이상의 지정된 태그를 포함하는 모든 데이터를 가져 오는 / 제거에 사용할 수 있습니다. NCache 제공 쿼리 기능 (삭제 쿼리)도 특정 조건을 만족하는 데이터를 제거하는 데 사용할 수 있습니다.

  3. from https://stackoverflow.com/questions/27094938/azure-cache-datacache-style-regions-in-redis by cc-by-sa and MIT license