• Redis的List类型


    Redis 列表命令

    下表列出了列表相关的基本命令:

    序号命令及描述
    1 BLPOP key1 [key2 ] timeout 
    移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    2 BRPOP key1 [key2 ] timeout 
    移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    3 BRPOPLPUSH source destination timeout 
    从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    4 LINDEX key index 
    通过索引获取列表中的元素
    5 LINSERT key BEFORE|AFTER pivot value 
    在列表的元素前或者后插入元素
    6 LLEN key 
    获取列表长度
    7 LPOP key 
    移出并获取列表的第一个元素
    8 LPUSH key value1 [value2] 
    将一个或多个值插入到列表头部
    9 LPUSHX key value 
    将一个值插入到已存在的列表头部
    10 LRANGE key start stop 
    获取列表指定范围内的元素
    11 LREM key count value 
    移除列表元素
    12 LSET key index value 
    通过索引设置列表元素的值
    13 LTRIM key start stop 
    对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
    14 RPOP key 
    移除列表的最后一个元素,返回值为移除的元素。
    15 RPOPLPUSH source destination 
    移除列表的最后一个元素,并将该元素添加到另一个列表并返回
    16 RPUSH key value1 [value2] 
    在列表中添加一个或多个值
    17 RPUSHX key value 
    为已存在的列表添加值

     示例如下:

    [root@iZbp143t3oxhfc3ar7jey0Z ~]# redis-cli
    127.0.0.1:6379> lpush list1 a b c d e
    (integer) 5
    127.0.0.1:6379> LRANGE list1 0 5
    1) "e"
    2) "d"
    3) "c"
    4) "b"
    5) "a"
    127.0.0.1:6379> LRANGE list1 0 7
    1) "e"
    2) "d"
    3) "c"
    4) "b"
    5) "a"
    127.0.0.1:6379> RPUSH list2 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> LRANGE list2 0 7
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "e"
    2) "d"
    3) "c"
    4) "b"
    5) "a"
    127.0.0.1:6379> LINDEX list1 0
    "e"
    127.0.0.1:6379> LLEN list1
    (integer) 5
    127.0.0.1:6379> LPOP list1
    "e"
    127.0.0.1:6379> rpop list1
    "a"
    127.0.0.1:6379> LPOP list2
    "1"
    127.0.0.1:6379> rpop list2
    "5"
    127.0.0.1:6379> BLPOP list2 5
    1) "list2"
    2) "2"
    127.0.0.1:6379> LRANGE list2 0 5
    1) "3"
    2) "4"
    127.0.0.1:6379>

    业务场景
    list 类型数据扩展操作
    微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息
    如果取消点赞,移除对应好友信息

     

     演示如下:

    [root@iZbp143t3oxhfc3ar7jey0Z ~]# redis-cli
    127.0.0.1:6379> RPUSH 001 a b c d e f
    (integer) 6
    127.0.0.1:6379> LRANGE 001 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    127.0.0.1:6379> LREM 001 1 d
    (integer) 1
    127.0.0.1:6379> LRANGE 001 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "e"
    5) "f"
    127.0.0.1:6379>

    业务场景
    twitter、新浪微博、腾讯微博中个人用户的关注列表需要按照用户的关注顺序进行展示,粉丝列表需要将最
    近关注的粉丝列在前面

    127.0.0.1:6379> lPUSH 001 o
    (integer) 8
    127.0.0.1:6379> LRANGE 001 0 -1
    1) "o"
    2) "a"
    3) "b"
    4) "c"
    5) "e"
    6) "f"
    7) "q"
    8) "o"
    127.0.0.1:6379>

    list 类型应用场景
    解决方案

    •  依赖list的数据具有顺序的特征对信息进行管理
    •  使用队列模型解决多路信息汇总合并的问题
    • 使用栈模型解决最新消息的问题

    list 类型数据操作注意事项

    •  list中保存的数据都是string类型的,数据总容量是有限的,最多2 32 - 1 个元素 (4294967295)。
    •  list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
    •  获取全部数据操作结束索引设置为-1
    •  list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载
  • 相关阅读:
    【并发】实现内存可见的两种方法比较:加锁和volatile变量
    HTTP2资料汇总
    微服务框架servicecomb
    【并发】使用synchronized获取互斥锁的几点说明
    【并发】通过同步保证内存可见性
    数据最终一致性方案设计
    Oracle中Constraint的状态参数initially与deferrable
    ORACLE GROUPING函数的使用
    Oracle INSERT WITH CHECK OPTION的用法
    ORACLE VERSIONS 用法
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12503474.html
Copyright © 2020-2023  润新知