美文网首页
Redis 列表-list

Redis 列表-list

作者: 不留余白 | 来源:发表于2020-07-26 18:50 被阅读0次

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

//向列表中压入数据
$redis->lPush('list','1','2','3');
//获取列表长度
$result=$redis->lLen('list');
//弹出列表中第一个元素(先入后出)
$result=$redis->lpop('list');//3
//弹出列表中最后一个元素(先入先出)
$result=$redis->rpop('list');//1
//阻塞式弹出列表中第一个元素,如果没有元素则等待1秒
while($result = $redis->blPop('list',1)){
    var_export($result);//'3''2''1'
}
//阻塞式弹出列表中最后一个元素,如果没有元素则等待1秒
while($result = $redis->brPop('list',1)){
    var_export($result);
}
//通过索引获取列表中的元素(先入后出)
$redis->lPush('list','1','2','3');
$r1=$redis->lIndex('list',0);
$r2=$redis->lIndex('list',1);
$r3=$redis->lIndex('list',2);
var_export($r1);//3
var_export($r2);//2
var_export($r3);//1
//将一个元素插入到表头
$redis->lPushx('list','999');

while ($r=$redis->lPop('list')){
    var_export($r);//999''3''2''1'
}
//获取指定下标范围内的元素
$r=$redis->lRange('list',0,100);
var_export($r);
//array (
//  0 => '3',
//  1 => '2',
//  2 => '1',
//)
//移除列表元素
$r=$redis->lRem('list',3,1);//1
$redis->lPush('list','1','2','3');

//通过下标设置元素的值,如果下标不存在则返回false
$r=$redis->lset('list',10,100);//false
$r=$redis->lset('list',2,100);//true
//修剪队列,只保留开始下标起指定长度的元素
$r=$redis->lTrim('list',1,3);
while($r=$redis->lPop('list')){
    var_export($r);//'5''4''3'
}
$redis->lPush('list','1','2','3','4','5','6');
//移除列表的最后一个元素,并将该元素添加到另一个列表并返回
$r=$redis->rpoplpush('list','list2');
while($r=$redis->lPop('list2')){
    var_export($r);//1
}

//移除列表的最后一个元素,并将该元素添加到另一个列表并返回,并阻塞等待1秒
$r=$redis->brpoplpush('list','list2',1);
while($r=$redis->lPop('list2')){
    var_export($r);//2
}
  • 适用场景

    1. 消息队列
        list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。不过我不推荐在实战中这么使用,因为现在已经有Kafka、NSQ、RabbitMQ等成熟的消息队列了,它们的功能已经很完善了,除非是为了更深入地理解消息队列,不然我觉得没必要去重复造轮子。

    2. 排行榜
        list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名、斗鱼年终盛典主播排名等,下图是酷狗音乐“K歌擂台赛”的昨日打擂金曲排行榜,每日计算一次,存储在list类型中,接口访问时,通过page和size分页获取打擂金曲。(打个小广告,酷狗音乐“K歌擂台赛”每天都能产生一批优质翻唱作品,对普通人优质歌声有兴趣的朋友不妨来听听)。

相关文章

  • Redis学习之路(4)命令-list(列表)、set(集合)、

    Redis 数据类型 Redis支持5种数据类型: 本段介绍一下list(列表)。 Redis 列表(List) ...

  • Redis' lists

    Redis列表基本操作命令 Redis list底层结构 Redis list由链表来实现。在Redis中链表的应...

  • python操作redis

    连接redis服务 Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List)...

  • redis list底层数据结构

    redis list数据结构  redis list数据结构底层采用压缩列表ziplist或linkedlist两...

  • 摸透原理|一文带你了解 Redis 列表底层的实现方式

    Redis List 命令 Redis List 列表支持的相关指令比较多,比如单个元素增加、删除操作,也支持多个...

  • Redis 列表-list

    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列...

  • Redis 列表(List)

    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表...

  • Redis列表LIST

    列表特点: 允许重复的值 key区分大小写 LPUSH 插入表头 将一个或多个值 value 插入到列表 key ...

  • Redis数据库的简单讲解

    1、Redis的数据结构字符串(String)字符串列表(list)有序字符串列表(sorted list)哈希(...

  • redis

    类型常量 对象的名称REDIS_STRING 字符串对象REDIS_LIST 列表对象REDIS_H...

网友评论

      本文标题:Redis 列表-list

      本文链接:https://www.haomeiwen.com/subject/ynkglktx.html