背景缓存方式使用redis缓存数据库,当redis服务器挂掉的时候会导致程序报错,本方法就是使用thinkphp5的钩子和行为来解决的解决方案这里选择用thinkphp5的行为来解决,框架的查询缓存使用方法不变。应用的默认的缓存方式为文件,应用初始化时检测redis缓存服务器是否存活,存活就把缓存方式由文件缓存更改为redis缓存优点防止因redis缓存服务器挂掉而导致整个系统崩溃缺点因检测red

背景

缓存方式使用redis缓存数据库,当redis服务器挂掉的时候会导致程序报错,本方法就是使用thinkphp5的钩子和行为来解决的

解决方案

这里选择用thinkphp5的行为来解决,框架的查询缓存使用方法不变。应用的默认的缓存方式为文件,应用初始化时检测redis缓存服务器是否存活,存活就把缓存方式由文件缓存更改为redis缓存

优点

防止因redis缓存服务器挂掉而导致整个系统崩溃

缺点

因检测redis缓存服务器有一个超时等待,如果缓存服务器挂掉,会等待1秒才会切换为文件缓存。但相比系统崩溃,等待1秒相对来说还是可以接受的

实现过程

应用缓存配置(采用复合缓存的方式)

应用缓存配置文件路径:/config/cache.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------
return [
    // 使用复合缓存类型
    'type' => 'complex',
    // 默认使用的缓存
    'default' => [
        // 驱动方式
        'type' => 'File',
        // 缓存保存目录
        'path' => '../runtime/cache/'
    ],
    // 文件缓存
    'file' => [
        // 驱动方式
        'type' => 'file',
        // 设置不同的缓存保存目录
        'path' => '../runtime/cache/'
    ],
    // redis缓存
    'redis' => [
        // 驱动方式
        'type' => 'redis',
        // 服务器地址
        'host' => '127.0.0.1',
        // 密码
        'password' => '',
        // 缓存前缀
        'prefix' => '4uiCn_'
    ]
];