Redis数据库与GO(二):list,set

一、list(列表)

list(列表)是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表,

list是一个双向链表 ,其元素是有序的,元素的值可以重复 。假设头在左边,尾在右边,则list支持从头插入,从尾插入,从头删除,从尾删除,但遍历只支持从头遍历,即从左遍历 。从头插入,从尾插入的算法和链表的头插法,尾插法一样。list的结构如下图:

在图中,c,b,a是从左边插入的,插入顺序为a,b,c,而d,e是从右边插入的,插入顺序为d,e,但无论从哪边插入,连接方向总是从左到右,遍历方向也是从左到右

理解了list的结构,理解其操作就容易多了,如下表。

命令 介绍
LPUSH key value [value ...] 向列表的左侧(头部)插入一个或多个值。如果 key 不存在,则会创建一个空列表再执行插入操作。返回列表的长度。
RPUSH key value [value ...] 向列表的右侧(尾部)插入一个或多个值。如果 key 不存在,则会创建一个空列表再执行插入操作。返回列表的长度。
LRANGE key start stop 获取列表指定范围内的元素,startstop 为索引(从 0 开始)。可以使用负索引来表示倒数位置(例如,-1 表示列表的最后一个元素)。
LPOP key 移除并返回列表的第一个元素(最左侧)。如果列表为空则返回 nil
RPOP key 移除并返回列表的最后一个元素(最右侧)。如果列表为空则返回 nil
LLEN key 返回列表的长度。如果 key 不存在,返回 0。如果 key 对应的不是列表类型,会返回错误。
DEL key 删除指定的列表或其他类型的 key 及其所有值。成功删除返回 1,如果 key 不存在则返回 0

实例

sql 复制代码
127.0.0.1:6379> lpush herolist aaa bbb ccc
(integer) 3
127.0.0.1:6379> lrange herolist 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
127.0.0.1:6379> rpush herolist ddd eee
(integer) 5
127.0.0.1:6379> lrange herolist 0 -1
1) "ccc"
2) "bbb"
3) "aaa"
4) "ddd"
5) "eee"
127.0.0.1:6379> lpop herolist
"ccc"
127.0.0.1:6379> lrange herolist 0 -1
1) "bbb"
2) "aaa"
3) "ddd"
4) "eee"
127.0.0.1:6379> rpop herolist
"eee"
127.0.0.1:6379> lrange herolist 0 -1
1) "bbb"
2) "aaa"
3) "ddd"
127.0.0.1:6379> del herolist
(integer) 1
127.0.0.1:6379> lrange herolist 0 -1
(empty list or set)
127.0.0.1:6379> llen herolist
(integer) 0
127.0.0.1:6379> lpush herolist aa bb cc dd
(integer) 4
127.0.0.1:6379> llen herolist
(integer) 4

练习

用list存放中国四大名著并完成CRUD

参考答案

sql 复制代码
127.0.0.1:6379> lpush books hlm sgyy xyj shz
(integer) 4
127.0.0.1:6379> lrange books 0 -1
1) "shz"
2) "xyj"
3) "sgyy"
4) "hlm"
127.0.0.1:6379> lset books 1 xyj2
OK
127.0.0.1:6379> lrange books 0 -1
1) "shz"
2) "xyj2"
3) "sgyy"
4) "hlm"
127.0.0.1:6379> lrem books 1 sgyy
(integer) 1
127.0.0.1:6379> lrange books 0 -1
1) "shz"
2) "xyj2"
3) "hlm"

其中lset key index value从0开始,lrem key count value的count是指定要删除几次匹配到的元素value,1表示删除首次匹配到的value;0表示删除所有value;-1表示从列表的右侧开始删除,删除首次匹配到的value。

二、set(集合)

Set是string类型的无序集合。底层是HashTable数据结构,Set也是存放很多字符串元素,字符串元素是无序的,而且元素的值不能重复

命令 介绍
SADD key member [member ...] 将一个或多个成员添加到集合中。如果成员已经存在则忽略。如果 key 不存在,会创建一个新的集合。返回成功添加的成员数量。
SMEMBERS key 返回集合中的所有成员。如果 key 不存在,则返回空集合。
SISMEMBER key member 判断指定的成员是否在集合中。如果存在则返回 1,否则返回 0
SREM key member [member ...] 移除集合中的一个或多个成员,返回成功移除的成员数量。如果成员不存在,则忽略。

实例

sql 复制代码
127.0.0.1:6379> sadd emails [email protected] [email protected]
(integer) 2
127.0.0.1:6379> smembers emails
1) "[email protected]"
2) "[email protected]"
127.0.0.1:6379> sadd emails [email protected] [email protected]
(integer) 2
127.0.0.1:6379> smembers emails
1) "[email protected]"
2) "[email protected]"
3) "[email protected]"
4) "[email protected]"
127.0.0.1:6379> sadd emails [email protected] [email protected]
(integer) 0
127.0.0.1:6379> sismember emails [email protected]
(integer) 1
127.0.0.1:6379> sismember emails [email protected]
(integer) 0
127.0.0.1:6379> srem emails [email protected]
(integer) 1
127.0.0.1:6379> smembers emails
1) "[email protected]"
2) "[email protected]"
3) "[email protected]"

练习

用set存放一个商品的名字,价格,生产日期

参考答案

sql 复制代码
127.0.0.1:6379> sadd product name price date
(integer) 3
127.0.0.1:6379> smembers product
1) "price"
2) "name"
3) "date"
127.0.0.1:6379> sismember product name
(integer) 1
127.0.0.1:6379> srem product name
(integer) 1
127.0.0.1:6379> smembers product
1) "price"
2) "date"
127.0.0.1:6379> sadd product name02
(integer) 1
127.0.0.1:6379> smembers product
1) "price"
2) "name02"
3) "date"

其中修改操作是通过sadd+srem完成的。

相关推荐
傻啦嘿哟10 分钟前
Python 数据分析与可视化实战:从数据清洗到图表呈现
大数据·数据库·人工智能
cookqq37 分钟前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉1 小时前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超1 小时前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)1 小时前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅1 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍3 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税3 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
我命由我123453 小时前
Spring Boot 项目集成 Redis 问题:RedisTemplate 多余空格问题
java·开发语言·spring boot·redis·后端·java-ee·intellij-idea
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端