我不知道list
是否是正确的数据类型?
我需要在列表中添加很多项目,然后我必须提取所有项目。.提取项目后,必须将其删除
$list = 'the:list';
$redis
->multi()
->lRange($list, 0, -1)
->lTrim($list, -1, 0)
->exec();
上面的代码获取项目,但是获取项目后不删除它们吗?我在做什么错了?
答案 0 :(得分:1)
一旦获取数据,就可以使密钥失效。
答案 1 :(得分:0)
如果要按顺序读回它们,可以使用LPOP或RPOP将其从列表中删除并返回。
如果您需要随机读取它们,则可以使用SET而不是LIST数据类型,则可以使用SPOP
更新 根据您对原始问题所做的一些评论,听起来您想读出整个列表然后将其删除,但是您担心在读取和删除操作之间插入项目吗?
在这种情况下,请使用redis transaction。在键上使用LRange,后跟DEL。正如您从文档中看到的那样,该事务确保了两个操作之间的列表都不会受到影响,因此对它的任何新添加都将最终重新创建列表。
事务中的所有命令都被序列化并执行 按顺序。永远不会发生另一个人发出的请求 在执行Redis的过程中为客户提供服务 交易。这样可以确保命令作为 单个隔离操作。
或者换句话说,将饰条替换为删除项,就可以了。