gpt4 book ai didi

python - 您可以在不拉动整个 HashMap 进行更新的情况下更新 Redis HashMap 中的集合吗?

转载 作者:可可西里 更新时间:2023-11-01 10:52:41 25 4
gpt4 key购买 nike

假设我有一个如下所示的 HashMap :

{'dog': {'A': set([1,2,3]), 'B': set([1,2,3])},
'cat': {'A': set([1,2,3]), 'B': set([1,2,3])}
....
}

现在一段时间后,我想将值 [2,5,8] 添加到 dog->B 以便生成的 HashMap 变为

{'dog': {'A': set([1,2,3]), 'B': set([1,2,3,5,8])},
'cat': {'A': set([1,2,3]), 'B': set([1,2,3])}
....
}

这是否可以在不拉取整个 HashMap 进行更新的情况下实现?

不幸的是,这样做只会完全替换该值。

conn = redis.Redis('localhost')
dict = {'A': set([1,2,3]), 'B': set([4,5,6])}
conn.hmset('Cats', dict)
print(conn.hgetall('Cats'))
dict = {'A': set([4,3,5]), 'B': set([1,2,3])}
conn.hmset('Cats', dict)
print(conn.hgetall('Cats'))

output:
{b'A': b'{1, 2, 3}', b'B': b'{4, 5, 6}'}
{b'A': b'{3, 4, 5}', b'B': b'{1, 2, 3}'}

是否有一个 conn.sadd 可以用来进入 HashMap 和集合?现在我解决这个问题的方法是构建一个包含动物和动物 HashMap 中的键的键。

conn.sadd('{}-{}'.format('Cat', 'A'), entry['Pet'])

最佳答案

目前没有添加/删除哈希字段的命令,您必须读取值并将其更新为新值并重新设置

conn = redis.Redis('localhost')
dict = {'A': set([1,2,3]), 'B': set([4,5,6])}
conn.hmset('Cats', dict)
print(conn.hgetall('Cats'))

现在如果你想把[7,8,9]加到Cats>B,那么

b = set(eval(hmget('Cats', 'B')))
b = b.union(set([7,8,9]))
conn.hset('Cats', {'B': b})
print(conn.hgetall('Cats'))

输出:

{b'A': b'{1, 2, 3}', b'B': b'{4, 5, 6}'}
{b'A': b'{1, 2, 3}', b'B': b'{4, 5, 6, 7, 8, 9}'}

另一种选择是使用 redis 集,通过将哈希字段包含在 redis 键中,如下所示

conn.sadd('Cats#A', *[1, 2, 3])
conn.sadd('Cats#B', *[4, 5, 6])
print(conn.smembers('Cats#A'))
print(conn.smembers('Cats#B'))
conn.sadd('Cats#B', *[7, 8, 9])
print(conn.smembers('Cats#B'))

输出:

{b'[1, 2, 3]'}
{b'[4, 5, 6]'}
{b'[4, 5, 6, 7, 8, 9]'}

使用更易于管理的那个。

关于python - 您可以在不拉动整个 HashMap 进行更新的情况下更新 Redis HashMap 中的集合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52028376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com