簡體   English   中英

Redis-python 添加多個類型的值設置為 redis hash

[英]Redis-python add multiple values of type set to a redis hash

Redis n00b 在這里所以不要拍!

我需要將一組集合存儲在 redis 中,通過鍵索引 - 我可以:

import redis
r = redis.Redis()

r.sadd("A:B:123", *{456, 789})
r.sadd("A:B:124", *{666, 777})

但是如果我想要集合“A:B”,我必須手動收集密鑰,如下所示:

{k.rsplit(b':', 1)[-1]: r.smembers(k) for k in r.scan_iter("A:B:*") }
# {b'124': {b'666', b'777'}, b'123': {b'456', b'789'}}

這似乎非常慢(還要注意 rsplit)

我一直在嘗試使用 hmset 來做到這一點:

r.hmset("A:B", mapping={123: 'X', 124: 'Z'})

但我找不到用我的集合代替“X”和“Z”的方法。

(請注意,理想的設置元素應該是傳入的 int 類型 - 另請注意,那些 collections 是只讀的,所以我想優化查找而不是插入時間)

import redis
r = redis.Redis()

r.sadd("A:B:123", *{456, 789})
r.sadd("A:B:124", *{666, 777})

新代碼

import redis
r = redis.Redis()

r. hmset("A:B", {"123": ",".join(map(str, {456, 789}))})
r. hmset("A:B", {"124": ",".join(map(str, {666, 777}))})

打印所有元素

print(dict([(k,set(map(int, v.split(b",")))) for k,v in r.hgetall("A:B").items()]))

使用單個 map 存儲相關鍵,並在給定的鍵中將連接值存儲為字符串。

注意:將元素添加到 set 不是原子的,因為過程必須先讀取然后執行反序列化並將其存儲回來,除非使用 LUA 腳本。

使用 SUNION

r.sadd("A:B:123", *{456, 789})
r.sadd( "A:B:members", "A:B:123")
r.sadd("A:B:124", *{666, 777})
r.sadd( "A:B:members", "A:B:124")

打印方式

r.sunion(r.smembers("A:B:members"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM