第2章 Lists
List的数据结构类似于双端链表。Redis中L表示链表的头,R表示链表尾部。
存放
头插法
-
LPUSH key element [element …]
向指定的链表插入多个值。L表示插入的方向是头插法。如果key不存在,创建空链表再插入;存在则追加。
返回值:链表长度
example:LPUSH mykey a b c
链表大致结构:c - > b -> a
Long size = resource.lpush(key, "a", "b", "c");
-
LPUSHX key elment [element …]
和LPUSH功能一样。但是必须是要key存在,才插入值。
-
LINSERT key BEFORE | AFTER pivot elment
在列表中指定值的前或后插入值。如果key不存在,不做任何操作
返回值:插入成功,返回列表的长度。
返回-1,指定的值(pivot)没有在列表中找到
Long size = resource.linsert(key, ListPosition.BEFORE, "c", "d");
-
LSET key index element
向列表中指定的index放入值。这个列表必须是存在的
返回值:字符串OK
String rs = resource.lset(key, 3, "a");
尾插法
-
RPUSH
功能和LRPUSH一样。只是插入元素方向不一样,向尾部插入。
example:LPUSH mykey a b c
链表大致结构:a -> b -> c
-
RPUSHX
和RPUSHX功能一样。只是插入元素方向不一样,向尾部插入。
移除
-
LPOP key [count]
移除列表头部元素。count表示要移除元素的数量
返回值:列表中的元素。
key不存在返回,nil
String element = resource.lpop(key);
-
LREM key count element
移除元素。
count > 0:从头到尾,开始移除和element想匹配的元素,直到移除元素个数为count
count < 0:从尾到头,开始移除和element想匹配的元素,直到移除元素个数为count
count = 0:移除和element想匹配的所有元素
返回值:移除元素的个数
example:假设有列表,[“a”, “a”, “b”, “b”, “c”, “d”, “c” ]
1)count = 1,element = c LREM key 1 c
结果:[“a”, “a”, “b”, “b”, “d”, “c”]
2)count = -1,element = c LREM key -1 c
结果:[“a”, “a”, “b”, “b”, “c”, “d” ]
3)count = 0,element = c LREM key 0 c
结果:[“a”, “a”, “b”, “b”, “d”]
Long removeNum = resource.lrem(key, 3, "c");
-
LTRIM key start stop
修剪已存在的链表,链表将包含在 [start, stop] 范围内的值。
注意:如果start大于链表的长度或大于stop,相当于清空链表。
返回值:字符串OK
String rs = resource.ltrim(key, 2, -2);
-
RPOP
和LPOP功能一样,从尾部移除。
遍历
-
LRANGE key start stop
返回指定范围【start, stop】 内的值。注意:这里是包含值stop的
返回值:链表中的值
List<String> values = resource.lrange(key, 0, -1);
-
LINDEX key index
返回链表中指定index的值。
返回值:返回指定index下的值。
index超出链表长度,返回nil
String element = resource.lindex(key, 4);
-
LLEN key
获取链表长度
返回值:key存在,返回链表长度
key不存在,返回0
Long length = resource.llen(key);