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

Discuz!内存级缓存介绍

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

现存问题说明

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

Discuz!使用Redis缓存多站点分库和避免清空所有的数据的解决方案,discuz教程,教程之家,第1张

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

改进方案

具体实现如下:

1、修改文件configconfig_global.php

在$_config['memory']['redis']['serializer'] = 1;下方增加一行

$_config['memory']['redis']['db'] = 1;//这里可以填写0到15的数字,每个站点使用不同的,redis默认是16个库,也可以增加库

2、修改文件sourceclassmemorymemory_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();

}

本文《Discuz!使用Redis缓存多站点分库和避免清空所有的数据的解决方案》由网友投稿或:「admin」整理自网络。

转载请声明来自:云猴子 -  https://www.yunhouzi.com/248.html



1,本站所有资源均来源于用户上传或整理与网络,如有侵权请【内容投诉】删除,我们将及时处理!
2,本站资源仅供大家学习和交流,请不要用于商业用途,下载后请于24小时后删除!
3,如果你也有好的资源,可以投稿到本站,有金币奖励和额外的收入!
4,从您进入本站开始,已表示您已同意接受本站【版权声明】中的一切条款!
6,申明:本站资源出售只是赞助,仅用于本站服务器和日常运营所需!不提供任何技术支持。
7,如压缩包提示有密码,www.yunhouzi.com

云猴子 » Discuz!使用Redis缓存多站点分库和避免清空所有的数据的解决方案
您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论