현재 Redis 테이블에 약 50k 해시를 저장하고 있으며 매 5 개의 키/값 쌍이 있습니다. 하루에 한 번 해시 값을 업데이트하는 일괄 작업을 실행합니다. 일부 키 값을 해시의 다른 키 값으로 설정하는 것도 포함됩니다. 여기 Redis : 모든 해시 값을 얻는 가장 좋은 방법
키와 세트를 반복은 new_code 값이주고 해시이있는 경우 new_code하는 old_code 내 파이썬 코드 :pipe = r.pipeline()
for availability in availabilities:
pipe.hget(availability["EventId"], "new_code")
for availability, old_code in zip(availabilities, pipe.execute()):
if old_code:
availability["old_code"] = old_code.decode("utf-8")
for availability in availabilities:
if "old_code" in availability:
pipe.hset(
availability["EventId"], "old_code", availability["old_code"])
pipe.hset(availability["EventId"], "new_code", availability["MsgCode"])
pipe.execute()
내가 달성하기 위해 두 번 키를 반복해야한다는 나에게 조금 이상해 같은 결과가 더 좋은 방법이 있나요?
내가 알아 내려고하는 또 다른 사항은 최상의 성능으로 모든 해시 값을 얻는 방법입니다.
d = []
pipe = r.pipeline()
keys = r.keys('*')
for key in keys:
pipe.hgetall(key)
for val, key in zip(pipe.execute(), keys):
e = {"event_id": key}
e.update(val)
if "old_key" not in e:
e["old_key"] = None
d.append(e)
을 그래서 기본적으로 내가 다음 값을 얻기 위해 모든 키에 걸쳐 HGETALL
와 keys *
을 반복 않습니다 여기에 내가 현재 그것을 할 방법이다. 이것은 너무 느립니다. 특히 반복합니다. 그것을 할 수있는 더 빠른 방법이 있습니까?
프로그래밍 언어를 사용하지 않고 질문의 첫 번째 부분에 대해 더 설명 할 수 있습니까? – Malinga
http://stackoverflow.com/questions/38065714/is-there-a-command-in-redis-for-hash-data-structure-similar-to-mget/38066688#38066688 내 대답을 확인하십시오. – Malinga
모든 해시/행 현재 코드를 가져 와서 new_code로 저장하고 현재 new_code를 old_code로 저장합니다 (이전 상태를 기록하고 모든 데이터 풀에서 old_code와 new_code를 비교). –