替换 Redis 集合中的值的最佳方法

4

我想将一个键值对类型的数据存储到redis中,其中值是一个集合类型,也就是说没有重复值。我在redis中进行如下操作:

127.0.0.1:6379> sadd a 1 2 3
(integer) 3
127.0.0.1:6379> smembers a
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> sadd a 4 5 6
(integer) 3
127.0.0.1:6379> smembers a
1) "3"
2) "2"
3) "4"
4) "5,"
5) "1"
6) "6"

我希望用户将集合(4,5,6)替换集合(1,2,3)。

1个回答

8

您的问题含义不明确。

如果您的意图是替换 所有 成员:

# Setup "a" with 3 members
127.0.0.1:6379> del a
(integer) 1
127.0.0.1:6379> sadd a 1 2 3
(integer) 3

# Actions - delete entire set and add 3 new members in one go
127.0.0.1:6379> multi
OK
127.0.0.1:6379> del a
QUEUED
127.0.0.1:6379> sadd a 4 5 6
QUEUED
127.0.0.1:6379> exec
1) (integer) 1
2) (integer) 3
127.0.0.1:6379> smembers a
1) "4"
2) "5"
3) "6"

如果您的意图是仅替换特定成员:
# Setup "a" with 4 members
127.0.0.1:6379> del a
(integer) 1
127.0.0.1:6379> sadd a 0 1 2 3
(integer) 4

# Actions - delete 3 specific members and add 3 more, leaving others unaffected
127.0.0.1:6379> multi
OK
127.0.0.1:6379> srem a 1 2 3
QUEUED
127.0.0.1:6379> sadd a 4 5 6
QUEUED
127.0.0.1:6379> exec
1) (integer) 3
2) (integer) 3
127.0.0.1:6379> smembers a
1) "0"
2) "4"
3) "5"
4) "6"
127.0.0.1:6379> 

有没有一种方法可以在同一事务中原子地完成这个操作? - Jose Castellanos
@JoseCastellanos 当然可以...https://redis.io/topics/transactions - Mark Setchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接