Tôi hiện lưu trữ khoảng 50k băm trong bảng Redis của tôi, mỗi cái có 5 cặp khóa/giá trị. Mỗi ngày một lần, tôi chạy lệnh batch để cập nhật giá trị băm, bao gồm thiết lập một số giá trị khóa cho giá trị của khóa khác trong một băm.Redis: cách tốt nhất để có được tất cả các giá trị băm
Đây là mã python của tôi mà lặp thông qua các phím và bộ old_code để new_code nếu giá trị new_code tồn tại cho sự trao băm:
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()
Đó là một chút lạ với tôi rằng tôi phải lặp qua các phím hai lần để đạt được cùng một kết quả, có cách nào tốt hơn để làm điều này không?
Một điều khác mà tôi đang cố gắng tìm ra là làm cách nào để có được tất cả các giá trị băm có hiệu suất tốt nhất. Dưới đây là cách tôi đang làm điều đó:
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)
Vì vậy, về cơ bản tôi keys *
sau đó lặp với HGETALL
trên tất cả các phím để có được giá trị. Đây là cách quá chậm, đặc biệt là sự lặp lại. Có cách nào nhanh hơn để làm điều đó không?
Bạn có thể giải thích thêm một chút về phần đầu tiên của câu hỏi hay không, Bạn cần làm gì, mà không cần sử dụng bất kỳ ngôn ngữ lập trình nào. – Malinga
http://stackoverflow.com/questions/38065714/is-there-a-command-in-redis-for-hash-data-structure-similar-to-mget/38066688#38066688 kiểm tra câu trả lời của tôi ở đây – Malinga
Đối với mọi băm/hàng Tôi lấy mã hiện tại và lưu nó như new_code, trong khi lưu new_code hiện tại làm old_code (để ghi lại trạng thái trước đó và so sánh old_code và new_code trên mỗi lần kéo dữ liệu). –