Redis基本操做-list

Redis的5种数据结构:string、list、hash、set和zset;
Redis 全部的数据结构都是以惟一的 key 字符串做为名称,而后经过这个惟一 key 值来获取相应的 value 数据。不一样类型的数据结构的差别就在于 value 的结构不同。java

redis_list.jpg

一、基本操做

  • 列表的存储结构使用的是链表,不是数组;
  • 使用的是双向链表;
  • 随机定位性能较弱,首尾删除性能较优;
  • 链表元素的位置使用天然数(0,1,2......n-1)表示,也可使用负数,-1表示【倒数第一个】,-n表示【第一个元素】;

二、队列、堆栈

列表经常使用来做为异步队列使用python

经过使用rpush、rpop、lpush、lpop四条指令,在链表的表头和表尾追加或移除元素,能够将链表做为队列或堆栈使用;redis

# 右进左出队列
localhost:0>rpush muscleape go
"1"
localhost:0>rpush muscleape java python
"3"
localhost:0>lpop muscleape
"go"
localhost:0>lpop muscleape
"java"
localhost:0>lpop muscleape 
"python"
# 左进右出队列
localhost:0>lpush muscleape go java python
"3"
localhost:0>rpop muscleape
"go"
localhost:0>rpop muscleape
"java"
localhost:0>rpop muscleape
"python"

获取长度数组

localhost:0>rpush muscleape go java python
"3"
localhost:0>llen muscleape
"3"

读取
lindex 读取指定位置元素;
lrange 获取链表子元素列表;数据结构

localhost:0>rpush muscleape go java python
"3"
localhost:0>lindex muscleape 1
"java"
localhost:0>lrange muscleape 0 1
 1)  "go"
 2)  "java"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "java"
 3)  "python"

修改元素
lset 在指定位置修改元素异步

localhost:0>rpush muscleape go java python
"3"
localhost:0>lset muscleape 1 PHP
"OK"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "PHP"
 3)  "python"

插入元素
linsert 指定元素,在前或后插入元素性能

localhost:0>linsert muscleape before PHP Java
"4"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"

删除元素(指定删除元素的个数及元素的值-可能会有多个值)
lrem 键 数量 值ui

localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "java"
 6)  "java"
 7)  "C"
 8)  "C++"
 9)  "java"
 10)  "C#"
 11)  "java"
 12)  "java"
 13)  "java"
localhost:0>lrem muscleape 3 java
"3"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "C"
 6)  "C++"
 7)  "C#"
 8)  "java"
 9)  "java"
 10)  "java"

定长列表(范围以外的全部元素都将被移除)
ltrim 键 开始位置 结束位置【结束位置<开始位置===>等价于删除指令】指针

localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "C"
 6)  "C++"
 7)  "C#"
 8)  "java"
 9)  "java"
 10)  "java"
localhost:0>ltrim muscleape 0 6
"OK"
localhost:0>lrange muscleape 0 -1
 1)  "go"
 2)  "Java"
 3)  "PHP"
 4)  "python"
 5)  "C"
 6)  "C++"
 7)  "C#"

三、快速列表

redis_quicklist.jpg

一、Redis底层存储的不是一个简单的LinkedList,而是一种快速链表结构;
二、在列表元素较少时,使用一块连续的内存存储,ziplist(压缩列表);
三、数据较多时,改为quicklist,为普通链表须要附加指针空间太大,比较浪费空间;
四、链表和ziplist组合(作个ziplist使用双向指针串起来使用);code

相关文章
相关标签/搜索