REDIS-pipeline 管道开启后可以使用zrank判断键是否存在吗?

<?php 
$redis->pipeline();
            if(count($productIds) > 1){
                foreach($productIds as $key=>$productId)
                {
                    foreach($productIds as $k => $memberId){
                        if($productId == $memberId){
                            continue;
                        }
                        //成员为每个商品同时添加购物车的商品, 分数为同时添加到购物车的次数
                        if($redis->ZRANK(SELF::PRODUCT_RALATION_KEY_PREFIX.$productId,$memberId) !== FALSE){
                            //已存在, 相关性分数 +1
                            $redis->ZINCRBY(SELF::PRODUCT_RALATION_KEY_PREFIX.$productId,1,$memberId);
                        }else{
                            //不存在, 创建相关性 member
                            $redis->ZADD(SELF::PRODUCT_RALATION_KEY_PREFIX.$productId,1,$memberId);
                        }
                    }
                }
            }
$redis->exec();

先上代码,现在在做一个商品关联性的数据保存到redis,当两个商品同时出现在订单时,就给每个商品创建zset,后序两件商品再同时出现就要进行自增操作,这样的逻辑用pipeline可行吗,找了好久没找到相关资料,求说明一下

阅读 3.8k
2 个回答

不可以,redis的pipeline模式下(实际是multi模式),返回值是固定的,redis对象,而不是命令的实际执行结果。
因此,pipeline、multi中,不能实现条件分支逻辑。

pipeline 是减少网络开销了 一次网络请求发送多个redis操作命令 你可以将最终要执行的命令在你的业务代码最终结果得到 然后交给pipeline 执行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题