4. redis 的链表结构

  list 是一个双向链表 ,左侧是头,右侧是尾,两端都可以进出数据。有序的字符串集合。

  可以模拟 队列:先进先出 ,可以模拟堆栈:先进后出

  4. redis 的链表结构

 

  左侧进,右侧出,则模拟的是队列(或者右侧进左侧出);

  左侧进,左侧出,则模拟的是堆栈(或右侧)

   lpush 、lpop:从头部写入、删除数据

  rpush、rpop:从尾部写入、删除数据

1. 模拟堆栈

  打印从栈顶打印,-1 表示末尾

192.168.50.160:6379> lpush list zhang3 li4 wang5 
(integer) 3

192.168.50.160:6379> lrange list 0 -1
1) "wang5"
2) "li4"
3) "zhang3"

2.模拟队列

  先出的是张3

192.168.50.160:6379> lrange list 0 -1
1) "wang5"
2) "li4"
3) "zhang3"
192.168.50.160:6379> rpop list 
"zhang3"

3.插入元素

  在one 的前面插入three ,前面 指的是 : 先出堆栈的前面,下标靠前的。

192.168.50.160:6379> lpush list one 
(integer) 1
192.168.50.160:6379> lpush list two
(integer) 2

192.168.50.160:6379> linsert list before "one" "three"
(integer) 3
192.168.50.160:6379> lrange list 0 -1
1) "two"
2) "three"
3) "one"

 4.替换元素

 将第0个元素 "two"替换成"xxxx"

192.168.50.160:6379> lrange list 0 -1
1) "two"
2) "three"
3) "one"
192.168.50.160:6379> lset list 0 "xxxx"
OK
192.168.50.160:6379> lrange list 0 -1
1) "xxxx"
2) "three"
3) "one"

5.删除元素

  1) 正数 0 表示,删除所有的 a

192.168.50.160:6379> lpush list a
(integer) 1
192.168.50.160:6379> lpush list b
(integer) 2
192.168.50.160:6379> lpush list c
(integer) 3
192.168.50.160:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
192.168.50.160:6379> lpush list a
(integer) 4
192.168.50.160:6379> lpush list a
(integer) 5
192.168.50.160:6379> lrange list 0 -1
1) "a"
2) "a"
3) "c"
4) "b"
5) "a"
192.168.50.160:6379> lrem list 0 "a"  
(integer) 3
192.168.50.160:6379> lrange list 0 -1
1) "c"
2) "b"

 2) 正数、非0,表示从表头 开始找如 2  ,找两个a ,找到即删除

 3) 负数表示,从表尾开始找如-2 ,找到两个a,删除2个a。

6.修剪队列,只保留一定范围的

下标从0开始的,只保留 2,3位 

192.168.50.160:6379> lrange list 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
192.168.50.160:6379> ltrim list 2 3
OK
192.168.50.160:6379> lrange list 0 -1
1) "c"
2) "b"

7. 第一步 尾部删除元素,第二部头部添加元素

192.168.50.160:6379> lrange list 0 -1
1) "g"
2) "f"
3) "e"
4) "c"
5) "b"
192.168.50.160:6379> rpoplpush list list 
"b"
192.168.50.160:6379> lrange list 0 -1
1) "b"
2) "g"
3) "f"
4) "e"
5) "c"

8.查看该下标的值

192.168.50.160:6379> lrange list 0 -1
1) "b"
2) "g"
3) "f"
4) "e"
5) "c"
192.168.50.160:6379> lindex list 1
"g"

9.查所有元素个数

192.168.50.160:6379> llen list
(integer) 5