redis -python添加多个set类型的值到redis散列



Redis n00b在这里所以不要开枪!

我需要存储一个集合的集合在redis索引键-我可以:

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

但是如果我想要收藏"A: "我必须手动收集密钥,如:

{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类型的,同时注意这些集合是只读的,所以我想优化查找而不是插入时间)

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()]))

使用单个映射存储相关的键,并在给定的键中将连接的值存储为字符串。

注意:添加元素到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"))

最新更新