分享TP6框架中Redis操作服务类的记录

下面由thinkphp框架教程栏目给大家分享thinkphp6中redis操作服务类的记录,希望对需要的朋友有所帮助!                                

1. 定义服务类

handler();    }    /**     * 处理缓存key(添加前缀...)     *     * @param string $key  key     *     * @return string     */    private function cacheKey(string $key): string    {        return Cache::getCacheKey($key);    }    /**     * 缓存程序运行结果     *     * @param          $key     * @param callable $callback     * @param int      $expire     *     * @return mixed     */    public function cache($key, callable $callback, int $expire = 3600)    {        $cache = $this->client()->get($key);        if (! $cache || ! unserialize($cache)) {            $data = $callback();            $this->client()->set($key, $cache = serialize($data), $expire);        }        return unserialize($cache);    }    /**     * 程序运行锁     * @param          $key     * @param callable $callback     * @param int      $timeout     *     * @return array     */    public function lock($key, callable $callback, int $timeout = 10): array    {        $lock = $this->client()->get($key);        if ($lock) return ['code' => 0, 'data' => null];        $this->client()->setex($key, $timeout, 1);        $data = $callback();        $this->client()->del($key);        return ['code' => 1, 'data' => $data];    }    /**     * 设置有效时间     *     * @param $ttl     *     * @return $this|false     * @throws \Exception     */    public function setExpire($ttl)    {        if ($this->expire_at) throw new \Exception('setExpire and setExpireAt can not set both');        $this->expire = $ttl;        return $this;    }    /**     * 设置到期时间     *     * @param $timestamp     *     * @return $this|false     * @throws \Exception     */    public function setExpireAt($timestamp)    {        if ($this->expire > 0) throw new \Exception('setExpire and setExpireAt can not set both');        $this->expire_at = $timestamp;        return $this;    }    /**     * 调用原生redis方法     *     * @return mixed     */    public function __call($name, $arguments)    {        $cache_key = $this->cacheKey($arguments[0]);        $result = $this->client()->{$name}(...$arguments);        // 设置过期时间        $this->expire && $this->client()->expire($cache_key, $this->expire);        $this->expire_at && $this->client()->expireAt($cache_key, $this->expire_at);        return $result;    }}

2. 定义门面Facade

<?phpnamespace app\api\facade;use app\api\service\common\RedisService;use think\Facade;/** * Class Redis * * @package app\api\facade * * @method static \Redis client() * @method static \Redis setExpire($ttl) * @method static \Redis setExpireAt($timestamp) * @method static mixed cache($key, callable $callback, int $expire = 3600) * @method static array lock($key, callable $callback, int $timeout = 10) */class Redis extends Facade{    protected static function getFacadeClass()    {        return RedisService::class;    }}

3. 如何使用

3.1 程序锁

public function test()    {        $a = 1;        $b = 2;        $result = Redis::lock('lock:demo', function () use ($a, $b) {            return $a + $b;        }, 5);        if ($result['code'] == 0) return '操作频繁,请稍后再试';        return $result['data']; // 成功返回数据 3    }

3.2 方法数据缓存

public function test(){    $a = 1;    $b = 2;    $result = Redis::cache('cache:demo', function () use ($a, $b) {        return $a + $b;    }, 5);    return $result; // 成功返回数据 3,有效时长5秒}

3.3 简化过期时间设置

// 24小时到期Redis::setExpire(86400)->hSet('expire:demo', 'hash-key', 'hash-value');// 2021-08-24 23:59:59到期Redis::setExpireAt(strtotime('2021-08-24 23:59:59'))->hSet('expireAt:demo', 'hash-key', 'hash-value');

3.4 普通调用

// 普通调用,直接跟redis方法名Redis::set('set:demo', 132456);// idea支持代码提示调用Redis::client()->set('set:demo', 132456);

推荐:《最新的10个thinkphp视频教程》

以上就是分享TP6框架中Redis操作服务类的记录的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/75294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
神马搜索App新闻资讯浏览教程_神马搜索App实时资讯订阅方法
上一篇 2025年11月14日 08:54:12
Claude如何接入法律系统 Claude法律条文检索接口
下一篇 2025年11月14日 08:56:15

相关推荐

发表回复

登录后才能评论
关注微信