Memcached에서 추가 대 세트


17

ADD와 SET의 차이점을 이해하지 못합니다. 마치 ADD에 SET가 포함되어 있거나 무언가가 있고 SET가 덮어 쓰면 ADD가 false를 반환하는 것처럼 보입니다. 감사!

편집 : 내 구체적인 질문은 "추가하지 않고 설정하거나 설정하지 않고 언제 추가를 사용합니까?"입니다.

답변:


22

당신은 이미 첫 번째 질문에 대한 답을 얻었습니다. 의도 ADD는 키가 존재하지 않을 때만 작동하고 키의 존재 SET여부에 관계없이 값을 업데이트하는 것입니다. SQL에 익숙하다면 INSERT쿼리 ( ADD)와 UPDATE( SET) 의 차이와 비슷합니다 .

부록 질문과 관련하여 목적에 맞는 것을 사용하십시오. 나는 그 말을 SET당신이 단지 말하고 싶은 것이 더 일반적이기 때문에,보다 일반적인 작업을 할 것 "나는 키가 원하는 foo값을 가지고가 bar, 나는 이미 거기에 있었다 여부를 걱정하지 않는다". 그러나 키가 이미 캐시에 없다는 것을 알아야하는 경우가 빈번한 경우가 있습니다.

ADD적절한 시기를 염두에 두는 예 는 memcache에 세션을 저장하는 것입니다 (그렇지 않으면 권장하지 않습니다). 세션 ID를 임의로 생성하거나 해싱을 통해 원하지 않는 경우 한 사용자에게 다른 사용자의 데이터에 대한 액세스 권한을 부여하므로 기존 키와 동일한 키로 새 세션을 작성합니다. 이 경우 세션을 만들 때을 사용 ADD하고 실패 상태를 반환 한 경우 새 세션 ID를 생성하고 다시 시도해야합니다. 물론 세션을 업데이트하면 SET사용자가 응용 프로그램을 진행하는 동안 사용됩니다.


1
여기서는 약간 따끔 거릴 수 있지만 SQL과 비교할 때 "add"가 INSERT와 비교되면 "set"은 UPDATE가 아닌 REPLACE와 비교됩니다.
matteo

2
그러므로 "거의"라는 단어의 사용. 당신이 얻고 싶은 경우에 정말 nitpicky, REPLACE심지어 SQL 아니지만 ... 그것은 (웃음) "느슨하게 MySQL을 이해하는 SQL에서 영감을 언어"의
움블

3

user-id 'womble'의 위의 답변 외에도 다음 사항도 고려하십시오.

  1. 'add'가 아닌 'set' 이있는 경쟁 조건의 가능성 . Nick Johnson의 답변에 대한 아래 링크를 참조하십시오 : https : //.com/questions/13234556/using-memcache-add-instead-of-set

  2. 'add'가 할 것을 알고 있다면 'set'을 사용하지 마십시오. 이것은 RPC 호출이므로 네트워크를 통한 데이터 전송피하기위한 것 입니다. 그리고 거의 모든 시간은 memcache에서 키-값 쌍을 찾는 것과 달리 네트워크 트래픽에 의해 소비됩니다. 따라서 최상의 네트워크 트래픽을 피할 수 있다면 응답 시간이 더 빠릅니다.


Appstats ( https://developers.google.com/appengine/docs/python/tools/appstats(Google ))를 참조하고 위의 2 번 포인트를 더 이해하려면 http://www.youtube.com/watch를 참조하십시오. Guido Van Rossum (@Google)의 ? v = bvp7CuBWVgA

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.