redis-将多个值添加到列表并获取多个值

时间:2018-09-05 11:04:57

标签: php redis

我不知道list是否是正确的数据类型?

我需要在列表中添加很多项目,然后我必须提取所有项目。.提取项目后,必须将其删除

$list = 'the:list';
$redis
    ->multi()
    ->lRange($list, 0, -1)
    ->lTrim($list, -1, 0)
    ->exec();

上面的代码获取项目,但是获取项目后不删除它们吗?我在做什么错了?

2 个答案:

答案 0 :(得分:1)

一旦获取数据,就可以使密钥失效。

例如: https://redis.io/commands/expire

答案 1 :(得分:0)

如果要按顺序读回它们,可以使用LPOPRPOP将其从列表中删除并返回。

如果您需要随机读取它们,则可以使用SET而不是LIST数据类型,则可以使用SPOP

更新 根据您对原始问题所做的一些评论,听起来您想读出整个列表然后将其删除,但是您担心在读取和删除操作之间插入项目吗?

在这种情况下,请使用redis transaction。在键上使用LRange,后跟DEL。正如您从文档中看到的那样,该事务确保了两个操作之间的列表都不会受到影响,因此对它的任何新添加都将最终重新创建列表。

  

事务中的所有命令都被序列化并执行   按顺序。永远不会发生另一个人发出的请求   在执行Redis的过程中为客户提供服务   交易。这样可以确保命令作为   单个隔离操作。

或者换句话说,将饰条替换为删除项,就可以了。