redis02——一篇终结redis的五种数据类型操作命令(可学习、复习、面试、收藏备用)(下)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: redis02——一篇终结redis的五种数据类型操作命令(可学习、复习、面试、收藏备用)

4.操作集合类型数据(set)

Redis的Set是string类型的无序不重复集合。集合类型的数据操作总的思想是通过key确定集合,key是集合标识,元素没有下标,只有直接操作业务数据和数据的个数。

4.1 集合中添加元素

语法:sadd key member [member…]

功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。

返回值:加入到集合的新元素的个数(不包括被忽略的元素)。

demo如下

127.0.0.1:6379> sadd set01 a a b b c c
(integer) 3


4.2 获取集合中的所有元素

语法:smembers key

功能:获取集合 key 中的所有成员元素,不存在的key视为空集合。

返回值:返回指定集合的所有元素集合,不存在的key,返回空集合。

demo如下

127.0.0.1:6379> smembers set01
1) "c"
2) "b"
3) "a"

4.4 获取集合里面的元素个数

语法:scard key

功能:获取集合里面的元素个数

返回值:数字,key的元素个数。其他情况返回 0 。

demo如下

127.0.0.1:6379> scard set01
(integer) 3

4.5 移除集合中一个或多个元素

语法:srem key member [member…]

功能:移除集合中一个或多个元素,不存在的元素被忽略。

返回值:数字,成功移除的元素个数,不包括被忽略的元素。

demo如下

127.0.0.1:6379> srem set01 a
(integer) 1
127.0.0.1:6379> smembers set01
1) "c"
2) "b"

4.6 随机返回集合中n个元素

语法:srandmember key[count]

功能:只提供key,随机返回集合中一个元素,元素不删除,依然在集合中;

提供了count时,count 正数, 返回包含count个数元素的集合,集合元素各不重复。count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。

返回值:一个元素或者多个元素的集合

demo如下

127.0.0.1:6379> srandmember set01
"c"
127.0.0.1:6379> srandmember set01 2
1) "c"
2) "b"
127.0.0.1:6379> srandmember set01 3
1) "c"
2) "b"
127.0.0.1:6379> srandmember set01 -3
1) "b"
2) "c"
3) "b"

4.7 随机从集合中删除n个元素

语法:spop key[count]

功能:随机从集合中删除一个或count个元素。

返回值:被删除的元素,key不存在或空集合返回nil。

demo如下

127.0.0.1:6379> spop set01
"c"

4.8 元素移动

语法:smove src dest member

功能:将 member 元素从src集合移动到dest集合,member不存在,smove不执行操作,返回0,如果dest存在member,则仅从src中删除member。

返回值:成功返回 1 ,其他返回 0 。

demo如下

127.0.0.1:6379> smove set01 set02 b
(integer) 1
127.0.0.1:6379> smembers set02
1) "b"

4.9集合比较

语法:sdiff key key [key…]

功能:返回指定集合的差集,以第一个集合为准进行比较,即第一个集合中有但在其它任何集合中都没有的元素组成的集合。

返回值:返回第一个集合中有而后边集合中都没有的元素组成的集合,如果第一个集合中的元素在后边集合中都有则返回空集合。

demo如下

127.0.0.1:6379> sadd set01 a b c d e f
(integer) 6
127.0.0.1:6379> sadd set02 b e f
(integer) 3
127.0.0.1:6379> sdiff set01 set02
1) "d"
2) "c"
3) "a"

4.10 返回指定集合的交集

语法:sinter key key [key…]

功能:返回指定集合的交集,即指定的所有集合中都有的元素组成的集合。

返回值:交集元素组成的集合,如果没有则返回空集合。

demo如下

127.0.0.1:6379> sinter set01 set02
1) "f"
2) "e"
3) "b"

4.11 返回指定集合的并集

语法:sunion key key [key…]

功能:返回指定集合的并集,即指定的所有集合元素组成的大集合,如果元素有重复,则保留一个。

返回值:返回所有集合元素组成的大集合,如果所有key都不存在,返回空集合。

demo如下

127.0.0.1:6379> sunion set01 set02
1) "f"
2) "c"
3) "d"
4) "a"
5) "e"
6) "b"

5.操作哈希类型数据(hash)

Redis的hash 是一个string类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象。

哈希类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感兴趣的业务数据。

5.1 添加元素(覆盖)

语法:hset key field value [field value …]

功能:将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。

返回值:返回设置成功的键值对个数。

demo如下

127.0.0.1:6379> hset user id 1001
(integer) 1
127.0.0.1:6379> hset user name zhangsan age 20
(integer) 2

5.2 查找元素

语法:hget key field

功能:获取哈希表 key 中给定域 field 的值。

返回值:field域的值,如果key不存在或者field不存在返回nil。

demo如下

127.0.0.1:6379> hget user name
"zhangsan"

5.3 插入多个元素

语法:hmset key field value [field value…]

功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset.

返回值:设置成功返回ok,如果失败返回一个错误。

demo如下

127.0.0.1:6379> hmset user id 1001 name zhangsan age 11
OK
127.0.0.1:6379> hget user age
"11"

💡 Q:hmset于hset有什么区别

As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.

根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。

——redis 官网

5.4获取多个元素

语法:hmget key field [field…]

功能:获取哈希表 key 中一个或多个给定域的值

返回值:返回和field顺序对应的值,如果field不存在,返回nil。

demo如下

127.0.0.1:6379> hmget user id age name sex
1) "1001"
2) "11"
3) "zhangsan"
4) (nil)
127.0.0.1:6

5.5 获取所有元素

语法:hgetall key

功能:获取哈希表 key 中所有的域和值

返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash.

demo如下

127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "name"
4) "zhangsan"
5) "age"
6) "11"

5.6 删除元素

语法:hdel key field [field…]

功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。

返回值:成功删除的field的数量。

demo如下

127.0.0.1:6379> hdel user name
(integer) 1
127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "age"
4) "11"

5.7 返回长度

语法:hlen key

功能:获取哈希表 key 中域field的个数

返回值:数值,field的个数。key不存在返回0.

demo如下

127.0.0.1:6379> hlen user
(integer) 2

5.8 查找元素

语法:hexists key field

功能:查看哈希表 key 中,给定域 field 是否存在

返回值:如果field存在,返回1,其他返回0。

demo如下

127.0.0.1:6379> hexists user id
(integer) 1

5.9获取所有键

语法:hkeys key

功能:查看哈希表 key 中的所有field域列表

返回值:包含所有field的列表,key不存在返回空列表

demo如下

127.0.0.1:6379> hkeys user
1) "id"
2) "age"

5.10 获取所有值

语法:hvals key

功能:返回哈希表 中所有域的值列表

返回值:包含哈希表所有域值的列表,key不存在返回空列表。

demo如下

127.0.0.1:6379> hvals user
1) "1001"
2) "11"

5.11 值增加整数值

语法:hincrby key field int

功能:给哈希表key中的field域增加int

返回值:返回增加之后的field域的值

demo如下

127.0.0.1:6379> hget user age
"11"
127.0.0.1:6379> hincrby user age 2
(integer) 13
127.0.0.1:6379> hget user age
"13"

5.12 值增加小数值

语法:hincrbyfloat key field float

功能:给哈希表key中的field域增加float

返回值:返回增加之后的field域的值

demo如下

127.0.0.1:6379> hincrbyfloat user age 2.1
"15.1"

5.13 添加元素(不覆盖)

语法:hsetnx key field value

功能:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。

返回值:设值成功返回1,其他返回0.

demo如下

127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "age"
4) "15.1"
127.0.0.1:6379> hsetnx user name lili
(integer) 1
127.0.0.1:6379> hsetnx user age 11
(integer) 0
127.0.0.1:6379> hgetall user
1) "id"
2) "1001"
3) "age"
4) "15.1"
5) "name"
6) "lili"

6.操作有序集合类型(Zset)

Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。

不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

6.1 添加元素

语法:zadd key score member [score member…]

功能:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果member存在集合中,则覆盖原来的值;score可以是整数或浮点数.

返回值:数字,新添加的元素个数.

demo如下

127.0.0.1:6379> zadd zset01 20 z1 30 z2 50 z3 40 z4
(integer) 4

6.2 查找指定区间元素(按位序,递增排序)

语法:zrange key startIndex endIndex [WITHSCORES]

功能:查询有序集合,指定区间的内的元素。集合成员按score值从小到大来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。

返回值:指定区间的成员组成的集合。


demo如下

127.0.0.1:6379> zrange zset01 0 -1
1) "z1"
2) "z2"
3) "z4"
4) "z3"
127.0.0.1:6379> zrange zset01 0 -1 WITHSCORES
1) "z1"
2) "20"
3) "z2"
4) "30"
5) "z4"
6) "40"
7) "z3"
8) "50"

6.3 查找指定区间元素(按分数,递增)

语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]

功能:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括min和max)的成员,有序成员是按递增(从小到大)排序;

使用符号”(“ 表示包括min但不包括max;

withscores 显示score和 value;

limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。

返回值:指定区间的集合数据


demo如下

127.0.0.1:6379> zrangebyscore zset01 0 40  WITHSCORES
1) "z1"
2) "20"
3) "z2"
4) "30"
5) "z4"
6) "40"

6.4 删除成员

语法:zrem key member [member…]

功能:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略。

返回值:被成功删除的成员数量,不包括被忽略的成员。

demo如下

127.0.0.1:6379> zrem zset01 z4
(integer) 1

6.5 获取元素个数

语法:zcard key

作用:获取有序集 key 的元素成员的个数。

返回值:key存在,返回集合元素的个数; key不存在,返回0。

demo如下

127.0.0.1:6379> zcard zset01
(integer) 3

6.6 统计指定分数区间元素个数

语法:zcount key min max

功能:返回有序集 key 中, score 值在 min 和 max 之间(包括 score 值等于 min 或 max )的成员的数量。

返回值:指定有序集合中分数在指定区间内的元素数量。

demo如下

127.0.0.1:6379> zcount zset01 10 30
(integer) 2

6.7 获取元素排名(递增)

语法:zrank key member

功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从小到大顺序排列,从0开始排名,score最小的是0 。

返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil。

demo如下

127.0.0.1:6379> zrank zset01 z4
(nil)
127.0.0.1:6379> zrank zset01 z3
(integer) 2

6.8 获取元素的分数

语法:zscore key member

功能:获取有序集合key中元素member的分数。

返回值:返回指定有序集合元素的分数。

demo如下

127.0.0.1:6379> zscore zset01 z3
"50"

6.9 获取元素的排名(递减)

语法:zrevrank key member

功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从大到小顺序排列,从0开始排名,score最大的是0 。

返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil。

demo如下

127.0.0.1:6379> zrevrank zset01 z3
(integer) 0
127.0.0.1:6379> zrevrank zset01 z2
(integer) 1

6.10 查找指定区间元素(按位序,递减)

语法:zrevrange key startIndex endIndex [WITHSCORES]

功能:查询有序集合,指定区间的内的元素。集合成员按score值从大到小来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。

返回值:指定区间的成员组成的集合。


demo如下

127.0.0.1:6379> zrevrange zset01 0 -1 withscores
1) "z3"
2) "50"
3) "z2"
4) "30"
5) "z1"
6) "20"

6.11查找指定区间元素(按分数,递减)

语法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count]

功能:获取有序集 key 中,所有 score 值介于 max 和 min 之间(包括max和min)的成员,有序成员是按递减(从大到小)排序;

使用符号”(“ 表示不包括min和max;

withscores 显示score和 value;

limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。

返回值:指定区间的集合数据


demo如下

127.0.0.1:6379> zrevrangebyscore  zset01 100 0 withscores limit 0 2
1) "z3"
2) "50"
3) "z2"
4) "30"
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
NoSQL Redis Sentinel
【怒怼大厂面试官】听说你精通Redis?说说Redis哨兵
面试官:Redis哨兵知道吧?知道的,Sentinel哨兵本质是一个运行在特殊模式下的Redis服务器。面试官:嗯然后呢?它的主要作用是通过检测Redis主从服务器的下线状态,选举出新Redis主服务器,也就是故障转移,来保证Redis的高可用性。
78 4
【怒怼大厂面试官】听说你精通Redis?说说Redis哨兵
|
6天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
126 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
10天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
64 0
|
17天前
|
缓存 NoSQL Java
面试官:Redis如何实现延迟任务?
延迟任务是计划任务,用于在未来特定时间执行。常见应用场景包括定时通知、异步处理、缓存管理、计划任务、订单处理、重试机制、提醒和数据采集。Redis虽无内置延迟任务功能,但可通过过期键通知、ZSet或Redisson实现。然而,这种方法精度有限,稳定性较差,适合轻量级需求。Redisson的RDelayedQueue提供更简单的延迟队列实现。
237 9
|
18天前
|
缓存 NoSQL 定位技术
深入探索Redis:面试中必须掌握的关键知识点
深入探索Redis:面试中必须掌握的关键知识点
|
23天前
|
NoSQL Java 测试技术
面试官:如何搭建Redis集群?
**Redis Cluster** 是从 Redis 3.0 开始引入的集群解决方案,它分散数据以减少对单个主节点的依赖,提升读写性能。16384 个槽位分配给节点,客户端通过槽位信息直接路由请求。集群是无代理、去中心化的,多数命令直接由节点处理,保持高性能。通过 `create-cluster` 工具快速搭建集群,但适用于测试环境。在生产环境,需手动配置文件,启动节点,然后使用 `redis-cli --cluster create` 分配槽位和从节点。集群动态添加删除节点、数据重新分片及故障转移涉及复杂操作,包括主从切换和槽位迁移。
31 0
面试官:如何搭建Redis集群?
|
1月前
|
运维 负载均衡 NoSQL
【大厂面试官】知道Redis集群和Redis主从有什么区别吗
集群节点之间的故障检测和Redis主从中的哨兵检测很类似,都是通过PING消息来检测的。。。面试官抓抓脑袋,继续看你的简历…得想想考点你不懂的😰。
67 1
|
1月前
|
网络协议
跟着动画学习TCP三次握手和四次挥手,及全部面试题
跟着动画学习TCP三次握手和四次挥手,及全部面试题
35 0
|
1月前
|
NoSQL Redis
【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗
面试官:不用慌尽管说,错了也没关系。。。来说说Redis数据同步。是这样的,Redis有一个叫命令传播的概念,如果像面试官说的这种场景,再使用上面我提到的AOF缓冲区就有点浪费内存空间了。所以Redis会将主服务器的这条Del删除命令
62 2
【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗
|
1月前
|
NoSQL Redis 数据库
【怒怼大厂面试官】听说你精通Redis?说说Redis持久化
咳咳咳,看你简历写了精通Redis,那我就随便问问。主要有RDB持久化、AOF持久化。是这样,Redis服务器会维护一个AOF重写缓冲区,该缓冲区会在子进程创建新AOF文件期间,记录服务器执行的所有写命令。
55 1
【怒怼大厂面试官】听说你精通Redis?说说Redis持久化

热门文章

最新文章