User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   SQL   ›   NOSQL   ›   Redis   ›   正文
Redis

Redis笔记—List列表与Set集合

2020-04-01 02:26:40
973  0 0
参考目录 隐藏
1) 列表
2) LPUSH / lpush
3) LRANGE / lrange
4) RPUSH / rpush
5) RPOP / rpop
6) LPOP / lpop
7) LINDEX / lindex
8) LTRIM / ltrim
9) BLPOP / blpop
10) 集合
11) SADD / sadd
12) SREM / srem
13) SISMEMBER / sismember
14) SCARD / scard
15) SMEMBERS / smembers
16) SRANDMEMBER / srandmember
17) SPOP / spop
18) SMOVE / smove
19) SDIFF / sdiff
20) SDIFFSTORE / sdiffstore
21) SINTER / sinter
22) SINTERSTORE / sinterstore
23) SUNION / sumion
24) SUNIONSTORE / sunionstore

阅读完需:约 6 分钟

列表

列表是 Redis 中另外一种数据类型。下面我们来看看列表中一些基本的操作命令。

LPUSH / lpush

将一个或多个值 value 插入到列表 key 的表头,如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头,如下:

1
2
127.0.0.1:6379> LPUSH k1 v1 v2 v3
(integer) 3

LRANGE / lrange

返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定,下标 (index) 参数 start 和 stop 都以 0 为底,即 0 表示列表的第一个元素,1 表示列表的第二个元素,以此类推。我们也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。如下:

1
2
3
4
127.0.0.1:6379> LRANGE k1 0 -1
1) “v3”
2) “v2”
3) “v1”

RPUSH / rpush

RPUSH 与 LPUSH 的功能基本一致,不同的是 RPUSH 的中的 value 值是按照从右到左的顺序依次插入,如下:

1
2
3
4
5
6
7
8
127.0.0.1:6379> RPUSH k2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE k2 0 -1
1) “1”
2) “2”
3) “3”
4) “4”
5) “5”

RPOP / rpop

RPOP 命令可以移除并返回列表 key 的尾元素。如下:

1
2
3
4
5
6
7
127.0.0.1:6379> RPOP k2
“5”
127.0.0.1:6379> LRANGE k2 0 -1
1) “1”
2) “2”
3) “3”
4) “4”

LPOP / lpop

LPOP 和 RPOP 类似,不同的是 LPOP 移除并返回列表 key 的头元素,如下:

1
2
3
4
5
6
127.0.0.1:6379> LPOP k2
“1”
127.0.0.1:6379> LRANGE k2 0 -1
1) “2”
2) “3”
3) “4”

LINDEX / lindex

LINDEX 命令可以返回列表 key 中,下标为 index 的元素,正数下标 0 表示第一个元素,也可以使用负数下标,-1 表示倒数第一个元素,如下:

1
2
3
4
127.0.0.1:6379> LINDEX k2 0
“2”
127.0.0.1:6379> LINDEX k2 -1
“4”

LTRIM / ltrim

LTRIM 命令可以对一个列表进行修剪,即让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。下标与之前介绍的写法都一致,这里不赘述。如下:

1
2
3
4
5
6
7
8
9
127.0.0.1:6379> LRANGE k1 0 -1
1) “v3”
2) “v2”
3) “v1”
127.0.0.1:6379> LTRIM k1 0 1
OK
127.0.0.1:6379> LRANGE k1 0 -1
1) “v3”
2) “v2”

BLPOP / blpop

BLPOP 是阻塞式列表的弹出原语。它是命令 LPOP 的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP 命令阻塞。当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。同时,在使用该命令时也需要指定阻塞的时长,时长单位为秒,在该时长内如果没有元素可供弹出,则阻塞结束。返回的结果是 key 和 value 的组合,如下:

1
2
3
4
5
6
127.0.0.1:6379> BLPOP k1 10
1) “k1”
2) “v2”
127.0.0.1:6379> BLPOP k1 10
(nil)
(10.03s)

最后,BRPOP、BPOPLPUSH、BRPOPLPUSH 都是相应命令的阻塞版本,这里就不赘述了。

集合

接下来我们来看看集合中一些常见的操作命令:

SADD / sadd

SADD 命令可以添加一个或多个指定的 member 元素到集合的 key 中,指定的一个或者多个元素 member 如果已经在集合 key 中存在则忽略,如果集合 key 不存在,则新建集合 key ,并添加 member 元素到集合 key 中。如下:

1
2
127.0.0.1:6379> SADD k1 v1 v2 v3 v4
(integer) 4

SREM / srem

SREM 命令可以在 key 集合中移除指定的元素,如果指定的元素不是 key 集合中的元素则忽略。如果 key 集合不存在则被视为一个空的集合,该命令返回 0 。如下:

1
2
3
4
127.0.0.1:6379> SREM k1 v2
(integer) 1
127.0.0.1:6379> SREM k1 v10
(integer) 0

SISMEMBER / sismember

SISMEMBER 命令可以返回成员 member 是否是存储的集合 key 的成员。如下:

1
2
127.0.0.1:6379> SISMEMBER k1 v3
(integer) 1

SCARD / scard

SCARD 命令可以返回集合存储的 key 的基数(集合元素的数量),如下:

1
2
127.0.0.1:6379> SCARD k1
(integer) 3

SMEMBERS / smembers

SMEMBERS 命令可以返回 key 集合所有的元素,如下:

1
2
3
4
127.0.0.1:6379> SMEMBERS k1
1) “v4”
2) “v1”
3) “v3”

SRANDMEMBER / srandmember

SRANDMEMBER 仅需我们提供 key 参数,它就会随机返回 key 集合中的一个元素,从 Redis2.6 开始,该命令也可以接受一个可选的 count 参数,如果 count 是整数且小于元素的个数,则返回 count 个随机元素,如果 count 是整数且大于集合中元素的个数时,则返回集合中的所有元素,当 count 是负数,则会返回一个包含 count 的绝对值的个数元素的数组,如果 count 的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况。如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> SRANDMEMBER k1
“v4”
127.0.0.1:6379> SRANDMEMBER k1 2
1) “v4”
2) “v1”
127.0.0.1:6379> SRANDMEMBER k1 5
1) “v4”
2) “v1”
3) “v3”
127.0.0.1:6379> SRANDMEMBER k1 -1
1) “v4”
127.0.0.1:6379> SRANDMEMBER k1 -5
1) “v3”
2) “v1”
3) “v1”
4) “v3”
5) “v3”

SPOP / spop

SPOP 命令的用法和 SRANDMEMBER 类似,不同的是,SPOP 每次选择一个随机的元素之后,该元素会出栈,而 SRANDMEMBER 则不会出栈,只是将该元素展示出来。

SMOVE / smove

SMOVE 命令可以将 member 从 source 集合移动到 destination 集合中,如下:

1
2
3
4
5
6
7
127.0.0.1:6379> SMOVE k1 k2 v1
(integer) 1
127.0.0.1:6379> SMEMBERS k1
1) “v4”
2) “v3”
127.0.0.1:6379> SMEMBERS k2
1) “v1”

SDIFF / sdiff

SDIFF 可以用来返回一个集合与给定集合的差集的元素,如下:

1
2
3
127.0.0.1:6379> SDIFF k1 k2
1) “v4”
2) “v3”

k1 中的元素是 v3、v4,k2 中的元素是 v1,差集就是 v3、v4.

SDIFFSTORE / sdiffstore

SDIFFSTORE 命令与 SDIFF 命令基本一致,不同的是 SDIFFSTORE 命令会将结果保存在一个集合中,如下:

1
2
3
4
5
127.0.0.1:6379> SDIFFSTORE key k1 k2
(integer) 2
127.0.0.1:6379> SMEMBERS key
1) “v4”
2) “v3”

SINTER / sinter

SINTER 命令可以用来计算指定 key 之间元素的交集,如下:

1
2
3
4
5
6
7
8
127.0.0.1:6379> SMEMBERS k1
1) “v4”
2) “v3”
127.0.0.1:6379> SMEMBERS k2
1) “v1”
2) “v3”
127.0.0.1:6379> SINTER k1 k2
1) “v3”

SINTERSTORE / sinterstore

SINTERSTORE 命令和 SINTER 命令类似,不同的是它会将结果保存到一个新的集合中,如下:

1
2
3
4
127.0.0.1:6379> SINTERSTORE k3 k1 k2
(integer) 1
127.0.0.1:6379> SMEMBERS k3
1) “v3”

SUNION / sumion

SUNION 可以用来计算两个集合的并集,如下:

1
2
3
4
127.0.0.1:6379> SUNION k1 k2
1) “v4”
2) “v1”
3) “v3”

SUNIONSTORE / sunionstore

SUNIONSTORE 和 SUNION 命令类似,不同的是它会将结果保存到一个新的集合中,如下:

1
2
3
4
5
6
127.0.0.1:6379> SUNIONSTORE k4 k1 k2
(integer) 3
127.0.0.1:6379> SMEMBERS k4
1) “v4”
2) “v1”
3) “v3”

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

0 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 289点赞 574032浏览

随机文章
ActiveMQ—整合Spring
5年前
Java—Cglib的invoke和invokeSuper区别
4年前
MyBatis笔记15—查询缓存
5年前
SpringMVC笔记—数据显示到前端(补充)
5年前
纯 Java 搭建 SSM 环境(2)
5年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1890 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 574032 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付