Redis-python 将多个set类型的值添加到一个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' 的方法。
(请注意,理想情况下 set 元素应该是传入的 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()]))
使用单个映射存储相关的键,并在给定的键中将连接的值存储为字符串。
注意:将元素添加到集合不是原子操作,因为过程必须先读取然后执行反序列化并将其存储回去,除非使用 LUA 脚本。
使用联通
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"))
这里是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' 的方法。
(请注意,理想情况下 set 元素应该是传入的 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()]))
使用单个映射存储相关的键,并在给定的键中将连接的值存储为字符串。
注意:将元素添加到集合不是原子操作,因为过程必须先读取然后执行反序列化并将其存储回去,除非使用 LUA 脚本。
使用联通
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"))