列表List(单值多Value)
#=====================================
# lpush :将一个或多个值插入到列表头部(左)
# rpush :将一个或多个值插入到列表尾部(右)
# lrange :返回列表中指定区间内的元素,区间以偏移量 start和end指定
# 其中0 表示类别的第一个元素 1表示列表的第二个元素 以此类推
# 你也可以使用负数下标 以-1 表示列表的最后一个元素 -2 表示列表的倒数第二个元素 以此类推
#=====================================
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> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379>
#=====================================
# lpop :命令用于移除并返回列表的第一个元素。当类别key不存在时 返回nil
# rpop:移除列表的最后一个元素,返回值为移除的元素
#=====================================
127.0.0.1:6379> rpush list right
(integer) 3
127.0.0.1:6379> lpop list
"two"
127.0.0.1:6379> rpop list
"right"
127.0.0.1:6379> lrange list 0 -1
1) "one"
#=====================================
# lindex :按照索引下标获得元素(-1代表最后一个 0代表第一个)
#=====================================
127.0.0.1:6379> lindex list 1
(nil)
127.0.0.1:6379> lindex list 0
"one"
127.0.0.1:6379> lindex list -1
"one"
#=====================================
# llen :用于返回列表的长度
#=====================================
127.0.0.1:6379> flushdb
OK
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 #返回列表的长度
(integer) 3
#=====================================
# lrem key :根据参数 count的值 移除列表中与参数value相等的元素
#=====================================
127.0.0.1:6379> lrem list 1 two
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "one"
#=====================================
# ltrim key :对一个列表进行修剪(trim)就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
#=====================================
127.0.0.1:6379> rpush mylist wyt
(integer) 1
127.0.0.1:6379> rpush mylist lmp
(integer) 2
127.0.0.1:6379> rpush mylist hyd
(integer) 3
127.0.0.1:6379> rpush mylist yjy
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "lmp"
2) "hyd"
#=====================================
# rpoplpush :移除列表的最后一个元素,并将该元素添加到另一个列表并返回
#=====================================
127.0.0.1:6379> rpush list hello
(integer) 1
127.0.0.1:6379> rpush list foo
(integer) 2
127.0.0.1:6379> rpush list bar
(integer) 3
127.0.0.1:6379> rpoplpush list myotherlist
"bar"
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "foo"
127.0.0.1:6379> lrange myotherlist 0 -1
1) "bar"#=====================================
# lset key index value :将列表 可以 下标为index的元素的值设置为value
#=====================================
127.0.0.1:6379> exists list #对空列表进行lset
(integer) 0
127.0.0.1:6379> lset list 0 item #报错
(error) ERR no such key
127.0.0.1:6379> lpush list one #对非空列表进行 lset
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 new #更新值
OK
127.0.0.1:6379> lrange list 0 0
1) "new"
127.0.0.1:6379> lset list 1 new #index超出范围报错
(error) ERR index out of range
# ===================================================# linsert key before/after pivot value 用于在列表的元素前或者后插入元素。# 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。# ===================================================
性能总结
- 它是一个字符串链表,left,right 都可以插入添加
- 如果键不存在,创建新的链表
- 如果键已存在,新增内容
- 如果值全移除,对应的键也就消失了
- 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了