第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);
本文详细介绍了Redis中的List数据结构,包括头插法(LPUSH)、尾插法(RPUSH),以及LPOP、LREM、LTRIM等关键操作。通过实例演示了如何在Redis中进行元素的插入、删除和修剪,并讨论了LRANGE、LINDEX和LLEN等遍历方法。
4534

被折叠的 条评论
为什么被折叠?



