• 中文
    • 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.4k
  • zjmarinaKing.Qian

    请登录之后再进行评论

    登录
  • 0
    张甲49站长
    @1121427423 [s-25]
  • 1
    6666
  • 单栏布局 侧栏位置: