Redis——List列表(二)
redis列表是一个字符链表,内部结构类似于Java的LinkedList。左边和右边都可以插入。如果键不存在,创建新的键;如果已经存在,添加新的内容。如果把键里面的值全部移除,则该键也会消失。列表最多可以存储2^32-1个元素,也就是40多亿。
原理:底层是一个“快速链表”(quicklist)的结构,在列表元素较少时,使用连续的内存存储成压缩列表ziplist。当数据量较多时,改成linklist,也就是将多个ziplist使用双向指针串起来使用,以减少内存的碎片化。
相关命令:
在使用list列表时,可以使用它实现数据结构里面的栈结构 和队列结构。接下来就分别看看两者如何实现。
首先我们应该知道的是list的存取操作,push(存),pop(取)、range(查看数据)。利用存取操作就可以实现栈和队列了。
1、栈结构:
lpush + list + value:从左侧存入数据,弹出时执行lpop从左侧弹出,即满足了栈先进后出的原理。
2、队列结构:
rpush + list + value:从右侧存入数据,弹出时执行lpop左侧弹出,即满足队列先进先出的原理。
3、查看数据:
lrange key start end:返回内的数据查看。
对list列表本身的操作命令:
1、llen + list :查看list列表的长度。
2、lindex + list + index :获取某一个位置的值,下标从0开始。
3、lrem + list + n + value :删除n个value的值。
4、ltrim + list + start + end:截取某个范围的数据,重新赋值给list。
5、linsert + list + before/after oldValue newValue:插入数据到某个元素位置的前后。
特殊位置:
lpushx + list + value :将数据插入到数据的头部。
rpushx + list + value :将数据插入到数据的尾部。
6、lset + list + index + value :更改指定位置的值。