Redis的5种数据结构:string、list、hash、set和zset;
Redis 全部的数据结构都是以惟一的 key 字符串做为名称,而后经过这个惟一 key 值来获取相应的 value 数据。不一样类型的数据结构的差别就在于 value 的结构不同。java
列表经常使用来做为异步队列使用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底层存储的不是一个简单的LinkedList,而是一种快速链表结构;
二、在列表元素较少时,使用一块连续的内存存储,ziplist(压缩列表);
三、数据较多时,改为quicklist,为普通链表须要附加指针空间太大,比较浪费空间;
四、链表和ziplist组合(作个ziplist使用双向指针串起来使用);code