Redis List类型命令 - Set类型命令 - SortedSet类型命令

目录

List类型

什么是双向链表呢?

List类型的特征:

List的常用命令

LPUSH和RPUSH的区别:

LPOP和RPOP的区别:

LPUSH和RPUSH的使用

LPOP和RPOP的使用

[LRANGE key star end:返回一段距离范围内所有的元素](#LRANGE key star end:返回一段距离范围内所有的元素)

BLPOP和BRPOP:它在没有该元素的时候会等待一段时间,而不是直接返回nil

问题1:如何利用List结构模拟一个栈?

问题2:如何利用List结构模拟一个队列?

问题3:如何利用List结构模拟一个阻塞队列?

Set类型

Set类型的常用命令(member代表着元素)

[SADD key member:向set中添加一个或者多个元素](#SADD key member:向set中添加一个或者多个元素)

[SREM key member:删除set中的指定元素](#SREM key member:删除set中的指定元素)

[SCARD key:返回set中元素的个数](#SCARD key:返回set中元素的个数)

[SISMEMBER key member:判断元素是否存在在key中](#SISMEMBER key member:判断元素是否存在在key中)

[SMEMBERL key:获取set中的所有元素](#SMEMBERL key:获取set中的所有元素)

[SINTER 和 SDIFF 和 SUNION 是实现Set类型的交集、差集、并集操作](#SINTER 和 SDIFF 和 SUNION 是实现Set类型的交集、差集、并集操作)

Set类型交集、差集、并集命令的练习

SortedSet类型

SortedSet类型的特征:

SortedSet类型的常用命令:

SortedSet类型命令练习

插入学生得分数据:

删除Tom同学:

获取Amy同学的分数:

获取Rose同学的排名:

查询80分以下有几个同学:

给Amy同学添加2分:

查出成绩前3名的同学:(倒序查询)

查出成绩在80分以下的所有同学:


List类型

什么是双向链表呢?

双向链表(Doubly Linked List)是一种常见的链表数据结构,与单向链表不同,它的每个节点除了包含指向下一个节点的指针外,还包含一个指向前一个节点的指针。这使得双向链表可以在两个方向上遍历链表,从头部到尾部,或者从尾部到头部。

跟java中的Linkedlist十分的类似:

List类型的特征:

List的常用命令

LPUSH和RPUSH的区别:

一个是从列表的左侧开始插入,一个是从列表的右侧开始插入

LPOP和RPOP的区别:

一个是从列表的左侧开始取出,一个是从列表的右侧开始取出

LPUSH和RPUSH的使用

192.168.1.209:6379> LPUSH users 1 2 3
(integer) 3
192.168.1.209:6379> RPUSH users 4 5 6
(integer) 6
192.168.1.209:6379> 

LPOP和RPOP的使用

192.168.1.209:6379> LPOP users 1
1) "3"
192.168.1.209:6379> RPOP users 1
1) "6"
192.168.1.209:6379> 

LRANGE key star end:返回一段距离范围内所有的元素

192.168.1.209:6379> LRANGE users 1 2
1) "1"
2) "4"
192.168.1.209:6379> LRANGE users 2 3
1) "4"
2) "5"
192.168.1.209:6379> LRANGE users 0 3
1) "2"
2) "1"
3) "4"
4) "5"
192.168.1.209:6379> 

BLPOP和BRPOP:它在没有该元素的时候会等待一段时间,而不是直接返回nil

192.168.1.209:6379> BLPOP users2 100     # 等待了18.5秒,当从其他机器上插入后,出现数据
1) "users2"
2) "clay"
(18.50s)

127.0.0.1:6379> LPUSH users2 clay     # 添加了users2这个key
(integer) 1
127.0.0.1:6379> 


192.168.1.209:6379> BLPOP users3 10     # 不存在该key(users3)
(nil)
(10.06s)
192.168.1.209:6379> 

问题1:如何利用List结构模拟一个栈?

栈的入口和出口都在同一边,而且必须先进入数据,才能输出数据

因此需要我们的入口和出口都在同一边,只用LPUSH和LPOP来输入输出数据,或者是只使用RPUSH和RPOP来输入输出数据

问题2:如何利用List结构模拟一个队列?

队列的入口和出口不在同一边

因此需要我们的入口和出口不在同一边,只用LPUSH和RPOP来输入输出数据,或者是只使用RPUSH和LPOP来输入输出数据

问题3:如何利用List结构模拟一个阻塞队列?

首先它是队列,因此入口和出口不在同一边

而且出队的时候必须采用BLPOP和BRPOP来输出,形成阻塞的效果

Set类型

Set类型的常用命令(member代表着元素)

SADD key member:向set中添加一个或者多个元素

192.168.1.209:6379> SADD s1 a b c
(integer) 3
192.168.1.209:6379> 

SREM key member:删除set中的指定元素

192.168.1.209:6379> SREM s1 b
(integer) 1
192.168.1.209:6379> 

SCARD key:返回set中元素的个数

192.168.1.209:6379> SCARD s1
(integer) 2
192.168.1.209:6379> 

SISMEMBER key member:判断元素是否存在在key中

192.168.1.209:6379> SISMEMBER s1 a
(integer) 1
192.168.1.209:6379> SISMEMBER s1 b
(integer) 0
192.168.1.209:6379> 

SMEMBERL key:获取set中的所有元素

192.168.1.209:6379> SMEMBERS s1
1) "a"
2) "c"
192.168.1.209:6379> 

SINTER 和 SDIFF 和 SUNION 是实现Set类型的交集、差集、并集操作

Set类型交集、差集、并集命令的练习

SortedSet类型

SortedSet类型的特征:

SortedSet类型的常用命令:

注:详细的SortedSet类型命令我们能通过命令行的help @sortedset来查看

SortedSet类型命令练习

插入学生得分数据:

192.168.1.209:6379> ZADD stus 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
(integer) 7
192.168.1.209:6379> 

删除Tom同学:

192.168.1.209:6379> ZREM stus Tom
(integer) 1
192.168.1.209:6379> 

获取Amy同学的分数:

192.168.1.209:6379> ZSCORE stus Amy
"92"
192.168.1.209:6379> 

获取Rose同学的排名:

192.168.1.209:6379> ZRANK stus Rose
(integer) 2
192.168.1.209:6379> 

查询80分以下有几个同学:

192.168.1.209:6379> ZCOUNT stus 0 80
(integer) 2
192.168.1.209:6379> 

给Amy同学添加2分:

192.168.1.209:6379> ZINCRBY stus 2 Amy
"94"
192.168.1.209:6379> 

查出成绩前3名的同学:(倒序查询)

192.168.1.209:6379> ZREVRANGE stus 0 2
1) "Amy"
2) "Lucy"
3) "Jack"
192.168.1.209:6379> 

查出成绩在80分以下的所有同学:

192.168.1.209:6379> ZRANGEBYSCORE stus 0 80
1) "Miles"
2) "Jerry"
192.168.1.209:6379> 
相关推荐
云和数据.ChenGuang26 分钟前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi1 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据2 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi3 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天3 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭4 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
工业甲酰苯胺4 小时前
分布式系统架构:服务容错
数据库·架构