首页 > 其他分享 >List(列表)

List(列表)

时间:2023-08-27 13:45:57浏览次数:22  
标签:11 127.0 0.1 List list 列表 6379 LRANGE

List(列表)

基本的数据类型,列表

在redis中可以使用list实现栈、队列、阻塞队列

所有的list命令都是用l开头的

127.0.0.1:6379> LPUSH list one 
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3


127.0.0.1:6379> LRANGE list
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> LRANGE list 0 *
(error) ERR value is not an integer or out of range
127.0.0.1:6379>

如果想要获取list中所有的值 可以设置取值范围是0 -1 也可以使用0 到 大于等于这个集合中元素个数的值

127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> LRANGE list 0 3
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> LRANGE list 0 4
1) "three"
2) "two"
3) "one"

可以发现 这里我们插入的是 one two three 当我们读取出来的时候却是反过来的 原因就在我们插入的方法 是采用的lplush 这个方法

 

对于lpush的方法 官网给出的解释 大致翻译下就是 在一个列表的头部插入一个元素 如果这个列表不存在 就创建一个列表

这个是在列表的左侧进行插入值也就是我们常说的头插法,当然我们也可以使用尾插法,就是在列表的右边插入值 ,也就是RPush

127.0.0.1:6379> RPUSH list zero
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "zero"
127.0.0.1:6379>

有插入数据 就会有移除数据 插入数据我们采用的是push 那么 移除数据 对应的就是 pop 并且插入数据分左右插入 那么移除数据也是分左右操作的

lpop
从列表的头弹出一个元素
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "zero"
127.0.0.1:6379> LPOP list
"three"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
3) "zero"
127.0.0.1:6379>
########################################
rpop
从列表的尾部弹出一个元素
127.0.0.1:6379> RPOP list
"zero"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>

现在我们可以插入值 也可以删除值 还缺一个访问固定下标的值

在Java中我们使用index 来访问下标 在这里我们使用Lindex来访问下标 ,需要注意的是我们访问所有的值的编号是从1开始的

而采用index 需要输入的下标是从0开始的

127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> LINDEX list 2
(nil)
127.0.0.1:6379> LINDEX list 1
"one"
127.0.0.1:6379>

还有查询list的长度 llen

127.0.0.1:6379> LLEN list
(integer) 2
127.0.0.1:6379>

移除指定的值 lrem

 

 

这个用法是删除其中的某个值 如果这个值有重复 可以进行指定的删除数量

127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LREM list 2 one
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> LRANGE list 0 -1
1) "0ne"
2) "0ne"
3) "0ne"
4) "0ne"
5) "three"
6) "two"
127.0.0.1:6379>

我们插入了4个one 现在我们要删除这里面三个

127.0.0.1:6379> LRANGE list 0 -1
1) "0ne"
2) "0ne"
3) "0ne"
4) "0ne"
5) "three"
6) "two"
127.0.0.1:6379> LREM list 3 0ne
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "0ne"
2) "three"
3) "two"
127.0.0.1:6379>

如果计数器的数量超出集合中的数量 那么有几个删除几个

127.0.0.1:6379> LREM list 3 0ne
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>

如果说我们这个集合里面数据很多 ,我们只想要其中的一部分值 ,这里我们就可以使用ltrim方法,这个方法会破环掉原本的集合还有不破坏集合的方法

127.0.0.1:6379> FLUSHDB 
OK
127.0.0.1:6379> RPUSH list hello
(integer) 1
127.0.0.1:6379> RPUSH list hello1
(integer) 2
127.0.0.1:6379> RPUSH list hello2
(integer) 3
127.0.0.1:6379> RPUSH list hello3
(integer) 4
127.0.0.1:6379> RPUSH list hello4
(integer) 5
127.0.0.1:6379> LTRIM list 1 2
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "hello1"
2) "hello2"
127.0.0.1:6379>

这个命令比较复杂 是两个命令的组合 rpoplpush这个可以拆成两个命令来进行理解 rpop 和lpush

就是从一个集合的最后一位移除一个元素,来放入到另一个集合的头

127.0.0.1:6379> LRANGE list 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
5) "hello4"
127.0.0.1:6379> RPOPLPUSH list list1
"hello4"
127.0.0.1:6379> keys *
1) "list1"
2) "list"

127.0.0.1:6379> LRANGE list1 0 -1
1) "hello4"
127.0.0.1:6379>

lset命令 在列表当中替换某一个下标的值 需要指定这个值的下标 如果需要放入的集合不存在,那么就会报错

如果替换的下标没有值,也会报错

还可以在一个值的前面或者后面插入一个值

linsert


127.0.0.1:6379> LRANGE list 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> LINSERT list before world other
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "hello"
2) "other"
3) "world"
127.0.0.1:6379>

小结

list其实就是一个链表 他的功能很强大 可以通过不同的规则来实现不同的数据结构 如 栈(lpush lpop) 队列(lpush rpop)

标签:11,127.0,0.1,List,list,列表,6379,LRANGE
From: https://www.cnblogs.com/AnJiaYu/p/17660194.html

相关文章

  • listbox组件
    Tkinter的Listbox是一个用于显示列表数据的组件,用户可以从中选择一个或多个项目。 以下是一些常用的Listbox方法及其说明: -pack():将Listbox放置在其父窗口中,并自动调整其大小以适应内容。-grid():将Listbox放置在其父窗口中的网格中,可以指定行和列的位置。-place():将Lis......
  • Python中如何判断列表是否为空
    Python中如何判断列表是否为空介绍列表是Python中最常用的数据结构之一,可以存储多个元素,比如数字,字符串,对象等列表的使用场景很多,比如排序,查找,统计,过滤等在使用列表的过程中,有时候需要判断列表是否为空,也就是列表中是否有元素在Python中,有两种常用的方法来判断列表是否为空,......
  • eleelement ui 下拉列表框和多选框默认回显无效
    elementUI多选框回显,没有别选中问题多选框,label是用户选择的value值,{{it.title}}是给用户显示的内容想要回显,只需将 checkList数组与label的值一致,注意类型也要一致,我就是因为checkList的id为字符串但是rolerList的id为数字类型,就一直都没有对应上<el-checkbox-groupv-mod......
  • fastadmin列表宽度变小,如何让列字段内容自动换行
    首先,正常来讲,fastadmin列宽度没有属性约束,会随着字段值的长度自动伸缩。但fastadmin可以控制列的宽度,看一下控制列宽度后的样式。{field:'filename',title:'附件名称',cellStyle:function(){return{css:{"max-width":"150px",}}}},如下图 但这样不美观,如何让字......
  • 代码随想录第三天|203.移除列表元素;707.设计链表;206.反转链表
    今天最大的收获不是学会了几道题,而是突然改变了自己之前的想法,总想刷一遍就能把题弄回,这样在遇到难题时会拖延很长的时间,备受挫折,做一两道题就再也不想做了,刷题也就终止了应该做好刷三遍题的准备,第一遍,大量看题,看解题思路,在看题的过程中积累知识和解题技巧,不要迷恋在某一道题上,看......
  • [USACO10DEC] Cow Calisthenics G
    注意到“最大值最小”,考虑二分最大直径。对于当前直径,树形dp+贪心的封锁。f[u]:以u为根的子树,叶节点到u的最大距离+1。在树形dp时维护mx,与f[u]组成直径。复杂度\(\mathcal{O}(n\logn)\)。ViewCode#include<bits/stdc++.h>usingnamespacestd;......
  • windows 桌面GUI自动化- 16.pywinauto 鼠标操作与滚动列表
    前言pywinauto操作鼠标,滚动查看鼠标点击操作单击鼠标左键,coords参数是点击的坐标位置frompywinautoimportmouse#单击鼠标左键mouse.click(coords=(100,100))鼠标右击mouse.right_click(coords=(100,200))鼠标双击mouse.double_click(coords=(100,200))鼠标......
  • 无涯教程-Python - Lists(列表)
    Python中最基本的数据结构是序列(List)。序列的每个元素都分配有一个数字-其位置或索引。第一个索引为零,第二个索引为1,依此类推。该列表是Python中最通用的数据类型,可以将其写成方括号之间的逗号分隔值列表。列表中的元素不必是同一类型。创建列表就像在方括号之间放置不同的......
  • 【解决】idea启动spring MVC报错:一个或多个listeners启动失败Listener ClassNotFoundE
    idea配置教程。tomcat调试报错Artifact:warexploded:Errorduringartifactdeployment。修改代码后,启动不生效,仍是旧代码。根本原因是:Modulesoutputpath和Artifactsoutputdirectory不匹配Modulesoutputpath一定要等于Artifactsoutputdirectory加\WEB-INF\classes......
  • cmake中list,set的对字符串操作
    cmake中所有的对象都是string,所以我们对这些的操作就是对字符串的操作,里面提供追加和删除的方法 CMakeLists.txtcmake_minimum_required(VERSION3.15)project(test)#方式二file(GLOBSRC${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)message("=========================")m......