• 技术文章 >php框架 >ThinkPHP

    关于ThinkPHP6多例Redis类实现

    藏色散人藏色散人2020-09-08 09:51:41转载1947
    下面由thinkphp教程栏目给大家介绍ThinkPHP6多例Redis类实现,希望对需要的朋友有所帮助!

    在Thinkphp项目中封装一个Redis多库单例操作类

    1.操作前的准备

    如果没有安装phpredis模块那么先执行

    composer require predis/predis

    2.配置Redis连接信息

    在app\config\cache.php中配置

    'redis' => [
       // 驱动方式
        'type'       => 'redis',
        // 连接地址
        'host'       => Env::get('redis.host'),
        // 端口
        'port'       => Env::get('redis.port'),],

    更多配置参考

    /**
     * 配置参数
     * @var array
     */protected $options = [
        'host'       => '127.0.0.1',
        'port'       => 6379,
        'password'   => '',
        'select'     => 0,
        'timeout'    => 0,
        'expire'     => 0,
        'persistent' => false,
        'prefix'     => '',
        'tag_prefix' => 'tag:',
        'serialize'  => [],];

    在.env中配置连接信息

    [REDIS]host = 127.0.0.1
    port = 6379

    3.编写代码

    在app\common下创建文件Redis.php

    <?phpnamespace app\common;use think\facade\Config;use think\cache\driver\redis as ThinkRedis;class Redis extends ThinkRedis{
        /**
         * @var int
         */
        protected $hash;
    
        /**
         * @var array
         */
        protected static $instance = [];
    
        /**
         * Redis constructor.
         * @param $db
         */
        private function __construct($db)
        {
            $options = Config::get('cache.stores.redis');
            $options['select'] = $db;
            $this->hash = $db;
            $this->options = array_merge($this->options, $options);
            parent::__construct();
        }
    
        private function __clone()
        {
        }
    
        /**
         * @param int $db
         * @return \Predis\Client|\Redis
         */
        public static function instance($db = 0)
        {
            if (! isset(self::$instance[$db])) {
                self::$instance[$db] = new self($db);
            }
    
            return self::$instance[$db];
        }
    
        public function __destruct()
        {
            self::$instance[$this->hash]->close();
            unset(self::$instance[$this->hash]);
        }}

    4.使用方式

    use app\common\Redis;
    
    $redis = Redis::instance(4);
    $redis->hSet('user:1', 'userName', 'admin');
    
    Redis::instance(1)->hSet('user', 'name', 'admin1');
    Redis::instance(2)->hSet('user', 'name', 'admin2');
    Redis::instance(3)->hSet('user', 'name', 'admin3');

    更多使用方法请参考 redis命令手册

    以上就是关于ThinkPHP6多例Redis类实现的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:ThinkPHP6 Redis
    上一篇:使用Container类实现ThinkPHP核心框架 下一篇:TP之移动端微信授权登录
    线上培训班

    相关文章推荐

    • thinkphp6开启session的方法• 三种ThinkPHP6中获取参数的方法• 关于thinkphp6.0.2实现对数据库操作• Thinkphp6如何利用ZipArchive打包下载文件

    全部评论我要评论

  • 王白山

    这是单例好不呀

    2021-10-21

  • 取消发布评论发送
  • 1/1

    PHP中文网