博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis入门-1-数据模型List
阅读量:5911 次
发布时间:2019-06-19

本文共 3630 字,大约阅读时间需要 12 分钟。

hot3.png

Redis入门-数据模型List

List列表

list列表是简单的字符串列表,按照插入顺序排序,使其成为消息队列的理想工具。在list中您可以序列化任何对象并将其作为字符串进行持久化,因此队列中的消息可以在需要时携带更复杂的数据。

头元素和尾元素:头元素指的是列表的左端/前端第一个元素,尾元素指的是列表右端/后端的第一个元素。举个例子列表中包含三个元素:x,y,z ,其中x是头元素,二z是尾元素。

空列表:不包含任何元素的列表,redis将不存的key也视为空列表。

1.将值value插入到列表

1.1 LPUSH

LPUSH key value [value ...]

将一个或多个值value插入到列表key的表头。同时插入多个value值,那么各个values值按照从左到右的顺序依次插入到表头:比如对queue#tasks同时lpush插入a b c三个value,则结果列表为c , b ,a 。 如果key不存在,一个空的列表将会被创建并被执行LPUSH操作。

当key存在但是不是列表类型时候,会返回一个错误。该操作的时间复杂度是O(1)。执行LPUSH命令后,返回的值时列表的长度。(Note:插入多个value值时在Redis2.4以后版本的特性)

try (Jedis jedis = jedisPool.getResource()) {            //设置list数据            Long status = jedis.lpush("queue#tasks", "may","jays","codes");            Long status = jedis.lpush("queue#tasks", "three");            System.out.println(status); //lpush返回的值是 list的列表的长度            Long two = jedis.lpush("queue#tasks", "four");            System.out.println(two);            //计算长度            Long length = jedis.llen("queue#tasks");            System.out.println("list length:" +length);            }

1.2 LPUSHX

LPUSHX key value

将值value插入到列表key的表头,并且仅当key存在并且是一个列表。与LPUSH相反,当key不存在时,LPUSHX命令什么也不做。 时间复杂度是O(1),返回值是列表的长度。

#对一个空的列表进行lpushxRedis> LLEN greet #greet是一个空的列表(integer) 0Redis> LPUSHX greet "hello"        #尝试lpushx失败,因为列表为空(integer) 0# 对一个已经存在列表进行lpushxRedis> LPUSH greet "hello"          #使用lpush创建一个greet列表(integer) 1Redis> llen greet                   #greet列表已经存在(integer) 1Redis> LPUSHX greet "good morning"  #使用lpushx进行插入操作(integer) 2Redis> lrange greet 0 -1     #遍历greet列表1) "good morning"2) "hello"Redis> llen greet  #列表长度(integer) 2

1.3 RPUSH

RPUSH key value [value ...]

将一个或多个value插入到列表的key的表尾部。

如果将多个value值,那个哥哥value的值按照从左到右的顺序依次插入到表尾部:比如对一个空列表执行RPUSH a b c 。队列顺序也为a b c。

如果key不存在,一个空的列表将被创建并执行RPUSH操作。当key存在但并不是列表类型时候,返回一个错误。(Note:插入多个值时Redis2.4版本以前的RPUSH命令)

Redis> rpush greet "a" "b" "c" #在队列尾部插入(integer) 5Redis> lrange greet 0 -11) "good morning"2) "hello"3) "a"4) "b"5) "c"Redis> rpush c/EV78945 "goood" #对一个非list类型的数据结构(error) WRONGTYPE Operation against a key holding the wrong kind of value

1.4 RPUSHX

RPUSHX key value

将值的value插入到列表key的表尾,当且仅当key存在并且是一个列表。

和RPUSH命令相反,当key不存在时,RPUSHX命令什么也不做。

时间复杂度O(1),返回值RPUSHX命令执行之后,表的长度。

redis> lrange greet 0 -11) "good morning"2) "hello"3) "a"4) "b"5) "c"redis> rpushx greet "end"(integer) 5

1.5 LPOP

LPOP key

移除并返回列表key的头元素。 时间复杂度O(1),返回值是列表的头元素,当key不存在时,返回null

redis> lrange greet 0 -11) "hello"2) "a"3) "b"4) "c"5) "end"redis> lpop greet #从队列头部进行删除,hello将被删除"hello"redis> lrange greet 0 -11) "a"2) "b"3) "c"4) "end"

1.6 RPOP

rpop greet

移除并返回列表key的尾部元素。 时间复杂度O(1)。返回值列表的尾元素。当key不存在时,返回null。

redis> lrange greet 0 -11) "a"2) "b"3) "c"4) "end"redis> rpop greet #从队列的尾部删除,end将被删除"end"redis> lrange greet 0 -1 1) "a"2) "b"3) "c"

1.7 LRANGE

lrange greet startIndex endIndex

获取队列中从startIndex,到endIndex之间的元素。其中start的值也可以为负值,-1将表示链表中的最后一个元素,即尾部元素,-2表示倒数第二个并以此类推。该命令在获取元素时,start和end位置上的元素也会被取出。如果start的值大于链表中元素的数量,空链表将会被返回。如果end的值大于元素的数量,该命令则获取从start(包括start)开始,链表中剩余的所有元素。

redis> lrange greet 0 -1 1) "a"2) "b"3) "c"

1.8 RPOPLPUSH

RPOPLPUSH sourcedestination

原子性的从与source键关联的链表尾部弹出一个元素,同时再将弹出的元素插入到与destination键关联的链表的头部。如果source键不存在,该命令将返回nil,同时不再做任何其它的操作了。如果source和destination是同一个键,则相当于原子性的将其关联链表中的尾部元素移到该链表的头部。该方法的复杂度就是O(1)。

redis> lrange greet 0 -1 1) "a"2) "b"redis> rpoplpush greet greet-copy"b"redis> lrange greet-copy 0 -1 1) "b"redis> lrange greet 0 -1 1) "a"

1.9 其它操作方法

LINDEX key index 返回请求的元素,如果index超出范围,则返回nil

LSET key index value 设定链表中指定位置的值为新值。其中0表示第一个元素,即头部元素,-1表示尾部元素

LRANGE key start stop 返回指定范围内元素的列表。其中0表示第一个元素,即头部元素,-1表示尾部元素.

LTRIM key start stop 该命令将仅保留指定范围内的元素。

转载于:https://my.oschina.net/ordiychen/blog/879084

你可能感兴趣的文章
[Android] keytools生成jsk文件以及获取sha1码
查看>>
一道算法题
查看>>
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
查看>>
遍历DOM树,链式操作
查看>>
WM-结汇
查看>>
概述--Nginx集成Vcenter 6.X HTML Console系列之 1--(共4)
查看>>
mysql查询重复
查看>>
ORACLE触发器的管理与实际应用【weber出品】
查看>>
C# SQLite
查看>>
Java 动态太极图 DynamicTaiChi (整理)
查看>>
JNI_1
查看>>
着色器编程学习(一)——类波浪+生成法线
查看>>
C#Arcengine通过坐标点生成面(环形)
查看>>
来朗沃后的学习感受
查看>>
Uva 10328 逆向思维
查看>>
(转载)表服务器无法打开与报表服务器数据库的连接。所有请求和处理都要求与数据库建立连接。...
查看>>
团队成员贡献总结
查看>>
MAC下调试JSON接口的工具(HTTP抓包工具)
查看>>
Android设置Gridview中的内容不滚动,然后控件中的内容随便添加的效果。
查看>>
HDU 5974 A Simple Math Problem ——(数论,大连区域赛)
查看>>