Redis中List类型是一个字符串列表,这里是一些常见的命令:
1)lpush:将一个或多个值插入到列表头部。列表不存在,一个新的列表会被创建。
2)rpush:将一个或多个值插入到列表尾部。
3)lpop:移除并返回列表头部的元素。
4)rpop:移除并返回列表尾部的元素。
5)lrange:获取列表指定范围内的元素。
6)lindex:通过索引获取到列表中的元素。
7)llen:获取列表长度
8)lset:将列表中指定索引的元素设置为另一个值。
9)lrem:移除列表中与参数匹配的元素。
10)ltrim:修剪(裁剪)一个已经存在list,使其只包含指定范围的元素。
lpush mylist a # 在列表'mylist'的头部插入元素'a'
rpush mylist b # 在列表'mylist'的尾部插入元素'b'
lpop mylist # 移除并返回'mylist'的第一个元素
rpop mylist # 移除并返回'mylist'的最后一个元素
lrange mylist 0 -1 # 获取到'mylist'中的所有元素
lindex mylist 0 # 获取到'mylist'中索引为0的元素
llen mylist # 获取到'mylist'的长度
lset mylist 0 x # 将'mylist'中索引为0的元素设置为x
lrem mylist 1 a # 从'mylist'中移除第一个'a'
ltrim mylist 1 2 # 保留'mylist'中索引从1到2的元素,其他的删除
扩展知识:
列表存储结构:
Redis List 类型的底层实现的有俩种数据结构,Redis会根据列表的长度和每一个元素的大小自动的选择使用哪一个结构。
双向链表(Linked List):当列表元素较多时,使用双向链表实现,便于从俩段快速添加和删除。
压缩列表(Ziplist):当列表元素较少且总大小较少时,使用内存更节省的压缩列表实现。
List的使用场景
消息队列:Redis的 LPUSH 和 RPOP 组合可以用来实现生产者-消费者模型,将 LPUSH 用于生产者, RPOP 用于消费者,这种方式可实现简单的消息队列。
任务调度:可以使用 LPUSH 和 BRPOP 来实现任务调度,将任务放入到队列中,消费者通过阻塞方式从队列中取任务进行处理。
聊天记录:可以使用Redis List 存储用户的聊天记录,利用 RPUSH 添加消息, 使用 LRANGE 获取指定范围内的消息。
列表操作性能问题
大列表操作:当列表非常大的时候,某些操作(如LRANGE 或 LREM)可能会导致Redis阻塞,因为Redis是单线程的,因此对大列表的操作应当尽量避免。
列表裁剪:使用 LTRIM 命令对列表进行裁剪,以控制列表的大小,避免列表无限增长导致内存占用过高。