redis数据类型(List)
2016-08-11 10:43
411 查看
list(列表)是链表结构,添加或删除元素是常量时间。
list常用命令
blpop、blpop注意事项:
客户端按顺序服务:第一个被阻塞等待列表的客户端,将第一个收到其他客户端添加的元素,等等。
与 RPOP 的返回值不同:返回的是一个数组,其中包括键的名字,因为 BRPOP 和 BLPOP 可以阻塞等待多个列表的元素。
如果超时时间到达,返回 NULL。
总结:
针对链表结构的Value,Redis在其官方文档中给出了一些实用技巧,如RPOPLPUSH命令,下面给出具体的解释。
Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。
假设一个应用程序正在执行LPUSH操作向链表中添加新的元素,
我们通常将这样的程序称之为”生产者(Producer)”,
而另外一个应用程序正在执行RPOP操作从链表中取出元素,
我们称这样的程序为”消费者(Consumer)”。如果此时,消费者程序在取出消息元素后立刻崩溃,
由于该消息已经被取出且没有被正常处理,那么我们就可以认为该消息已经丢失,由此可能会导致业务数据丢失
,或业务状态的不一致等现象的发生。
然而通过使用RPOPLPUSH命令,消费者程序在从主消息队列中取出消息之后再将其插入到备份队列中,直到消费者程序完成正常的处理逻辑后再将该消息从备份队列中删除。
同时我们还可以提供一个守护进程,当发现备份队列中的消息过期时,可以重新将其再放回到主消息队列中,以便其它的消费者程序继续处理。
list常用命令
lpush key value 从列表左边添加元素 lpushx key value 从列表左边添加元素,只有当key存在的时候才会添加,否则不执行。 rpush key value 从列表右边添加元素 rpushx key value 从列表右边添加元素 ,只有当key存在的时候才会添加,否则不执行。 lpop key 从列表左边弹出第一个元素 blpop ket timeout 从列表左边弹出第一个元素,如果列表没有元素就阻塞,知道timeout时间后超时返回 ,timeout为0时一直阻塞 rpop key 从列表右边弹出第一个元素 brpop ket timeout 从列表右边弹出第一个元素,如果列表没有元素就阻塞,知道timeout时间后超时返回 ,timeout为0时一直阻塞 lrange key start end 获取范围内的列表值 start从0开始 end 为-1代表最后一个 end -2 代码获取倒数第2个 list key 0 -1 获取全部值 ltrim key start end 跟lrange相似 ,获取范围内的列表值,不同的是 ,不在范围内的值都删掉。 llen key 获取列表长度 lset key index value 设置列表指定位置的值 index 为0代表替换头部元素的值 index为-1代表替换尾部元素的值。 lindex key index 获取列表中指定位置的值 index 为0代表获取头部元素的值,index为-1代表获取尾部元素的值 lrem key count value 时间复杂度中N表示链表中元素的数量。在指定Key关联的链表中,删除前count个值等于value的元素。 如果count大于0,从头向尾遍历并删除,如果count小于0,则从尾向头遍历并删除。 如果count等于0,则删除链表中所有等于value的元素。如果指定的Key不存在,则直接返回0。 RPOPLPUSH source destination 原子性的从与source键关联的链表尾部弹出一个元素,同时再将弹出的元素插入到与destination键关联的链表的头部。 如果source键不存在,该命令将返回nil,同时不再做任何其它的操作了。 如果source和destination是同一个键,则相当于原子性的将其关联链表中的尾部元素移到该链表的头部。
blpop、blpop注意事项:
客户端按顺序服务:第一个被阻塞等待列表的客户端,将第一个收到其他客户端添加的元素,等等。
与 RPOP 的返回值不同:返回的是一个数组,其中包括键的名字,因为 BRPOP 和 BLPOP 可以阻塞等待多个列表的元素。
如果超时时间到达,返回 NULL。
总结:
针对链表结构的Value,Redis在其官方文档中给出了一些实用技巧,如RPOPLPUSH命令,下面给出具体的解释。
Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。
假设一个应用程序正在执行LPUSH操作向链表中添加新的元素,
我们通常将这样的程序称之为”生产者(Producer)”,
而另外一个应用程序正在执行RPOP操作从链表中取出元素,
我们称这样的程序为”消费者(Consumer)”。如果此时,消费者程序在取出消息元素后立刻崩溃,
由于该消息已经被取出且没有被正常处理,那么我们就可以认为该消息已经丢失,由此可能会导致业务数据丢失
,或业务状态的不一致等现象的发生。
然而通过使用RPOPLPUSH命令,消费者程序在从主消息队列中取出消息之后再将其插入到备份队列中,直到消费者程序完成正常的处理逻辑后再将该消息从备份队列中删除。
同时我们还可以提供一个守护进程,当发现备份队列中的消息过期时,可以重新将其再放回到主消息队列中,以便其它的消费者程序继续处理。
相关文章推荐
- Redis学习手册(List数据类型)
- Redis学习笔记-List数据类型
- redis 数据类型list的使用
- Redis数据类型--List
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- Redis数据类型-List
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- 3.Redis数据类型之List类型
- Redis学习手册(List数据类型)
- redis数据类型之list
- redis list数据类型
- Redis学习手册(List数据类型)
- Redis学习手册(List数据类型)
- redis基本数据类型操作之 list
- Redis学习手册(List数据类型)
- (10-5) redis-list 数据类型