次のようなハッシュマップがあるとしましょう。
{'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
{'dog': {'A': set([1,2,3]), 'B': set([1,2,3,5,8])},
'cat': {'A': set([1,2,3]), 'B': set([1,2,3])}
....
}
これは、ハッシュマップ全体をプルして更新しなくても可能ですか?
残念ながら、このようなことを行うと、値が完全に置き換えられるだけです。
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
ハッシュマップとセットに入るのに使用できるものはありますか?今のところ、これを回避する方法は、動物と動物のハッシュマップ内のキーの両方を含むキーを作成することです。
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]'}
管理しやすい方を使用してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加