为你自己学Redis
  • README
  • 安装
    • macos下安装redis
  • 第1章 构建Redis开发环境
    • 1.1 Redis概述
    • 1.2 了解必要的Docker技能
    • 1.3 安装和配置基于Docker的Redis环境
  • 第2章 实践Redis的基本数据类型
    • 2.1 Redis缓存初体验
    • 2.2 针对字符串的命令
    • 2.3 针对哈希类型变量的命令
    • 2.4 针对列表类型变量的命令
    • 2.5 针对集合的命令
    • 2.6 针对有序集合的命令
  • 第3章 实践Redis的常用命令
    • 3.1 键操作命令
    • 3.2 HyperLogLog相关命令
    • 3.3 lua脚本相关命令
    • 3.4 排序相关命令
  • 第4章 实践Redis服务器和客户端的操作
    • 4.1 Redis服务器管理客户端的命令
    • 4.2 查看Redis服务器的详细信息
    • 4.3 查看并修改服务器的常用配置
    • 4.4 多个客户端连接远端服务器
  • 第5章 Redis数据库操作实战
    • 5.1 切换数据库操作
    • 5.2 Redis事务操作
    • 5.3 地理位置相关操作
    • 5.4 位图数据类型的应用
    • 5.5 慢查询实战分析
  • 第6章 Redis数据持久化操作
    • 6.1 Redis持久化机制概述
    • 6.2 AOF持久化机制实战
    • 6.3 RDB持久化机制实战
    • 6.4 如何选用持久化方式
  • 第7章 搭建Redis集群
    • 7.1 搭建基于主从复制模式的集群
    • 7.2 搭建哨兵模式的集群
    • 7.3 搭建cluster集群
  • 第8章 GO整合MySQL与Redis
    • 8.1 GO通过redigo读写Redis
    • 8.2 Go与各种Redis数据类型
    • 8.3 Redis与MySQL的整合
    • 8.4 Redis缓存实战分析
  • 第9章 Redis应用场景与案例实现
    • 9.1 Redis消息队列实战
    • 9.2 Go实战Redis分布式锁
Powered by GitBook
On this page
  • 2.5.1 读写集合的命令
  • 2.5.2 列表和集合类数据的使用场景
  • 2.5.3 用SISMEMBER命令判断元素是否存在
  • 2.5.4 获取集合的交集、并集和差集
  • 2.5.5 用SREM命令删除集合数据
  1. 第2章 实践Redis的基本数据类型

2.5 针对集合的命令

set:和list相同,也是在同一个key下存储多个元素;不同之处在于,set中存储的元素不能重复,且set是无序的

2.5.1 读写集合的命令

  • SADD

    • 语法:SADD key member [member ...]

    • 功能:向key指定的集合中添加1个或多个元素

  • SMEMBERS

    • 语法:SMEMBERS key

    • 功能:读取key对应集合里的所有数据

例:

向集合中添加元素:

127.0.0.1:6379> SADD teamName 'HR' 'Account' 'DataTeam' 'HR'
(integer) 3

注意此时添加的元素是有重复的.因此最终添加结果显示有3个元素被添加到了集合中

查看集合中的元素:

127.0.0.1:6379> SMEMBERS teamName
1) "Account"
2) "HR"
3) "DataTeam"

可以看到,读取时的顺序和写入时的顺序是不同的.

2.5.2 列表和集合类数据的使用场景

  • 列表在写入时是有序的;集合是无序的

  • 列表用于按一定规范存储同一类数据

例如:用Name,Salary,TeamName的规范存储同一类员工的数据:

127.0.0.1:6379> RPUSH 001 "Mike" 12000 "dataTeam"
(integer) 3
127.0.0.1:6379> RPUSH 002 "David" 13000 "businessTeam"
(integer) 3
127.0.0.1:6379> RPUSH 003 "Peter" 14000 "userTeam"
(integer) 3

在本例中,这3个列表中的第1个元素均为员工姓名;第2个元素均为员工工资;第3个元素均为员工部门

  • 集合用于存储并列数据

例如:存储公司名称

127.0.0.1:6379> SADD companyName "Apple" "Google" "Facebook"
(integer) 3
127.0.0.1:6379> SMEMBERS companyName
1) "Apple"
2) "Facebook"
3) "Google"

在本例中,Apple、Facebook、Google均为公司名称,是并列关系

2.5.3 用SISMEMBER命令判断元素是否存在

集合是无序的,因此"读取指定索引的元素"的命令是没有意义的,因为存入集合的次序和输出次序不一定相同.

  • SISMEMBER

    • 语法:SISMEMBER key member

    • 功能:判断某个元素是否在集合中.元素存在于集合中则返回1,否则返回0

例:

向set中写入:

127.0.0.1:6379> DEL teamName
(integer) 1
127.0.0.1:6379> SADD teamName 'HR' 'Account' 'DataTeam'
(integer) 3

判断给定的元素值在set中是否存在:

127.0.0.1:6379> SISMEMBER teamName HR
(integer) 1
127.0.0.1:6379> SISMEMBER teamName Dev
(integer) 0

2.5.4 获取集合的交集、并集和差集

  • SINTER

    • 语法:SINTER key [key ...]

    • 功能:获取多个key对应的set的交集

  • SUNION

    • 语法:SUNION key [key ...]

    • 功能:获取多个key对应的set的并集

  • SDIFF

    • 语法:SDIFF key [key ...]

    • 功能:获取多个key对应的set的差集

例:

创建2个set:

127.0.0.1:6379> SADD Mike Math English Computer
(integer) 3
127.0.0.1:6379> SADD Tom Computer Math Piano
(integer) 3

取2个集合的交集:

127.0.0.1:6379> SINTER Mike Tom
1) "Computer"
2) "Math"

取2个集合的并集:

127.0.0.1:6379> SUNION Mike Tom
1) "Math"
2) "Computer"
3) "English"
4) "Piano"

取2个集合的差集:

127.0.0.1:6379> SDIFF Mike Tom
1) "English"
127.0.0.1:6379> SDIFF Tom Mike
1) "Piano"

注意:差集的含义是存在于集合A但不存在于集合B中的元素.因此SDIFF Mike Tom和SDIFF Tom Mike的返回值是不同的

2.5.5 用SREM命令删除集合数据

  • SREM

    • 语法:SREM key member [member ...]

    • 功能:删除key对应的集合中的数据.该命令的返回值为删除的元素个数

例:

创建一个set:

127.0.0.1:6379> SADD number 1 2 4 8 16
(integer) 5

从set中删除值为1、4、5的元素

127.0.0.1:6379> SREM number 1 4 5
(integer) 2

可以看到,返回值为2.因为set中没有值为5的元素

127.0.0.1:6379> SMEMBERS number
1) "2"
2) "8"
3) "16"

从一个不存在的set中删除元素:

127.0.0.1:6379> SREM notExist 1
(integer) 0

可以看到,若从一个不存在的set中删除元素,返回值为0

对非set类型的对象调用SREM命令:

127.0.0.1:6379> LPUSH myList 1
(integer) 1
127.0.0.1:6379> SREM myList 1
(error) WRONGTYPE Operation against a key holding the wrong kind of value

可以看到,对非set类型的对象调用SREM命令则报错

Previous2.4 针对列表类型变量的命令Next2.6 针对有序集合的命令

Last updated 1 year ago