Reids中List类型、Set类型、SortedSet类型的常用指令

List类型:

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。

特征也与LinkedList类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

List的常见命令有:

  • LPUSH key element ... :向列表左侧插入一个或多个元素

  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil

  • RPUSH key element ... :向列表右侧插入一个或多个元素

  • RPOP key:移除并返回列表右侧的第一个元素

  • LRANGE key star end:返回一段角标范围内的所有元素

  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil (在一个窗口使用该指令,然后在另一个窗口填充数据,第一个窗口就会返回了)

  • LPUSH和RPUSH

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

  • LPOP和RPOP

    127.0.0.1:6379> LPOP users
    "3"
    127.0.0.1:6379> RPOP users
    "6"

  • LRANGE

    127.0.0.1:6379> LRANGE users 1 2

    1. "1"
    2. "4"

思考:

  • 如何用list结构模拟一个栈?
    • 入口和出口在一起 LPUSH+LPOP
  • 如何利用List结构模拟一个对列
    • 入口和出口在不同边 LPUSH+RPOP
  • 如果利用List结构模拟一个阻塞队列
    • 出口和入口在不同边
    • 出队是采用 BLPOP或BRPOP

Set类型:

Redis的结构与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"

SortedSet类型:

Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ZREM key member:删除sorted set中的一个指定元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
  • ZRANK key member:获取sorted set 中的指定元素的排名
  • ZCARD key:获取sorted set中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF.ZINTER.ZUNION:求差集.交集.并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member
  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber
相关推荐
p***s9111 小时前
Spring数据库原理 之 DataSource
java·数据库·spring
potato_may11 小时前
链式二叉树 —— 用指针构建的树形世界
c语言·数据结构·算法·链表·二叉树
Mz122111 小时前
day07 和为 K 的子数组
数据结构
虹科网络安全11 小时前
艾体宝干货 | Redis Java 开发系列#1 从零开始的环境搭建与实践指南
java·数据库·redis
火山引擎开发者社区11 小时前
火山引擎向量数据库 Milvus 版正式商业化:AI 时代的向量检索新标杆
数据库·milvus·火山引擎
神秘的土鸡11 小时前
openEuler 25.09 企业级 MySQL主从复制部署与性能优化实战提升50%
linux·数据库·mysql·性能优化·openeuler
韩立学长12 小时前
基于Springboot课堂教学辅助系统08922bq1(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
goxingman13 小时前
Oracle视图基础
数据库·oracle
Albert Edison13 小时前
【项目设计】C++ 高并发内存池
数据结构·c++·单例模式·哈希算法·高并发