redis中的list集合数据类型,是一种双向链表的结构,list存在的元素是任意的string类型。那么redis是如何管理和操作list集合数据的呢,下文将阐述redis list集合的基本语法使用:

    1、添加/创建一个list对象

# 分为栈式和队列两种添加
语法1:lpush [list集合] [元素] # 栈式添加元素,将list集合看成是一个栈类型,先进后出;
范例:lpush list1 hello
      lpush list1 world
阐述:遍历集合结果为:world, hello;也就是先进后出

语法2:rpush [list集合] [元素] # 队列式添加元素,先进先出
范例:rpush list2 hello
      rpush list2 world
阐述:遍历集合结果为:hello, world,先进先出,保持插入的顺序

    2、遍历list集合元素

# 遍历都是从头部到尾部的过程
语法:lrange [集合] [开始索引] [结束索引]
范例:lrange list1 0 -1 # 结果为world,hello 
      lrange list2 0 -1 # 结果为hello, world
阐述:索引位置是从0开始,-1表示最后一个元素索引

    3、获取某个索引的集合元素

语法:lindex [list集合] [索引]
范例:lindex list3 0 # 如果不存在,返回nil,否则返回该索引位置的元素

    4、修改某个索引位置的集合元素

# 修改指定索引位置的元素
语法:lset [list集合] [索引] [新元素]
范例:lset list1 0 Hello 
      lrange list1 0 -1 # 之前0的位置是world,现在变成Hello

    5、获取list集合的大小

语法:llen [list集合]
范例:llen list1 # 返回集合大小,2

    6、插入某个元素

#插入元素不是通过索引来完成的,而是通过指定某个元素值的前,后插入
语法:linsert [list集合] [before | after] [元素] [待插入的元素]
# 假设list4={'hello','world','hello'}
范例:linsert list4 before hello wang1 
      linsert list4 after hello wang2
阐述:list4集合中有两个hello元素,每次仅仅匹配一个,从list开头匹配。在执行before时,得到结果为{'wang1','hello','world','hello'};执行after时,{'wang1','hello','wang2','world','hello'}.

    7、获取某个区间的元素列表

# 截取结合指定索引区间的元素,区间外的元素删除
语法:ltrim [list集合] [开始索引] [结束索引]
范例:ltrim list4 0 1 
阐述:返回截取后的集合元素大小,遍历结果为{'wang1','hello'}

    8、辅助方法

语法:rpoplpush [list集合1] [list集合2]
范例:rpoplpush list1 list2
阐述:从尾部删除list1中的一个元素,将其栈式插入到list2中,并返回list1删除的元素。相当于执行rpop list1,lpush list2

    9、整体结构分析

    由于list结构是双向链表结构,那么充头部插入或者从尾部差多都是OK的,lpush头部插入、lpop头部删除、rpush尾部插入、rpop尾部删除、lrange都是头部到尾部的遍历方式。

    结构图如下:

[redis数据结构]之 list类型_第1张图片