• 技术文章 >数据库 >Redis

    实战:通过示例代码聊聊Redis中的list命令

    青灯夜游青灯夜游2021-12-13 09:58:20转载150
    本篇文章给大家介绍一下Redis中的list命令,通过代码示例了解一下list命令的用法,希望对大家有所帮助!

    list的数据结构

    List类型是一个双端链表的结构,容量是2的32次方减1个元素,即40多亿个;其主要功能有push、pop、获取元素等;一般应用在栈、队列、消息队列等场景。【相关推荐:Redis视频教程

    Redis list命令实战

    [l/r]push-左/右添加元素

    语法:[l/r]push key value [value ...]

    以头插或尾插方式插入指定key队列中一个或多个元素

    127.0.0.1:6379> lpush pushkey 1 2 3
    (integer) 3
    127.0.0.1:6379> lpush pushkey 4
    (integer) 4
    127.0.0.1:6379> rpush pushkey 5
    (integer) 5
    127.0.0.1:6379> lrange pushkey 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    5) "5"

    lrange-查询范围元素

    语法: lrange key start stop

    获取列表指定范围内的元素

    127.0.0.1:6379> lpush products 1 2 3
    (integer) 3
    127.0.0.1:6379> lpush products 4 5 6
    (integer) 6
    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"

    linsert-在某元素前后插入元素

    语法:linsert key BEFORE|AFTER pivot value

    在列表的元素前或者后插入元素

    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    127.0.0.1:6379> linsert products before 5 a
    (integer) 7
    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "5"
    4) "4"
    5) "3"
    6) "2"
    7) "1"
    127.0.0.1:6379> linsert products after a b
    (integer) 8
    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "b"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"

    llen-获取长度

    语法:llen key

    获取列表长度

    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "b"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"
    127.0.0.1:6379> llen products
    (integer) 8

    lindex-根据下标获取元素

    语法:lindex key index

    通过索引获取列表中的元素

    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "b"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"
    127.0.0.1:6379> lindex products 2
    "b"

    lset-根据下标设置值

    语法:lset key index value

    通过索引设置列表元素的值

    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "b"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"
    127.0.0.1:6379> lset products 2 B
    OK
    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "B"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"

    ltrim-截取元素

    语法:ltrim key start end

    截取队列指定区间的元素,其余元素都删除

    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "B"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"
    127.0.0.1:6379> ltrim products 0 3
    OK
    127.0.0.1:6379> lrange products 0 -1
    1) "6"
    2) "a"
    3) "B"
    4) "5"

    lrem-移除元素

    语法:lrem key count value

    移除列表元素

    127.0.0.1:6379> lpush test a 1 a 2 a 3 a 4  5 6
    (integer) 10
    127.0.0.1:6379> lrange  test 0 -1
     1) "6"
     2) "5"
     3) "4"
     4) "a"
     5) "3"
     6) "a"
     7) "2"
     8) "a"
     9) "1"
    10) "a"
    127.0.0.1:6379> lrem test 3 a
    (integer) 4
    127.0.0.1:6379> lrange  test 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    7) "a"

    [l/r]pop-从左/右弹出元素

    语法:[l/r]pop key

    从队列的头或尾弹出节点元素(返回该元素并从队列中删除)

    127.0.0.1:6379> lrange  test 0 -1
    1) "6"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    127.0.0.1:6379> lpop test
    "6"
    127.0.0.1:6379> lrange  test 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> rpop test
    "1"
    127.0.0.1:6379> lrange  test 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"

    rpoplpush-移除右元素添加到另一列表左

    语法:rpoplpush source destination

    移除列表的最后一个元素(右),并将该元素添加到另一个列表(左)并返回

    127.0.0.1:6379> lpush src 1 2 3
    (integer) 3
    127.0.0.1:6379> lrange src 0 -1
    1) "3"
    2) "2"
    3) "1"
    127.0.0.1:6379> lpush dst a b c
    (integer) 3
    127.0.0.1:6379> lrange dst 0 -1
    1) "c"
    2) "b"
    3) "a"
    127.0.0.1:6379> rpoplpush src dst
    "1"
    127.0.0.1:6379> lrange src 0 -1
    1) "3"
    2) "2"
    127.0.0.1:6379> lrange dst 0 -1
    1) "1"
    2) "c"
    3) "b"
    4) "a"

    b[l/r]pop-阻塞弹出左/右一个元素

    语法: b[l/r]pop key1 [key2 ...] timeout

    移出并获取列表的第一个或最后一个元素, 如果列表没有元素会阻塞列表直到等待超时发现可弹出元素为止。

    127.0.0.1:6379> lpush list1 1 2
    (integer) 2
    127.0.0.1:6379> lpush list2 a b
    (integer) 2
    127.0.0.1:6379> lrange list1 0 -1
    1) "2"
    2) "1"
    127.0.0.1:6379> lrange list2 0 -1
    1) "b"
    2) "a"
    127.0.0.1:6379> blpop list1 list2 10
    1) "list1"   #弹出元素所属的列表
    2) "2"       #弹出元素所属的值
    127.0.0.1:6379> blpop list1 list2 10
    1) "list1"
    2) "1"
    127.0.0.1:6379> blpop list1 list2 10
    1) "list2"
    2) "b"
    127.0.0.1:6379> blpop list1 list2 10
    1) "list2"
    2) "a"
    127.0.0.1:6379> blpop list1 list2 10
    (nil)
    (10.08s)  # 列表为空的时候,就等待超时10秒

    更多编程相关知识,请访问:编程入门!!

    以上就是实战:通过示例代码聊聊Redis中的list命令的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:掘金社区,如有侵犯,请联系admin@php.cn删除
    专题推荐:Redis list命令
    上一篇:浅谈Redis中消息队列和延时消息队列的实现方法 下一篇:聊聊Redis6中的主从复制架构,看看它有何特点!

    相关文章推荐

    • Redis如何实现分布式锁?聊聊实现方法• 深入浅析Redis中的位图(bitmap)• Laravel中用Observer事件致Redis队列异常问题• 分享一些好用Redis可视化工具• 整理一些常见Redis数据结构(总结)• 聊聊Redis数据结构中的String类型

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网