• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 分享TP6框架中Redis操作服务类的记录

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

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了TP6框架,Redis操作服务类等相关知识,希望对您有所帮助

下面给大家分享ThinkPHP6中Redis操作服务类的记录,希望对需要的朋友有所帮助!


1. 定义服务类

<?php declare (strict_types=1); namespace app\api\service\common; use think\facade\Cache; /** * 缓存服务 * Class RedisService * * @package app\api\service\common */class RedisService{    private $expire;    private $expire_at;     /**     * 获取redis句柄     *     * @return object|null     */    public function client(): ?object    {        return Cache::store('redis')->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

<?php  namespace 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);


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2022-04-29Navicat for MySQL连接MySQL报2005错误怎么办
  • 2022-04-29Laravel删除Cookie的小坑
  • 2022-04-29网站上线前需要做的优化准备工作
  • 2022-04-29浅析什么是装饰器?Vue中怎么使用装饰器?
  • 2022-04-29PhotoShop CS5打造木栈道婚纱外景照片后期合成教程
  • 2022-04-29千万不要让搜素引擎误认为买卖链接了
  • 2022-04-29Laravel使用intervention image包上传、剪裁图片
  • 2022-04-29浅谈Nodejs中的callback回调
  • 2022-04-29手机访问PC网站自动跳转到手机网站代码
  • 2022-04-29Photoshop制作创意的云朵图案艺术字教程

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • PS打造缝线文字效果
    • 帝国CMS后台添加关键字时自动复制到TAGS(同步更新)的方法
    • Photoshop制作水彩喷溅效果的艺术字
    • laravel与thinkphp之间的区别与优缺点
    • 常见的5个PHP编码小陋习以及优化实例讲解
    • 教你怎么使用Vue实现动画效果(附代码)
    • Thinkphp5整合结巴分词实现网站模糊搜索
    • PHP中如何利用compact创建数组
    • Photoshop绘制白色开关插座ICON图标
    • Elasticsearch工具cerebro的安装与使用教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有