• 中文
    • English
  • 注册
  • 查看作者
    • 6-3 07-Redis的数据结构之list

      一. List

      List有以下特点:

      • list是一种按照插入顺序排序的字符串链表

      • 可以在list的左侧(头部)或者list右侧(尾部)添加新的元素

      • 在插入元素的时候,如果一个键不存在,就会为这个键创建一个新的list

      • 如果list中的所有元素都被移除了,那么该键也会从数据库删除

      • 在list头部和尾部插入元素效率高,在中间插入元素效率低

      • list可用于消息队列

      二. 存储数据的方式

      1. ArrayList 使用数组的方式,查询速度快但是增加和删除元素速度慢

      2. LinkedList使用双向链接方式,增加和删除元素速度快

      3. 双向链表中增加数据

      4. 双向链表中删除数据

      三. List命令

      List常用的命令如下:

      • lpush:左侧添加,返回元素list的元素总个数

      jia:0>lpush list 1 2 3
      "3"
      
      jia:0>lpush list 4 5 6 
      "6"
      • rpush:右侧添加,返回元素list的元素总个数

      jia:0>rpush list 7 8 9
      "9"
      • lrange:查看列表,以 -1 表示列表的最后一个元素(也就是说, 可以查看该list的所有元素), -2 表示列表的倒数第二个元素

      jia:0>lrange list 0 100
       1)  "6"
       2)  "5"
       3)  "4"
       4)  "3"
       5)  "2"
       6)  "1"
       7)  "7"
       8)  "8"
       9)  "9"
      jia:0>lrange list 0 -1
       1)  "6"
       2)  "5"
       3)  "4"
       4)  "3"
       5)  "2"
       6)  "1"
       7)  "7"
       8)  "8"
       9)  "9"
      jia:0>lrange list 0 -2
       1)  "6"
       2)  "5"
       3)  "4"
       4)  "3"
       5)  "2"
       6)  "1"
       7)  "7"
       8)  "8"
      • lpop:左侧弹出(删除)

      jia:0>lpop list 
      "6"
      • rpop:右侧弹出(删除)

      jia:0>rpop list 
      "9"
      
      jia:0>lrange list 0 100
       1)  "5"
       2)  "4"
       3)  "3"
       4)  "2"
       5)  "1"
       6)  "7"
       7)  "8"
      • llen:获取列表元素个数

      jia:0>llen list
      "7"
      • lpushx:当某个list存在的时候,才在其左侧添加值

      jia:0>lpushx list a
      "8"
      
      jia:0>lpushx list2 a
      "0"
      • rpushx:当某个list存在的时候,才在其右侧添加值

      jia:0>rpushx list b
      "9"
      
      jia:0>rpushx list2 b
      "0"
      • lrem:删除count个值为value的元素

        • 如果count  > 0,则从头到尾遍历,删除list中count个值为value的元素

        • 如果count  < 0,则从尾到头遍历,删除list中count个值为value的元素

        • 如果count  = 0,则删除list中所有值为value的元素

      jia:0>lpush vals a b c c d c
      "6"
      
      jia:0>lpush vals2 a b c c d c
      "6"
      
      jia:0>lpush vals3 a b c c d c
      "6"
      
      jia:0>lrange vals 0 100
       1)  "c"
       2)  "d"
       3)  "c"
       4)  "c"
       5)  "b"
       6)  "a"
      jia:0>lrem vals 2 c
      "2"
      
      jia:0>lrange vals 0 100
       1)  "d"
       2)  "c"
       3)  "b"
       4)  "a"
       
       jia:0>lrange vals2 0 100
       1)  "c"
       2)  "d"
       3)  "c"
       4)  "c"
       5)  "b"
       6)  "a"
       
       jia:0>lrem vals2 -2 c
      "2"
      
      jia:0>lrange vals2 0 100
       1)  "c"
       2)  "d"
       3)  "b"
       4)  "a"
       
       jia:0>lrange vals3 0 100
       1)  "c"
       2)  "d"
       3)  "c"
       4)  "c"
       5)  "b"
       6)  "a"
      jia:0>lrem vals3 c
      "ERR wrong number of arguments for 'lrem' command"
      
      jia:0>lrem vals3 0 c
      "3"
      
      jia:0>lrange vals3 0 100
       1)  "d"
       2)  "b"
       3)  "a"
      jia:0>
      • lset:替换某个下标的的值,下标从左到右,从0开始

      jia:0>lpush list a b c 
      "3"
      
      jia:0>lrange list 0 100
       1)  "c"
       2)  "b"
       3)  "a"
      jia:0>lset list 2 jia
      "OK"
      
      jia:0>lrange list 0 100
       1)  "c"
       2)  "b"
       3)  "jia"
      • linsert:在某个元素前面或者后面插入元素

      jia:0>del list
      "1"
      
      jia:0>lpush list 1 2 3
      "3"
      
      jia:0>lrange list 0 100
       1)  "3"
       2)  "2"
       3)  "1"
      jia:0>linsert list before 2 a
      "4"
      
      jia:0>linsert list after 2 b
      "5"
      
      jia:0>lrange list 0 100
       1)  "3"
       2)  "a"
       3)  "2"
       4)  "b"
       5)  "1"
      • rpoplpush:将一个列表的数据左侧数据取出后,存入另一个列表中

      jia:0>lpush list a b c
      "3"
      
      jia:0>lpush list2 c d e
      "3"
      
      jia:0>rpoplpush list list2
      "a"
      
      jia:0>lrange list 0 -1
       1)  "c"
       2)  "b"
      jia:0>lrange list2 0 -1
       1)  "a"
       2)  "e"
       3)  "d"
       4)  "c"

      四. 总结

      List常用的命令如下:

      • lpush:左侧添加,返回元素list的元素总个数

      • rpush:右侧添加,返回元素list的元素总个数

      • lrange:查看列表,以 -1 表示列表的最后一个元素(也就是说, 可以查看该list的所有元素), -2 表示列表的倒数第二个元素

      • lpop:左侧弹出(删除)

      • rpop:右侧弹出(删除)

      • llen:获取列表元素个数

      • lpushx:当某个list存在的时候,才在其左侧添加值

      • rpushx:当某个list存在的时候,才在其右侧添加值

      • lrem:删除count个值为value的元素

        • 如果count  > 0,则从头到尾遍历,删除list中count个值为value的元素

        • 如果count  < 0,则从尾到头遍历,删除list中count个值为value的元素

        • 如果count  = 0,则删除list中所有值为value的元素

      • lset:替换某个下标的的值,下标从左到右,从0开始

      • linsert:在某个元素前面或者后面插入元素

      • rpoplpush:将一个列表的数据左侧数据取出后,存入另一个列表中

      山东·日照
    • 0
    • 2
    • 0
    • 1.2k
    • zjmarinaKing.Qian

      请登录之后再进行评论

      登录
    • 0
      张甲49站长
      @1121427423 [s-25]
    • 1
      6666
    • 赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: