Redis命令-Set命令

本文详细介绍了Redis中的Set数据结构,比较了它与JavaHashSet的相似性,列举了SADD、SMEMBERS、SREM等常用Set命令,并通过示例展示了如何使用这些命令进行交集、差集、并集计算以及成员判断和删除操作。

基础篇Redis

4.7 Redis命令-Set命令

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集.并集.差集等功能

Set类型的常见命令

  • SADD key member … :向set中添加一个或多个元素
  • SREM key member … : 移除set中的指定元素
  • SCARD key: 返回set中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于set中
  • SMEMBERS:获取set中的所有元素
  • SINTER key1 key2 … :求key1与key2的交集
  • SDIFF key1 key2 … :求key1与key2的差集
  • SUNION key1 key2 …:求key1和key2的并集

例如两个集合:s1和s2:

求交集:SINTER s1 s2

求s1与s2的不同:SDIFF s1 s2

具体命令

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> smembers s1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem s1 a
(integer) 1
    
127.0.0.1:6379> SISMEMBER s1 a
(integer) 0
    
127.0.0.1:6379> SISMEMBER s1 b
(integer) 1
    
127.0.0.1:6379> SCARD s1
(integer) 2

案例

  • 将下列数据用Redis的Set集合来存储:
  • 张三的好友有:李四.王五.赵六
  • 李四的好友有:王五.麻子.二狗
  • 利用Set的命令实现下列功能:
  • 计算张三的好友有几人
  • 计算张三和李四有哪些共同好友
  • 查询哪些人是张三的好友却不是李四的好友
  • 查询张三和李四的好友总共有哪些人
  • 判断李四是否是张三的好友
  • 判断张三是否是李四的好友
  • 将李四从张三的好友列表中移除
127.0.0.1:6379> SADD zs lisi wangwu zhaoliu
(integer) 3
    
127.0.0.1:6379> SADD ls wangwu mazi ergou
(integer) 3
    
127.0.0.1:6379> SCARD zs
(integer) 3
    
127.0.0.1:6379> SINTER zs ls
1) "wangwu"
    
127.0.0.1:6379> SDIFF zs ls
1) "zhaoliu"
2) "lisi"
    
127.0.0.1:6379> SUNION zs ls
1) "wangwu"
2) "zhaoliu"
3) "lisi"
4) "mazi"
5) "ergou"
    
127.0.0.1:6379> SISMEMBER zs lisi
(integer) 1
    
127.0.0.1:6379> SISMEMBER ls zhangsan
(integer) 0
    
127.0.0.1:6379> SREM zs lisi
(integer) 1
    
127.0.0.1:6379> SMEMBERS zs
1) "zhaoliu"
2) "wangwu"
### 如何使用 Redis 批量执行 SET 命令 #### 使用 Pipeline 实现批量设置键值对 为了提高性能并减少网络往返次数,可以采用 `PIPELINE` 来一次性发送多条命令Redis 服务端。这种方式不仅能够显著提升效率,而且还能保持较好的响应速度。 ```python import redis r = redis.Redis(host='localhost', port=6379, db=0) with r.pipeline() as pipe: keys_values = [ ('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3') ] for key, value in keys_values: pipe.set(key, value) response = pipe.execute() ``` 此 Python 脚本展示了如何通过 `pipeline()` 方法构建一个管道对象,在其中连续调用多次 `SET` 操作,并最终通过一次性的 `execute()` 提交所有指令到服务器[^1]。 #### 利用 Shell Script 和 Cat 命令进行批量设置 对于不需要编程的情况,可以直接利用 Linux 的 shell script 结合 cat 命令Redis 发送一系列预定义好的命令字符串: 创建包含要执行的命令列表文件(例如名为 commands.txt),其内容如下所示: ``` set user:1000:name Alice set user:1000:age 25 set product:sku123:title "Wireless Mouse" ... ``` 接着可以通过以下方式快速应用这些配置: ```bash cat commands.txt | redis-cli --pipe ``` 这行命令将会读取文本文件并将每行当作独立的 Redis 请求发出,从而完成批量数据写入工作[^3]。 #### 处理 Redis 集群环境下的批量设置 当面对的是 Redis Cluster 架构时,则需要注意命令分发机制可能会因为哈希槽位分布而有所不同。如果尝试在一个节点上直接执行涉及不同分区的数据修改操作,那么很可能会遇到错误提示。因此建议要么确保所有的 KEY 属于同一个 slot,要么分别针对各个 master node 上实施相应的更新动作[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值