踩坑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); // 删除匹配到的所有元素
});
本作品采用《CC 协议》,转载必须注明作者和本文链接
不说都没注意过。特意去查了一下。解释如下: Redis中的LREM命令是用来删除列表(key)中指定数量(count)的与指定元素(value)相等的元素。
在正常情况下,LREM命令的参数顺序是key、count、value。这是因为在普通的情况下,我们通常需要根据key指定列表,根据value指定要删除的元素,根据count指定要删除的元素的数量。
但是,在使用Pipeline(管道)批量执行多个Redis命令时,为了提高执行效率,Redis将LREM命令的顺序进行了调整,参数顺序变为key、value、count。这是因为在Pipeline中,多个命令会被一次性发送给Redis服务器执行,通过调整参数顺序,可以减少命令解析和传输所需的时间,提高整体性能。
需要注意的是,虽然在Pipeline中参数顺序发生了变化,但参数的含义和作用并没有改变,只是为了优化性能而调整了顺序。所以,在使用Pipeline时,要根据具体的需求和命令语法来正确地设置参数的值。
this->redis = Redis::connection('redis') 這個是PhpRedisConnection 類對象 如果驅動是phpredis 用pipeline 時 $pile 是原生Redis類對象
框架類和原生Redis類的方法參數沒有一致
你这是什么字体呀
predis有这个问题么