3.5 集合类型
在集合中的每个元素都是不同的,且
没有顺序。一个集合类型(set)键可以存储至多2^32-1个(相信这个数字对大家来说已经很熟悉了)字符串。集合类型和列表类型有相似之处,但很容易将它们区分开来,如表3-4所示。
集合类型的常用操作是向集合中
加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是0(1)。最方便的是多个集合类型键之间还可以进行并集、交集和差集运算,稍后就会看到灵活运用这一特性带来的便利。
3.5.2 命令
1.增加/删除元素
SADD key member [member …]
SREM key member [member …]
SADD命令用来向集合中增加一个或多个元素,如果键
不存在则会自动创建。因为在一个集合中
不能有相同的元素,所以如果要加入的元素
已经存在于集合中就会忽略这个元素。本命令的返回值是成功加入的元素数量(忽略的元素不计算在内)。例如:
redis>SADD letters a
(integer) 1
redis> SADD letters a b c
(integer) 2
SREM命令用来从集合中删除一个或多个元素,并返回删除成功的个数,例如:
redis>SREM letters c d
(integer) 1
2.获得集合中的所有元素
SMEMBERS key
SMEMBERS命令会返回集合中的所有元素,例如:
redis>SMEMBERS letters
1) "b"
2) "a"
3.判断元素是否在集合中
SISMEMBER key member
判断一个元素是否在集合中是一个时间复杂度为
O(1)的操作,无论集合中有多少个元素,SISMEMBER命令始终可以极快地返回结果。当值存在时SISMEMBER命令返回1,当值不存在或键不存在时返回0,例如:
redis>SISMEMBER letters a
(integer) 1
redis>SISMEMBER letters d
(integer) 0
4.集合间运算
SDIFF key [key …]
SINTER key [key …]
SUNION key [key …]
接下来要介绍的3个命令都是用来进行多个集合间运算的。
(1)
SDIFF命令用来对多个集合执行
差集运算。集合A与集合B的差集表示为A-B,代表所有属于A且不属于B的元素构成的集合。
(2)
SINTER命令用来对多个集合执行
交集运算。集合A与集合B的交集表示为A∩B,代表所有属于A且属于B的元素构成的集合。
(3)
SUNION命令用来对多个集合执行
并集运算。集合A与集合B的并集表示为AUB,代表所有属于A或属于B的元素构成的集合。
5.获得集合中元素个数
SCARD key
SCARD命令用来获得集合中的元素个数,例如:
redis>SMEMBERS letters
1) "b"
2) "a"
redis>SCARD letters
(integer) 2
6.进行集合运算并将结果存储
SDIFFSTORE destination key [key …]
SINTERSTORE destination key [key …]
SUNIONSTORE destination key [key …]
SDIFFSTORE命令和SDIFF命令功能一样,唯一的区别就是前者不会直接返回运算结果,而是将结果
存储在destination键中。SDIFFSTORE命令常用于需要进行多步集合运算的场景中,如需要先计算差集再将结果和其他键计算交集。
SINTERSTORE和SUNIONSTORE命令与之类似,不再赘述。
7.随机获得集合中的元素
SRANDMEMBER key [count]
SRANDMEMBER命令用来随机从集合中获取一个元素,如:
redis>SRANDMEMBER letters
"a"
redis>SRANDMEMBER letters
"b"
redis>SRANDMEMBER letters
"a"
还可以传递count参数来一次随机获得多个元素,根据count的正负不同,具体表现也不同。
(1)当count为
正数时,SRANDMEMBER会随机从集合里获得count个
不重复的元素。如果count的值大于集合中的元素个数,则SRANDMEMBER会返回集合中的全部元素。
(2)当count为
负数时,SRANDMEMBER会随机从集合里获得|count|个的元素,这些元素有
可能相同。
8.从集合中弹出一个元素
SPOP key
3.4节中我们学习过LPOP命令,作用是从列表左边弹出一个元素(即返回元素的值并删除它)。SPOP命令的作用与之类似,但由于集合类型的元素是无序的,所以SPOP命令会从集合中随机选择一个元素弹出。例如:
redis>SPOP letters
"b"
redis>SMEMBERS letters
1) "a"
2) "c"
3) "d"
- 大小: 74.9 KB
分享到:
相关推荐
以上就是 `phpredis` 在管理 Redis 数据库时的基本知识点,它提供了丰富的接口,涵盖了 Redis 的各种数据类型和操作,使得在 PHP 应用中灵活使用 Redis 成为可能。通过 `phpredis-master` 压缩包,你可以获取到最新...
$redis->set('key', 'value'); ``` - **GET**:获取键对应的值 ```php $value = $redis->get('key'); ``` #### 3.2 集合操作 - **SADD**:向集合中添加元素 ```php $redis->sadd('mySet', 'element1', '...
StringRedisTemplate 是 SpringBoot 提供的一个 Redis 模板,用于操作 Redis 的字符串类型数据。下面是一个基本的使用示例: ```java @Autowired private StringRedisTemplate stringRedisTemplate; ...
4. **丰富的数据类型**:Redis支持多种数据类型,包括字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(sorted set)等。 5. **多功能实用工具**:Redis可以用于多种应用场景,如缓存、消息队列、计数器...
Redis支持五种基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Sorted Set(有序集合)。 ##### 3.5 Redis常用数据操作命令 - **String类型**:`SET key value`、`GET key` - **Hash...
通过本文档的学习,我们可以了解到在Windows环境下如何安装和配置Redis,以及如何使用Redis提供的不同数据类型和开发工具。Redis作为一款高性能的键值存储系统,在处理小而热的数据时表现尤其出色。此外,通过使用...
可以使用 Xftp 6 等工具将 Redis 压缩包上传到服务器。 2.2 解压 Redis 压缩包 使用以下命令解压 Redis 压缩包: tar zxf redis-3.0.0.tar.gz 2.3 进入到 Redis 目录下 进入到解压文件的目录下,例如 redis-...
return ResponseEntity.status(LoginResponseCode.LOGIN_FAIL.getCode()).body(new ApiResponse<>(LoginResponseCode.LOGIN_FAIL, null)); } } } ``` ##### 3.9 测试SSO单点登录 最后,通过发送HTTP请求来测试...
<packaging>war</packaging> ``` **1.2 打包并部署** 打包完成后,将生成的WAR文件复制到Windows服务器上的Tomcat的`webapps`目录下,并重命名为`prod-api`。 ##### 部署前端代码 **2.1 打包前端项目** 与Linux...
- `slaveof <masterip> <masterport>`:指定主节点IP和端口。 #### 6.2 主从出现的问题 - **数据不一致**:网络延迟可能导致主从同步滞后。 - **故障转移**:手动或使用工具如Sentinel进行故障转移。 ### 七、...
本教程通过详细介绍Redis的基础命令、数据类型操作以及一些进阶功能,旨在帮助初学者快速掌握Redis的使用方法。通过实践这些命令,用户不仅能够理解Redis如何存储和检索数据,还能了解到如何利用其特性来提高应用...
1. 数据结构:Redis支持多种数据类型,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。每种数据类型都有其独特的应用场景。 2. 持久化:Redis提供RDB(快照)和AOF(Append Only File...
Redis中的Sorted Set(有序集合)是一个非常重要的数据结构,它结合了Set(集合)的数据特性与Score(分数)的功能,可以实现对集合元素的排序。本文将深入探讨Sorted Set的基本概念、操作命令以及实际应用场景。 ...
- **定义与用途**:字符串是 Redis 最基础的数据类型之一,它本质上是一个键值对。字符串类型的值可以是任何格式的数据,如纯文本、图片编码数据或JSON文档等。这种简单灵活的数据类型非常适合用来存储普通的数据。 ...
<groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.8.0</version> </dependency> ``` 3. **配置 Classpath**:确保项目的 Classpath 中包含了 Jedis 驱动包,这样才能在编译时正确...
- **String(字符串)**: Redis中最基本的数据类型,可用于存储简单的键值对,支持`GET`和`SET`等命令。 - **List(链表)**: 双端链表,可以从两端插入或删除元素,适用于消息队列等场景,常用命令有`LPUSH`和`RPUSH`等...