redis数据类型(List)

list(列表)是链表结构,添加或删除元素是常量时间。

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 获取范围内的列表值   start0开始 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命令,消费者程序在从主消息队列中取出消息之后再将其插入到备份队列中,直到消费者程序完成正常的处理逻辑后再将该消息从备份队列中删除。
同时我们还可以提供一个守护进程,当发现备份队列中的消息过期时,可以重新将其再放回到主消息队列中,以便其它的消费者程序继续处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值