欢迎投稿

今日深度:

四、Redis基础命令--列表,redis基础--列表

四、Redis基础命令--列表,redis基础--列表


1、列表类型内部是使用双向链表(double linked list)实现的,所以想两端添加元素特快,时间复杂度是O(1),获取越接近两端的元素速度越快。不过代价是通过索引访问元素的速度会比较慢。
2、每个键最多能容纳的字段数量与列表相同都是 2^32 - 1 个元素。内部用来存储字段数量的变量类型应该是Integer,因为一个整形是4个字节,每个字节8位,刚好32位,最大数字就是 2^32-1 个(包括0)。
2.1、索引是从0开始
3、LPUSH key value 在队列的左边添加元素,返回队列元素的长度。           127.0.0.1:6379> lpush list 123
               (integer) 3
          127.0.0.1:6379> lpush list 123
               (integer) 4
     一次性添加多个元素      127.0.0.1:6379> LPUSH list 11 12 13
4、LRANGE key start end 返回队列中[start ,end] 之间的元素,和素组一样从0开始,包含end位。      如果start > end 则返回空列表           127.0.0.1:6379> LRANGE list 3  2
               (empty list or set)
     如果end > LLEN key 则返回所有列表           127.0.0.1:6379> LLEN list                (integer) 4
          127.0.0.1:6379> LRANGE list 0 8
               1) "4"
               2) "3"
               3) "2"
               4) "1"
     如果end=-1  LRANGE key 0 -1 返回所有列表          127.0.0.1:6379> LRANGE list 0 -1
               1) "4"
               2) "3"
               3) "2"
               4) "1"
     倒序取数据,start end 都小于0           127.0.0.1:6379> LRANGE list 0 -1
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
         127.0.0.1:6379> LRANGE list -1 -1
               1) "1"
          127.0.0.1:6379> LRANGE list -2 -1
               1) "2"
               2) "1"

5、LLEN key 获取列表的长度           127.0.0.1:6379> LLEN list                (integer) 4
6、RPUSH key value 在队列的右边添加元素,返回元素长度           127.0.0.1:6379> RPUSH list -1
               (integer) 5
127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
                5) "-1"
7、LPOP/RPOP 弹出左/右边的元素
127.0.0.1:6379> LPOP list      "4" 127.0.0.1:6379> LRANGE list 0 -1         1) "3"
2) "2"
3) "1"
4) "-1"
127.0.0.1:6379> RPOP list           "-1" 127.0.0.1:6379> LRANGE list 0 -1
1) "3"
2) "2"
                3) "1"
8、LREM key count value 删除 count 个值为value的元素           当count > 0 从左边删除count个值value的元素           当count<0  从右边删除 |count|  个值value的元素           当count = 0 删除所有值为 value 的元素           127.0.0.1:6379> LRANGE list 0 -1
1) "1"
2) "1"
3) "1"
4) "1"
5) "1"
6) "3"
7) "2"
127.0.0.1:6379> LREM list 0 1      (integer) 5 127.0.0.1:6379> LRANGE list 0 -1
                 1) "3"                  2) "2"
9、LSET key index value 在索引index处添加值value           127.0.0.1:6379> LRANGE list 0 -1
1) "13"
2) "12"
3) "11"
4) "7"
5) "6"
6) "5"
7) "4"
8) "3"
9) "2"
               10) "1"           127.0.0.1:6379> LSET list  3 8 9 10 不能同时设置多个值
          (error) ERR wrong number of arguments for 'lset' command   127.0.0.1:6379> LSET list  3 8             OK   127.0.0.1:6379> LRANGE list 0 -1
1) "13"
2) "12"
3) "11"
4) "8"
5) "6"
6) "5"
7) "4"
8) "3"
9) "2"
               10) "1"
10、LINDEX list 0根据索引获取值           127.0.0.1:6379> LINDEX list 0                "13"
12、LTRIM key start end 移掉除(start,end)之外的数据。保留[start,end]数据,包括start,end      127.0.0.1:6379> LRANGE list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
     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"
13、LINSET key BEFORE | AFTER pivot value 插入数据
127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379> LINSERT list before 4 5      (integer) 4 127.0.0.1:6379> LRANGE list 0 -1
1) "5"
2) "4"
3) "3"
               4) "2"
127.0.0.1:6379> LINSERT list after 2 0      (integer) 5 127.0.0.1:6379> LRANGE list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
                5) "0"      如果有多个相同的pivot,则从左边数第一个开始           127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "5"
3) "4"
4) "3"
5) "2"
6) "0"
127.0.0.1:6379> LINSERT list after 4 3           (integer) 7 127.0.0.1:6379> LRANGE list 0 -1         1) "4"
2) "3"
3) "5"
4) "4"
5) "3"
6) "2"
                7) "0"         BEFORE 也是从左边第一个开始
127.0.0.1:6379> LINSERT list Before 3 9      (integer) 8 127.0.0.1:6379> LRANGE list 0 -1
1) "4"
2) "9"
3) "3"
4) "5"
5) "4"
6) "3"
7) "2"
               8) "0"
14、RPOPLPUSH source destination --列表类型,将元素从一个列表转移到另一个列表          从source右边弹出一个元素,再LPUSH到destination进去           RPOPLPUSH source destination      内部实现:           def rpoplpush( source , destination)                value = RPOP source                LPUSH destination value                return value

15、汇总            A、列表可以作为栈使用,LPUSH/LPOP 或者 RPUSH/RPOP      B、作为list使用,LPUSH/RPOP 或者 RPUSH/LPOP













www.htsjk.Com true http://www.htsjk.com/shujukunews/6102.html NewsArticle 四、Redis基础命令--列表,redis基础--列表 1、列表类型内部是使用双向链表(double linked list)实现的,所以想两端添加元素特快,时间复杂度是O(1),获取越接近两端的元素速度越快。...
评论暂时关闭