一:Redis 列表(List) -- LinkedList
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边);一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
JavaList:数组(ArrayList)链表(LinkedList)
1:ArrayList使用数组方式存储数据,所以根据索引查询数据速度快,而新增或者删除元素时需要设计到位移操作,所以比较慢。
2:LinkedList使用双向链接方式存储数据,每个元素都记录前后元素的指针,所以插入、删除数据时只是更改前后元素的指针指向即可,速度快,若通过下标查询元素时需要从头开始索引,所以比较慢。
注意:为什么Redis选取了链表?Redis操作中,最多的操作是进行元素的增删;
二:Redis 命令
2.1:列表赋值:Lpush key value1 [value2]:将一个或多个值插入到列表头部;在指定的key所关联的list的头部插入所有的values,如果该key不存在,该命令在插入的之前创建一个与该key关联的空
链表,之后再向该链表的头部插入数据。插入成功,返回元素的个数(列表的长度);
2.2:Rpush key value1 [value2]:在列表的尾部添加一个或多个值
2.3:lrange key start end:返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素,1 表示列表第二个元素,以此类推。也可使用负数下标,以-1表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推;
2.4:列表删除(弹出):
lpop key:返回并弹出指定的key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil;若key存在,则返回链表的头部元素。
rpop key:从尾部弹出元素。
2.5:llen key:返回指定的key关联的链表中的元素的数量(长度)
2.6:rpoplpush resource destination:将链表中的尾部元素弹出并添加到头部。[循环操作]
两队排列:
循环队列:
rpoplpush的使用场景:Redis链表经常会被用于消息队列的服务,以完成多程序之间的消息交换。假设一个应用程序正在执行LPUSH操作向链表中添加新的元素,我们通常将这样的程序称之为"生
产者(producer)",而另外一个应用程序正在执行RPOP操作从链表中取出元素,我们称这样的程序为"消费者(Consume矿如果此时,消费者程序在取出消息元素后立刻崩溃,由于该消息己经被取出且没
有被正常处,那么我们就可以认为该消息己经丢失,由此可能会导致业务数据丢失,或业务状态的不一致等现象的发生。然而通过吏用RPOPLPUSH命令,消费者程序在从主消息队列中取出消息之后再将其
插入到各份队列中,直到消费者程序完成正常的处理逻辑后再将该消息从备份队列中删除。同时我们还可以提供一个守护进程,当发现各份队列中的消息过期时,可以重新将其冉放回到主消息队列中,以便
其它的消费者程序继续处理。