Discuz!使用Redis缓存多站点分库和避免清空所有的数据

缓存介绍

缓存层的引入是为了解决MYSQL自身对高并发处理的性能瓶颈,目前产品缓存层采用主流的Key-Value对形式,内存级的缓存产品很多,支持的内存优化接口有 Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache、Redis 五种,优化系统将会依据当前服务器环境依次选用接口,单服务器环境中推荐使用 APC ,多服务器环境中推荐使用 RedisMemcache

现存问题说明

有不少站长在一个服务器上安装多个站点,且同时使用 Redis 作为缓存过程中发现,当使用 后台->全局->性能优化->内存优化->内存清理,会把 redis 缓存的全部站点的内容都清空。

原来是因为 Discuz! 在实现的时候没用使用 Redis 的分库功能,全部站点的缓存都是放在 db0 中,好在 Discuz! 源码中已经做好了分库选择,只需要很少的改动进达到我们分库的要求了。

改进方案

具体实现如下:
1、修改文件 config\config_global.php

$_config['memory']['redis']['serializer'] = 1;

下方增加一行

$_config['memory']['redis']['db'] = 1;

这里可以填写0到15的数字,每个站点使用不同的,redis默认是16个库,也可以增加库

2、修改文件 source\class\memory\memory_driver_redis.php

@$this->obj->setOption(Redis::OPT_SERIALIZER, $config['serializer']);

下方加上一行

$this->select($config['db']);

3、将 flushAll 改成 flushdb 避免后台清理影响全部站点;

function clear() {
    return $this->obj->flushAll();
}

改成

function clear() {
    return $this->obj->flushdb();
}

本文链接:

https://www.wgrid.cn/36.html



评论功能已关闭,请直接邮箱联系