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
相关推荐
White_Mountain16 分钟前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship17 分钟前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站20 分钟前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶22 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
axxy20001 小时前
leetcode之hot100---240搜索二维矩阵II(C++)
数据结构·算法
梦想平凡2 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO2 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Uu_05kkq2 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
Ewen Seong2 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起3 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化