redis数据类型之List入门练习
入门
redis
的list类型存储时采用linkedlist
redis
存储list类型可以实现队列和堆栈,队列是先进先出,而堆栈是先进后出。
如果使用的是lpush
,底层用的就是栈,先进后出
如果使用的是rpush
,底层用的就是队列,先进先出
命令
lpush
rpush
lrange
llen
lrem
lpop
rpop
ltrim
实操
//创建列表,如果使用的是lpush,底层用的就是栈,先进后出
> lpush list1 1 2 3 4 5 6
(integer) 6
//获取列表元素,要带有参数,否则报错
> lrange list1
(error) ERR wrong number of arguments for 'lrange' command
//获取列表所以元素 -1 代表最后一个
> lrange list1 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
//查询列表前四个元素
> lrange list1 0 3
1) "6"
2) "5"
3) "4"
4) "3"
//新建列表
> rpush list2 10 11 12 13
(integer) 4
//查看列表所有元素
> lrange list2 0 -1
1) "10"
2) "11"
3) "12"
4) "13"
//查看列表前3个元素
> lrange list2 0 2
1) "10"
2) "11"
3) "12"
scala API操作List
def ListDemo(): Unit ={for(i<-0 to 20){//生成一个随机的uuidval string: String = UUID.randomUUID().toString//将字符串添加到列表list1jedis.lpush("list1",string)val list: util.List[String] = jedis.lrange("list1", 0, -1)import scala.collection.JavaConversions._for(x<-list){println(x)}}}
f9fc53ca-3d5c-4df5-84f6-8549d661145b
84a1f2c6-1a5d-401c-8a19-6c41747c484d
403d1ea1-7691-4bf9-93f7-b73dd308e9e2
.....
编程中用的的方法解析
randomUUID
public static UUID randomUUID()
静态工厂检索类型4(伪随机生成)的UUID。 使用加密强度高的伪随机数生成器生成UUID。
lpush
public Long lpush(String key,String... strings)
将字符串值添加到存储在键处的列表的开头(LPUSH)或结尾(RPUSH)。 如果键不存在,则会在追加操作之前创建一个空列表。 如果键存在但不是列表,则返回错误。
时间复杂度:O(1)
lrange
public java.util.List<String> lrange(String key,long start,long stop)
返回存储在指定键处的列表的指定元素. 开始和结束是从零开始的索引。 0是列表的第一个元素(列表头),1是下一个元素,依此类推。
例如,LRANGE foobar 0 2
将返回列表的前三个元素。
start和end也可以是负数,指示与列表末尾的偏移量。例如,-1是列表的最后一个元素,-2是倒数第二个元素,依此类推。
与各种编程语言中的范围函数保持一致
请注意,如果您有一个从0到100的数字列表,则LRANGE 0 10将返回11个元素,即包括最右边的项目。这可能与选择的编程语言中与范围相关的函数的行为一致(也可能不一致)(请考虑Ruby的Range.new,Array#slice或Python的range()函数)。
超出范围的索引
索引超出范围不会产生错误:如果start在列表的末尾,或者start> end,则返回一个空列表。
时间复杂度:O(start + n)(其中n为范围的长度,start为起始偏移量)
> lpush list 1 2 3
(integer) 3
//超出索引不会报错
> lrange list 0 8
1) "3"
2) "2"
3) "1"
//end比start大会返回空列表
> lrange list 9 0
(empty list or set)
llen
public Long llen(String key)
返回存储在指定键处的列表的长度。 如果键不存在,则返回零(与空列表相同的行为)。 如果存储在key处的值不是列表,则返回错误。
时间复杂度:O(1)
> lpush l1 1 2 3
(integer) 3
//shell语法是空格,java代码才是放在括号中!
> llen(l1)
(error) ERR unknown command `llen(l1)`, with args beginning with:
> llen l1
(integer) 3
//key不存在,返回0
> llen l2
(integer) 0
pop
public String lpop(String key)
以原子方式返回并删除列表的第一个(LPOP)或最后一个(RPOP)元素。 例如,如果列表包含元素“ a”,“ b”,“ c”,则LPOP将返回“ a”,并且列表将变为“ b”,“ c”。
如果键不存在或列表已经为空,则返回特殊值“ nil”。
> lpush s 1 2 3 4 5
(integer) 5
//删除最右侧元素,并返回被删除的元素
> lpop s
127.0.0.1:6379> lrange s 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
//删除造左侧的元素,并返回被删除的元素
> rpop s
"1"
> lrange s 0 -1
1) "4"
2) "3"
3) "2"
lrem
注意第二个参数类型为long,第三个为string,但是shell中没有区别,java中则是有区别的
public Long lrem(String key,long count,String value)
从列表中删除count个value。 如果count为零,则删除所有元素。 如果count是负数,则将元素从尾部移到头部,而是从头到尾移出,这是正常行为。 因此,例如,具有count -2和hello作为要从列表中删除的值(a,b,c,hello,x,hello,hello)的LREM将离开列表(a,b,c,hello,x)。 删除的元素数以整数形式返回,有关返回值的更多信息,请参见下文。 请注意,LREM将不存在的键视为空列表,因此针对不存在的键的LREM将始终返回0。
时间复杂度:O(N)(其中N为列表的长度)
> lpush zzz 1 2 3 3 4 3 5 6 7 7
(integer) 10
//删除2个3
> lrem zzz 2 3
(integer) 2
> lrange zzz 0 -1
1) "7"
2) "7"
3) "6"
4) "5"
5) "4"
6) "3"
7) "2"
8) "1"
> lrem zzz 0
(error) ERR wrong number of arguments for 'lrem' command
//删除所有的7, 0 这个参数代表所有的
127.0.0.1:6379> lrem zzz 0 7
//表面删除了2个元素
(integer) 2
> lrange zzz 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
> lrem zzz -1 6
(integer) 1
127.0.0.1:6379> lrange zzz 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
lset
将一个新值设置为键处List的索引位置处的元素。
超出范围的索引将生成错误。
与其他接受索引的列表命令类似,对于从列表末尾开始的访问元素,索引可以为负。 因此,-1是最后一个元素,-2是倒数第二个,依此类推。
时间复杂度:
O(N)(N为列表的长度),将列表的第一个或最后一个元素设置为O(1)。
public String lset(String key,long index,String value)
> lpush ss 1 2 3
(integer) 3
//修改索引为1的元素,索引从0开始
> lset ss 1 99
OK
> lrange ss 0 -1
1) "3"
2) "99"
3) "1"
总结
对应列表,无非增删改查而已,命令中的l应该是list的意思.
增 lpush
删 lrem,lpop
改 lset
查 lrange
redis数据类型之List入门练习相关推荐
- redis数据类型之String入门
入门 字符串怎么来的key呢?因为redis是kv型的数据库,自然所有的类型都需要key了~ 这里的key可以类比java中的变量名 增–set,mset,msetnx,setnx > set ...
- redis数据类型之set入门
入门 redis的set是一个无序的,不可重复的集合.大部分方法以s开头 常用方法解析 sadd 将指定的成员添加到存储在key的设置值中. 如果member已经是集合的成员,则不执行任何操作. 如果 ...
- redis数据类型之hash入门
入门 哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value 增–hset public Long hset(String key,String fi ...
- Redis基础篇-(入门、数据类型、通用命令、Jedis)
windows系统环境 目录 Redis入门 问题现象: 罪魁祸首---关系型数据库 解决思路 Nosql 常见的Nosql数据库: 解决方案(电商场景): Redis简介 Redis的应用 Redi ...
- Redis从精通到入门——数据类型Zset实现源码详解
Redis数据类型之Zset详解 Zset简介 Zset常用操作 应用场景 Zset实现 源码阅读 Zset-ziplist实现 图解Zset-ziplist Zset-字典(dict) + 跳表(z ...
- Marco's Java【Redis入门(三) 之 Redis数据类型及用法】
前言 在啃完上节的Redis的配置文件redis.conf这块 "硬石头" 之后,接下来,咱们继续啃Redis数据类型- Redis 相对于 Memcache.Tokyo Tyra ...
- Redis 数据类型介绍
Redis 数据类型介绍 你也许已经知道Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值.也就是说,你不必仅仅把字符串当作键所指向的值.下列这些数据类型都可 ...
- Redis 数据类型之(底层解析)
Redis 数据类型之(底层解析) Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redi ...
- redis设置密码和启动 redis数据类型
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径.Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象. Redis运行在内存中 ...
最新文章
- Windows 7运行命令大全
- python实习做什么工作-实习工作 - python挖掘 - 博客园
- ViewTreeObserver视图树观察者
- SpringBoot项目依赖本地jar包
- java 显示天气的小程序_超级简单的微信小程序获取今日天气预报代码 小程序获取七日天气...
- ip地址个数的计算,二进制与 8 比特
- tps是什么意思_系统了解精益生产系统TPS精益思想丛书介绍
- 一个简单的线程池设计方案
- 一个小白对卷积神经网络的理解
- 讲解wpe抓包,封包
- CardView学习和使用
- 代码生成器技术乱弹十一,伽罗华理论与代码生成器
- Java学习笔记——Character类
- 麻了,别再为难软件测试员了
- 微信服务商子商户支付
- Oracle数据库原理
- 微信公众号与微信小程序如何相辅相成的?
- YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
- python培训班价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少...
- 设计模式真的能改善软件质量吗 (一)
热门文章
- php删除目录文件内容,php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码...
- php的闭包函数bingto_php的闭包
- ubuntu18.04彻底卸载mysql5.7,图文详解
- checkout 撤销修改_git命令(10):git 常用操作,撤销修改(2)
- java项目介绍_3月Github最热门的10个Java开源项目
- python获取类函数的变量-python 动态获取当前运行的类名和函数名的方法
- python的三种取整方式_python3.6 numpy 数组的多种取整方式
- numeric比较大小 数据库_Liquibase 数据库版本管理工具:3. changeSet 变更集详解
- c语言字符数组赋值_C语言关于结构体字符成员元素赋值的方法
- 自学c语言后的感受,一路走来,浅谈c语言的学习感想