入门

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入门练习相关推荐

  1. redis数据类型之String入门

    入门 字符串怎么来的key呢?因为redis是kv型的数据库,自然所有的类型都需要key了~ 这里的key可以类比java中的变量名 增–set,mset,msetnx,setnx > set ...

  2. redis数据类型之set入门

    入门 redis的set是一个无序的,不可重复的集合.大部分方法以s开头 常用方法解析 sadd 将指定的成员添加到存储在key的设置值中. 如果member已经是集合的成员,则不执行任何操作. 如果 ...

  3. redis数据类型之hash入门

    入门 哈希类型也是key-value结构,key是字符串类型,其value分为两个部分:field和value 增–hset public Long hset(String key,String fi ...

  4. Redis基础篇-(入门、数据类型、通用命令、Jedis)

    windows系统环境 目录 Redis入门 问题现象: 罪魁祸首---关系型数据库 解决思路 Nosql 常见的Nosql数据库: 解决方案(电商场景): Redis简介 Redis的应用 Redi ...

  5. Redis从精通到入门——数据类型Zset实现源码详解

    Redis数据类型之Zset详解 Zset简介 Zset常用操作 应用场景 Zset实现 源码阅读 Zset-ziplist实现 图解Zset-ziplist Zset-字典(dict) + 跳表(z ...

  6. Marco's Java【Redis入门(三) 之 Redis数据类型及用法】

    前言 在啃完上节的Redis的配置文件redis.conf这块 "硬石头" 之后,接下来,咱们继续啃Redis数据类型- Redis 相对于 Memcache.Tokyo Tyra ...

  7. Redis 数据类型介绍

    Redis 数据类型介绍 你也许已经知道Redis并不是简单的key-value存储,实际上他是一个数据结构服务器,支持不同类型的值.也就是说,你不必仅仅把字符串当作键所指向的值.下列这些数据类型都可 ...

  8. Redis 数据类型之(底层解析)

    Redis 数据类型之(底层解析) Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redi ...

  9. redis设置密码和启动 redis数据类型

    Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径.Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象. Redis运行在内存中 ...

最新文章

  1. Windows 7运行命令大全
  2. python实习做什么工作-实习工作 - python挖掘 - 博客园
  3. ViewTreeObserver视图树观察者
  4. SpringBoot项目依赖本地jar包
  5. java 显示天气的小程序_超级简单的微信小程序获取今日天气预报代码 小程序获取七日天气...
  6. ip地址个数的计算,二进制与 8 比特
  7. tps是什么意思_系统了解精益生产系统TPS精益思想丛书介绍
  8. 一个简单的线程池设计方案
  9. 一个小白对卷积神经网络的理解
  10. 讲解wpe抓包,封包
  11. CardView学习和使用
  12. 代码生成器技术乱弹十一,伽罗华理论与代码生成器
  13. Java学习笔记——Character类
  14. 麻了,别再为难软件测试员了
  15. 微信服务商子商户支付
  16. Oracle数据库原理
  17. 微信公众号与微信小程序如何相辅相成的?
  18. YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
  19. python培训班价格-少儿编程培训机构哪家好,儿童编程价格多少钱?家长知多少...
  20. 设计模式真的能改善软件质量吗 (一)

热门文章

  1. php删除目录文件内容,php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码...
  2. php的闭包函数bingto_php的闭包
  3. ubuntu18.04彻底卸载mysql5.7,图文详解
  4. checkout 撤销修改_git命令(10):git 常用操作,撤销修改(2)
  5. java项目介绍_3月Github最热门的10个Java开源项目
  6. python获取类函数的变量-python 动态获取当前运行的类名和函数名的方法
  7. python的三种取整方式_python3.6 numpy 数组的多种取整方式
  8. numeric比较大小 数据库_Liquibase 数据库版本管理工具:3. changeSet 变更集详解
  9. c语言字符数组赋值_C语言关于结构体字符成员元素赋值的方法
  10. 自学c语言后的感受,一路走来,浅谈c语言的学习感想