Redis入门-1-数据模型List
2017-04-13 00:00
369 查看
摘要: Redis list是一个双向链表结构,主要功能是push、pop、获取一个范围的所有值等等。之所以说它是双向的,因为它可以在链表左,右两边分别操作。Redis List可用从两端插入元素,这样是非常高效的。如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表,因此链表可以被自动创建,在使用时无需判断其是否存在。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除
头元素和尾元素:头元素指的是列表的左端/前端第一个元素,尾元素指的是列表右端/后端的第一个元素。举个例子列表中包含三个元素:x,y,z ,其中x是头元素,二z是尾元素。
空列表:不包含任何元素的列表,redis将不存的key也视为空列表。
当key存在但是不是列表类型时候,会返回一个错误。该操作的时间复杂度是O(1)。执行LPUSH命令后,返回的值时列表的长度。(Note:插入多个value值时在Redis2.4以后版本的特性)
如果将多个value值,那个哥哥value的值按照从左到右的顺序依次插入到表尾部:比如对一个空列表执行RPUSH a b c 。队列顺序也为a b c。
如果key不存在,一个空的列表将被创建并执行RPUSH操作。当key存在但并不是列表类型时候,返回一个错误。(Note:插入多个值时Redis2.4版本以前的RPUSH命令)
和RPUSH命令相反,当key不存在时,RPUSHX命令什么也不做。
时间复杂度O(1),返回值RPUSHX命令执行之后,表的长度。
时间复杂度O(1),返回值是列表的头元素,当key不存在时,返回null
时间复杂度O(1)。返回值列表的尾元素。当key不存在时,返回null。
返回请求的元素,如果index超出范围,则返回nil
LSET key index value
设定链表中指定位置的值为新值。其中0表示第一个元素,即头部元素,-1表示尾部元素
LRANGE key start stop 返回指定范围内元素的列表。其中0表示第一个元素,即头部元素,-1表示尾部元素.
LTRIM key start stop 该命令将仅保留指定范围内的元素。
参考博客
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),返回值是列表的长度。#对一个空的列表进行lpushx Redis> LLEN greet #greet是一个空的列表 (integer) 0 Redis> LPUSHX greet "hello" #尝试lpushx失败,因为列表为空 (integer) 0 # 对一个已经存在列表进行lpushx Redis> LPUSH greet "hello" #使用lpush创建一个greet列表 (integer) 1 Redis> llen greet #greet列表已经存在 (integer) 1 Redis> LPUSHX greet "good morning" #使用lpushx进行插入操作 (integer) 2 Redis> 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) 5 Redis> lrange greet 0 -1 1) "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 -1 1) "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 -1 1) "hello" 2) "a" 3) "b" 4) "c" 5) "end" redis> lpop greet #从队列头部进行删除,hello将被删除 "hello" redis> lrange greet 0 -1 1) "a" 2) "b" 3) "c" 4) "end"
1.6 RPOP
rpop greet
移除并返回列表key的尾部元素。时间复杂度O(1)。返回值列表的尾元素。当key不存在时,返回null。
redis> lrange greet 0 -1 1) "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 该命令将仅保留指定范围内的元素。
参考博客
相关文章推荐
- ADO数据访问模型初学者入门
- ADO.NET Entity Framework生成 School 实体数据模型(实体框架快速入门)
- ASP.NET MVC3 快速入门-第五节 从控制器访问模型中的数据
- Redis入门教程:特性及数据类型的操作
- Redis入门教程:特性及数据类型的操作
- ADO数据访问模型初学者入门
- ASP.NET MVC3 快速入门-第五节 从控制器访问模型中的数据
- Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件
- Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法
- Redis学习手册(List数据类型)
- ASP.NET MVC3 快速入门-第五节 从控制器访问模型中的数据
- ASP.NET MVC3 快速入门-第七节 在Movie(电影)模型与数据表中添加一个字段(转)
- ASP.NET MVC3 快速入门-第五节 从控制器访问模型中的数据(转)
- Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList、TBindPosition [未完成...]
- Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems
- Flex 3快速入门: 处理数据 定义数据模型
- ASP.NET MVC3.0 入门指南 5 从控制器访问模型数据
- Delphi XE2 之 FireMonkey 入门(24) - 数据绑定: TBindingsList: TBindExpression.Direction
- redis:list数据类型与操作
- Redis学习手册(List数据类型)