Redis学习(三)之redis中的数据类型之List类型
1、redis中的list使用的是链表结构,链表结构可以保证插入速度快。

1、LPUSH指令将元素加入链表左侧,RPUSH指令将元素加入链表右侧,LRANGE 获取指定下标,-1指的是从右侧数第一个,-2是右侧第二个。

1、RPUSH和LPUSH可以一次性推入多个元素进入链表

1、RPOP可以弹出一个元素,这个指令会弹出这个元素,并且从链表中移除这个元素。如果链表中没有值了,就会返回一个NULL。

1、链表的使用案例:
1)推特的用户最新的推文放入list
2)用户发布照片,将照片id加入list,当用户的主页被访问时,使用LRANGE 0 9 获取最后更新的照片。

1、ltrim可以对链表长度进行裁剪,ltrim list m n ,m n是闭区间,这个ltrim裁剪后并不能永久固定链表的长度,只是本次生效而已。下次再push,想固定长度的话,需要再次trim。所以push和trim需要每次组合使用。

1、阻塞list,如果是实现队列场景,用RPOP或LPOP会造成一定的性能损耗,因为即使队列中没有数据,也会返回NULL,所以redis增加了BRPOP和BLPOP,用阻塞队列来减少性能损耗。
2、阻塞队列返回给调用者数据:新元素加入队列或达到设置的超时时间时。

1、BRPOP list time , time如果是0,表示永久等待。
2、可以同时等待多个队列的数据。

1、BRPOP与RPOP返回的值不同,前者返回的是两个元素的数组,包括了队列名称和弹出的值。
2、关于队列阻塞的操作,还要LMOVE命令,这个命令是原子性的,例如
LMOVE mylist myotherlist RIGHT LEFT
这样可以在redis内进行队列间数据的传递。

浙公网安备 33010602011771号