4. redis 的链表结构
list 是一个双向链表 ,左侧是头,右侧是尾,两端都可以进出数据。有序的字符串集合。
可以模拟 队列:先进先出 ,可以模拟堆栈:先进后出
左侧进,右侧出,则模拟的是队列(或者右侧进左侧出);
左侧进,左侧出,则模拟的是堆栈(或右侧)
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