请选择 进入手机版 | 继续访问电脑版

Discuz站长论坛

 找回密码
 立即注册
查看: 318|回复: 0

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

[复制链接]
发表于 2019-4-23 07:58:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

现存问题说明
有不少站长在一个服务器上安装多个站点,且同时使用Redis作为缓存过程中发现,当使用后台->全局->性能优化->内存优化->内存清理,会把redis缓存的全部站点的内容都清空。
QQ截图20190423094116.jpg
原来是因为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();
}

最近访问 头像模式 列表模式
回复 马甲回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|网站地图|小黑屋|手机浏览|简洁浏览|展会网|Discuz站长论坛

GMT+8, 2020-1-22 21:59 , Processed in 0.574587 second(s), 12 queries , Redis On.

Powered by Discuz! X3.4 Designed by AiLab.CN

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表