目录

  • 一、列表类型:List
  • 一、List 数据的操作命令
  • 1.lpush key value [value…]
  • 2.rpush key value [value…]
  • 3.lrange key startIndex endIndex
  • 4.lpop key
  • 5.rpop key
  • 6.lindex key index
  • 7.llen key
  • 8.lrem key count value
  • 9.ltrim key startIndex endIndex
  • 10.lset key index value
  • 11.linsert key before/after pivot value
  • 写在最后


一、列表类型:List



  Redis 列表是简单的字符串列表,按照插入顺序排序,元素可以重复。你可以添加一个元素到列表的头部(左边)或者尾部(右边),无论是头或者尾效率都极高,但是如果对中间元素进行操作,那效率会大大降低了。

key

value

address

北京 广州 上海 深圳


  列表类型的数据操作总的思想是通过 key 和下标操作 value,key 是数据标识,下标是数据在列表中的位置,value 是我们存储的数据。



一、List 数据的操作命令



1.lpush key value [value…]

功能:将一个或多个值 value 插入到列表 key 的最左边(表头),各个value值依次插入到表头位置;
返回值:插入之后的列表的长度;

127.0.0.1:6379> lpush score 95 96 97 99 95
(integer) 5



2.rpush key value [value…]

功能:将一个或多个值 value 插入到列表 key 的最右边(表尾),各个 value 值按依次插入到表尾;
返回值:插入之后的列表的长度;

127.0.0.1:6379> rpush score 95 96 97 99 95
(integer) 5



3.lrange key startIndex endIndex

功能:获取列表 key 中指定下标区间内的元素,下标从0开始,到列表长度-1;
   下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推,且 startIndex 和 endIndex 超出范围不会报错;
返回值:获取到的元素列表;

127.0.0.1:6379> lrange score 0 -1
1) "95"
2) "99"
3) "97"
4) "96"
5) "95"
127.0.0.1:6379> lrange score 0 2
1) "95"
2) "99"
3) "97"
127.0.0.1:6379>



4.lpop key

功能:移除并返回列表 key 头部第一个元素,即列表左侧的第一个元素;
返回值:列表左侧第一个元素的值;
    列表 key 不存在,返回nil;

127.0.0.1:6379> keys *
1) "score"
127.0.0.1:6379> lrange score 0 -1
1) "90"
2) "95"
127.0.0.1:6379> lpop score
"90"
127.0.0.1:6379> lrange score 0 -1
1) "95"
127.0.0.1:6379> lpop score1
(nil)
127.0.0.1:6379>



5.rpop key

功能:移除并返回列表 key 尾部第一个元素,即列表右侧的第一个元素;
返回值:列表右侧第一个元素的值;
    列表 key 不存在,返回nil;

127.0.0.1:6379> keys *
1) "score"
127.0.0.1:6379> lrange score 0 -1
1) "90"
2) "95"
127.0.0.1:6379>rpop score
"95"
127.0.0.1:6379> lrange score 0 -1
1) "90"
127.0.0.1:6379> rpop score1
(nil)
127.0.0.1:6379>



6.lindex key index

功能:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询;
   0 表示列表的第一个元素,1 表示列表的第二个元素;
   index也可以负数的下标, -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推;
返回值:key存在时,返回指定元素的值;
    Key不存在时,返回nil;

127.0.0.1:6379> lrange score 0 -1
1) "94"
2) "92"
3) "90"
4) "95"
127.0.0.1:6379> lindex score 0
"94"
127.0.0.1:6379> lindex score -1
"95"



7.llen key

功能:获取列表 key 的长度;
返回值:列表的长度,key不存在返回0;

127.0.0.1:6379> lrange score 0 -1
1) "94"
2) "92"
3) "90"
4) "95"
127.0.0.1:6379> llen score 
(integer) 4



8.lrem key count value

功能:根据参数 count 的值,移除列表中 count 个与参数 value 相等的元素;
    count >0 ,从列表的左侧向右开始移除;
   count < 0 从列表的尾部开始移除;
   count = 0移除表中所有与 value 相等的值;
返回值:移除的元素个数;

127.0.0.1:6379> lpush zi a a b d a e a
(integer) 7
127.0.0.1:6379> lrem zi 2 a
(integer) 2
127.0.0.1:6379> lrange zi 0 -1
1) "e"
2) "d"
3) "b"
4) "a"
5) "a"



9.ltrim key startIndex endIndex

功能:截取key的指定下标区间的元素,并且赋值给key;
   下标从0开始,一直到列表长度-1;
   下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推;startIndex 和 endIndex 超出范围不会报错;
返回值:执行成功返回ok;

127.0.0.1:6379> lpush list 1 2 3 4 5
(integer) 5
127.0.0.1:6379> ltrim list 1 3
OK
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"



10.lset key index value

功能:将列表 key 下标为 index 的元素的值设置为 value;
返回值:设置成功返回ok ;
    key 不存在或者 index 超出范围返回错误信息;

127.0.0.1:6379> lpush list a b
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "a"
127.0.0.1:6379> lset list 1 k
OK
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "k"



11.linsert key before/after pivot value

功能:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置;
   key 不存在或者pivot不在列表中,不执行任何操作;

返回值:命令执行成功,返回新列表的长度;
    没有找到pivot返回 -1, key不存在返回0;

127.0.0.1:6379> linsert list before k c
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "b"
2) "c"
3) "k"
127.0.0.1:6379> linsert list before p c
(integer) -1


写在最后

以上关于 Redis 中 List 类型数据结构的具体内容,后续如果有时间的话我也将持续更新,如果有错误或者是哪里不足的地方,欢迎各位大大提出宝贵的意见呀~