2012-11-29 5 views
1

IronCache에서 값을 원자 적으로 증가시킬 수 있음을 알았지 만 많은 IronWorker가 단일 캐시 키에 값을 put 시도하면 어떻게 될까요? 캐시에 업데이트를 동기화하기 위해 메시지 큐에 값 업데이트를 저장하는 것이 더 좋을까요? 아니면 다른 관용적 방법입니까?IronCache에 대한 원자 적 업데이트

+0

안녕하세요, 캐시에 넣으려고하는 것은 무엇입니까? 당신은 노동자들 또는 어떤 것의 올바른 순서를 가질 필요가 있습니까? –

+0

안녕하세요 @Travis, 상태 캐시를 단일 캐시 키에 저장합니다. 다른 작업자는 상태의 다른 부분을 업데이트 할 수 있습니다 (값은 계층 적 JSN입니다). 동시에 읽거나 업데이트하지 않는 한 괜찮습니다. 수동 동기화가없는 경쟁 조건을 피하기 위해 비교 및 ​​교체가 필요합니다. – devth

답변

1

현재 경쟁 조건 신을 자극하지 않고 정수가 아닌 캐시 항목을 업데이트하는 관용적 인 방법은 없습니다. 한계를 극복하기 위해서는 여러 가지 해킹 방법이 있지만 MQ 솔루션 (한 명의 작업자 만 변경 사항을 작성한다고 가정)이 최선의 방법 일 것입니다.

우리는 단점에 대해 알고 있으며 수정 작업을하고 있지만 현재로서는 발표 할 내용이 없습니다.

+0

감사합니다 @ 패디 - 말이 되네. – devth

+0

어떻게 싱글 톤 작업자를 확보 할 수 있습니까? 대기열에서 업데이트를 사용하도록 작업자를 해고하기 위해 webhooks를 사용하고 있지만 동일한 작업자의 여러 인스턴스를 실행할 가능성이 있습니다. – devth

+0

@devth 코드를 업로드 할 때 max_concurrency 속성을 사용하여 병렬로 실행할 수있는 작업자 수를 제한 할 수 있습니다. 싱글 톤 작업자를 만들려면 그냥 1로 설정하십시오. :) – Paddy

1

이렇게하는 한 가지 방법은 값을 여러 개의 캐시 항목으로 나누는 것입니다. cache_key_a에 그런

{ 
    "x": "y", 
    "sub1": "cache_key_a", 
    "sub2": "cache_key_b" 
} 

:

{ 
    "x": "y", 
    "sub1": { 
     "a": "b" 
    }, 
    "sub2": { 
     "c": "d" 
    } 
} 

변경 그것에 :

{ 
    "a": "b" 
} 

을 그리고 cache_key_b 및 등등 동일을 당신이 당신의 JSON 계층 구조를 말한다. 그게 당신 문제를 해결할 수 있을까요?

+0

프론트 엔드가 모든 페이지의 캐시를 요청했기 때문에 이것을 하나의 키로 유지했습니다. 백그라운드 작업자가 주기적으로 업데이트하는 상태 캐시이며 FE는 항상 최신 상태를 표시해야합니다. 별도의 k/v 쌍으로 분할하면 각 페이지로드시 약 15 개의 캐시 요청으로 바뀝니다. – devth

관련 문제