踩坑PhpRedis的lrem问题

框架使用phpredis,发现lrem的参数问题,
正常使用是lrem是key,count,value
在pipeline中使用lrem是key,value,count正好反一下

按理说应该是一致的

$this->redis = Redis::connection('redis');
//普通使用
$this->redis->lrem($key, 0,$element); // 删除匹配到的所有元素
//pipeline使用
$results = $this->redis->pipeline(function ($pipe) use ($key, $data, $redisSet) {
    $pipe->lrem($key,$element, 0); // 删除匹配到的所有元素
});

踩坑PhpRedis的lrem问题

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

不说都没注意过。特意去查了一下。解释如下: Redis中的LREM命令是用来删除列表(key)中指定数量(count)的与指定元素(value)相等的元素。

在正常情况下,LREM命令的参数顺序是key、count、value。这是因为在普通的情况下,我们通常需要根据key指定列表,根据value指定要删除的元素,根据count指定要删除的元素的数量。

但是,在使用Pipeline(管道)批量执行多个Redis命令时,为了提高执行效率,Redis将LREM命令的顺序进行了调整,参数顺序变为key、value、count。这是因为在Pipeline中,多个命令会被一次性发送给Redis服务器执行,通过调整参数顺序,可以减少命令解析和传输所需的时间,提高整体性能。

需要注意的是,虽然在Pipeline中参数顺序发生了变化,但参数的含义和作用并没有改变,只是为了优化性能而调整了顺序。所以,在使用Pipeline时,要根据具体的需求和命令语法来正确地设置参数的值。

5个月前 评论

this->redis = Redis::connection('redis') 這個是PhpRedisConnection 類對象 如果驅動是phpredis 用pipeline 時 $pile 是原生Redis類對象
框架類和原生Redis類的方法參數沒有一致

5个月前 评论

predis有这个问题么

5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!