基本数据类型:List列表
在redis里面,我们可以把list玩成,栈、队列、阻塞队列!
redis所有的list命令都是用l开头的
list是可以存放重复值的
127.0.0.1:6379> clear
127.0.0.1:6379> lpush list1 one # 往名为list1的list中里放入值
(integer) 1
127.0.0.1:6379> lpush list1 two
(integer) 2
127.0.0.1:6379> lpush list1 three # 按123放入
(integer) 3
127.0.0.1:6379> lrange list1 0 -1 # 取出list1的值
1) "three"
2) "two"
3) "one" # 发现是倒着出来的,先进后出
127.0.0.1:6379> lrange list1 0 1 # 通过区间取出具体的值
1) "three"
2) "two"
127.0.0.1:6379> rpush list1 right # 从右边插入一个值right
(integer) 4
127.0.0.1:6379> lrange list1 0 -1 # 取出list1的值
1) "three"
2) "two"
3) "one"
4) "right" # 发现right这个值最后出来,说明右边是指列表的尾部
#############################################################
移除命令
lpop:往左边移除
rpop:往右边移除
127.0.0.1:6379> lrange list1 0 -1 # 获取list1中的所有值
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list1 # 从左边(头)移除一个
"three" # 移除的元素
127.0.0.1:6379> rpop list1 # 从右边(尾)移除一个
"right" # 移除的元素
127.0.0.1:6379> lrange list1 0 -1 # 移除后的list1
1) "two"
2) "one"
#############################################################
lrem:l remove移除指定的值!
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 three # 移除一个three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lpush list three # 再放进去一个three
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 2 three # 移除两个three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
#############################################################
Lindex:根据索引获取值
127.0.0.1:6379> lindex list1 1 # 获取list1中的索引为1的值
"one"
127.0.0.1:6379> lindex list1 0
"two"
#############################################################
llen:获取list长度
127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> llen list # 返回list的长度(此处list是key名)
(integer) 3
#############################################################
trim:修剪;截断list,相当于截取list中的值
127.0.0.1:6379> lpush mylist hello
(integer) 1
127.0.0.1:6379> lpush mylist hello1
(integer) 2
127.0.0.1:6379> lpush mylist hello2
(integer) 3
127.0.0.1:6379> lpush mylist hello3 # 往里面放四个值
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1 # 获得值
1) "hello3"
2) "hello2"
3) "hello1"
4) "hello"
# 截取0-1的值,当然你想截取其他的也可以,截取了,list也被修改了
127.0.0.1:6379> ltrim mylist 0 1
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
#############################################################
rpoplpush # 移除列表最后一个元素,放到另一个list中
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
127.0.0.1:6379> rpoplpush mylist otherlist # 移动最后一个元素到其他list
"hello1"
127.0.0.1:6379> lrange mylist 0 -1 # 可以看到已经被移走了
1) "hello3"
2) "hello2"
127.0.0.1:6379> lrange otherlist 0 -1 # 移动到这个新的list中了
1) "hello1"
#############################################################
lset:将列表指定下标的值,替换为另一个值,就是更新操作
127.0.0.1:6379> exists list # 判断这个列表是否存在
(integer) 0
127.0.0.1:6379> lset list 0 item # 错误的原因是list不存在
(error) ERR no such key
127.0.0.1:6379> lpush list value1 # 先放入一个value1
(integer) 1
127.0.0.1:6379> lrange list 0 0
1) "value1"
127.0.0.1:6379> lset list 0 value2 # 把第0索引替换成一个value2
OK
127.0.0.1:6379> lrange list 0 0
1) "value2"
127.0.0.1:6379> lset list 1 value3 # list中没有索引为1的值,所以失败
(error) ERR index out of range
#############################################################
linsert:插入,在list的某个值前,或后插入一个值
127.0.0.1:6379> flushdb # 清空redis数据库
OK
127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist world # 放两个值
(integer) 2
# 在world前插入一个other
127.0.0.1:6379> linsert mylist before "world" "other"
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "world"
# 在world前插入一个!!!!!
127.0.0.1:6379> linsert mylist after world "!!!!!"
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "world"
4) "!!!!!"
小结
1、他实际上是一个链表,before Node after , left , right都可以插入值
2、如果key不存在,创建新的链表
3、如果key存在,新增内容
4、如果移除了所有值,空链表,也代表不存在!
5、在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点~
消息排队!消息队列( Lpush Rpop ) ,栈( Lpush Lpop )