1.前言
今天是2022年10月5日已经是国庆的第5天了,不知道的各位读者朋友的假期时光是否愉快,在快活的同时各位读者朋友记得不要耽搁了学习,假期可是弯道超车的好机会,今天小编就带领大家一起复习一遍Redis中的五大数据类型之一的List
的一些基础命令。
Redis中的五大类型
在开篇之前防止一些小傻蛋连Redis中的五大类型都不记得了,这里小编还是简单的介绍一下Redia中的五大类型,分别是 String类型
也就是字符串类型和 Hash类型
和 List类型
, Setl类型
,zset类型
,不知道觉得生涩的小伙伴们是否回忆起了与它们的点滴。
2.常用命令
List类型我们也常称为列表类型,以单键多值的方式存储在数据库中。Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
大家在使用的过程中可以考虑好业务需求再做决定。
1. lpush {key} {value1} {value2} {value3}
使用 lpush <key><value1><value2><value3> 命令可以列表的左边插入一个或者多个值 key就是列表名
如果该列表不存在 则以指定的key生成一个列表 对应的值则成为列表中的数据
假如执行 lpush kk v1 v2 v3 存储在数据库中的结构则是 v3 v2 v1
2. rpush {key} {value1} {value2} {value3}
使用 rpush <key><value1><value2><value3> 命令可以列表的右边插入一个或者多个值 key就是列表名
如果该列表不存在 则以指定的key生成一个列表 对应的值则成为列表中的数据
假如执行 lpush cc c1 c2 c3 储存在数据库中的结构则是 c1 c2 c3
3. lrange {key} {start} {stop}
使用 lrange <key><start><stop> 从对应的列表中个根据起始索引和结束索引从左边取值
如果指定的列表不存在则什么也不返回
索引从 0 开始 -1 则表示 右边第一个 包前 包后
则执行 lrange 列表名 0 -1 则会取出列表中所有数据
4. lpop {key}
使用 lpop <key> 从对应列表的左边弹出一个值 弹出的值将不存在列表中
如果执行多次将列表中的值全部弹出 则列表页将不存在
5. rpop {key}
使用 rpop <key> 从对应列表的右边弹出一个值 弹出的值将不存在列表中
如果执行多次将列表中的值全部弹出 则列表页将不存在
6. llen {key}
使用 llen <key> 获取指定列表的长度
如果列表不存在则返回 0
7. rpoplpush {key1} {key2}
使用 rpoplpush <key1><key2> 从key1列表右边弹出一个值插到key2的左边
弹出的值将不存在原列表中
8. lindex {key} {index}
使用 lindex <key> <index> 按照指定的索引下标 从左到右获取指定列表中的元素
9. linsert {key} before {value} {newvalue}
使用 linsert <key> before <value><newvalue> 在指定表的某个值后面插入一个值
10. linsert {key} after {value} {newvalue}
使用 linsert <key> after <value><newvalue> 在指定表的某个值后面插入一个值
11. lrem {key} {n} {value}
使用 lrem <key><n><value> 从指定列表的左边删除n个指定的值
关于这个 {value} 比如列表中有多个重复的值 则就会删除n个这样的值 而不是按照顺序删
12. lset {key} {index} {value}
将指定列表的指定索引的值替换为新的值
3.List底层数据结构
List的数据结构为快速链表quickList。
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。
它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量比较多的时候才会改成quicklist。
因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next。
Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。
4.结尾
这次的博客就演示到这里了,建议不熟悉的读者朋友可以动手尝试尝试,如果有一遗漏和错误的地方,欢迎各位读者朋友在评论区中提出来,同时也提醒大家假期不要忘了学习哦,最后小编祝大家假期愉快!!!