当前位置 博文首页 > fareast_mzh的博客:laravel中使用redis 示例

    fareast_mzh的博客:laravel中使用redis 示例

    作者:[db:作者] 时间:2021-08-13 15:53

    use Illuminate\Support\Facades\Log;
    use Illuminate\Support\Facades\Redis;
    
        /**
         * @param $key string
         * @param $memberId integer
         * @throws \ShallBuy\LaravelBase\Common\Exception\Exceptions\BusinessException
         */
        private static function memberIdExists($key, $memberId) {
            if (Redis::sismember($key, $memberId)) {
                $len = Redis::scard($key);
                $memberIds = Redis::smembers($key);
                Log::info(sprintf("len=%d, members=[%s]", $len, implode(',', $memberIds)));
                throw ExceptionFactoryFacade::business(CodeMessageConstant::ERROR_MARQUEE_UNSUBSCRIBED);
            }
        }
    
        public function unsubscribe($memberId) {
            $key = Marquee::CACHE_HIDE_MEMBERS_LIST;
            /** @var $status \Predis\Response\Status */
            $status = Redis::type($key);
            $type = $status->getPayload();
            // 已存在重名的list
            if (strncmp($type, "list", 4) == 0) {
                $len = Redis::llen($key);
                $a = Redis::lrange($key, 0, $len);
                Redis::del($key);
                foreach ($a as $id) {
                    Redis::sadd($key, $id);
                }
            }
            // 除set以外的其他类型, 直接删除
            else if (strncmp($type, "set", 3) != 0) {
                Redis::del($key);
                return Redis::sadd($key, $memberId);
            }
    
            self::memberIdExists($key, $memberId);
            return Redis::sadd($key, $memberId);
        }

    cs
    下一篇:没有了