Redis(九)list列表类型

这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

列表的功能十分独特,他可以在一个键下面存储N个可以重复的元素。其实就是把string类型右边的值换成了多个元素组成的列表。

一:字符串结构:

由于列表的可重复性,下面的结构实例中,第一个元素和最后一个元素可以重复。

[
    "user":[
        "camellia1",
        "camellia2",
        "camellia3"
    ]
]
复制代码

二:hash散列类型相关操作命令(PHP+linux)

1:Linux命令使用

(1):rpush向列表添加值之后,会返回当前的长度(包含元素个数)。(这里是右侧添加,左侧添加同理)

rpush list-key camellia1                     // 返回(integer) 1
rpush list-key camellia2                     // 返回(integer) 2
rpush list-key camellia3                     // 返回(integer) 3
复制代码

(2):lrange 获取一定范围内的值,成功返回 范围内所有元素。这里的0代表起始位置,-1代表结束位置。从0到-1,代表取出所有的值。

lrange list-key 0 -1
复制代码

输出:

1) "camellia1"
2) "camellia2"
3) "camellia3"
复制代码

(3):lindex获取列表里面的 某个元素。

lindex list-key 1                   // 返回"camellia2"
复制代码

(4):lpop列表左侧删除一个元素,成功返回 被删除的元素

hdel hash-key camellia1             // 返回(integer) 1
复制代码

2:PHP使用:

(1):添加,成功返回自增主键(左右添加一致)

$r = $redis->rpush("list-key","camellia1"); // 从列表右侧添加一个值item
    var_dump($r);// 此时,列表中有一个元素,返回int 1
 
    $res = $redis->rpush("list-key","camellia2"); // 含有2个元素,返回int 2
    var_dump($res);
复制代码

(2):我们获取全部的值

$result = $redis->lrange("list-key", 0 ,-1);
var_dump($result);  // 输出:array(2) { [0]=> string(9) "camellia1" [1]=> string(9) "camellia2" }
复制代码

(3):获取键对应的值。

$result = $redis->lindex("list-key",1);
var_dump($result);              // 返回camellia2
复制代码

(4):lpop从左侧删除一个元素,或者使用rpop从右侧删除一个元素,成功返回 被删除元素的值

r=r =

redis->lpop("list-key");
var_dump($r); // 返回被删除的值camellia1

三:基于redis列表list类型的简单队列实现

<?php
    $redis = new Redis();
    $redis->connect("127.0.0.1", 6379);
    // 进队列
    // 随机数一个id,模仿用户id
    $userId = mt_rand(000000, 999999);
    $redis->rpush("QUEUE_NAME",json_encode(["user_id" => $userId]));
    // 随机数一个id,模仿用户id
    $userId = mt_rand(000000, 999999);
    $redis->rpush("QUEUE_NAME",json_encode(["user_id" => $userId]));
    // 随机数一个id,模仿用户id
    $userId = mt_rand(000000, 999999);
    $redis->rpush("QUEUE_NAME",json_encode(["user_id" => $userId]));
    echo "数据进队列成功 
";
    echo "<br>";
    // 查看队列
    $res = $redis->lrange("QUEUE_NAME", 0, 1000);
    echo "当前队列数据为: 
";
    print_r($res);
    echo "----------------------------- 
";
    echo "<br>";
    // 出队列
    $redis->lpop("QUEUE_NAME");
    echo "数据出队列成功 
";
    echo "<br>";
    // 查看队列
    $res = $redis->lrange("QUEUE_NAME", 0, 1000);
    echo "当前队列数据为: 
";
    print_r($res);
?>
复制代码

四:其他常用redis List命令

序号

命令及描述

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

以上基本上是我看的redis List列表类型的基本内容,有不足的地方,还请大佬指出。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客
guanchao.site

欢迎访问小程序:

在这里插入图片描述