Discuz!使用Redis缓存多站点分库和避免清空所有的数据教程!
<strong>Discuz!内存级缓存介绍</strong><br /><br />缓存层的引入是为了解决MYSQL自身对高并发处理的性能瓶颈,目前产品缓存层采用主流的Key-Value对形式,内存级的缓存产品很多,支持的内存优化接口有 Memcache、eAccelerator、Alternative PHP Cache(APC)、Xcache、Redis 五种,优化系统将会依据当前服务器环境依次选用接口,单服务器环境中推荐使用APC,多服务器环境中推荐使用Redis或Memcache。<br /><br /><strong>现存问题说明</strong><br /><br />有不少站长在一个服务器上安装多个站点,且同时使用Redis作为缓存过程中发现,当使用后台->全局->性能优化->内存优化->内存清理,会把redis缓存的全部站点的内容都清空。<br /><img title="02.JPG" id="aimg_10359" aid="10359" src1="static/image/common/none.gif" zoom="https://www.dismall.com/data/attachment/forum/202103/10/204449kvntla13ty0fskfs.jpg" src="https://www.dismall.com/data/attachment/forum/202103/10/204449kvntla13ty0fskfs.jpg" class="zoom" onclick="zoom(this, this.src, 0, 0, 0)" width="600" inpost="1" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" /><br /><br /><strong>改进方案<br /><br />具体实现如下:</strong><br /><br />1、修改文件config\config_global.php<br /><br />在<ol><li>$_config['memory']['redis']['serializer'] = 1;</ol><br /><br />下方增加一行<br /><br /><ol><li>$_config['memory']['redis']['db'] = 1;//这里可以填写0到15的数字,每个站点使用不同的,redis默认是16个库,也可以增加库<br /><li><br /><li>2、修改文件source\class\memory\memory_driver_redis.php<br /><li><br /><li>在 @$this->obj->setOption(Redis::OPT_SERIALIZER, $config['serializer']); </ol><br /><br />下方加上一行<br /><br /><ol><li>$this->select($config['db']);</ol><br /><br />3、将flushAll改成flushdb避免后台清理影响全部站点;<br /><br /><ol><li>function clear() {<br /><li><br /><li>return $this->obj->flushAll();<br /><li><br /><li>}</ol><br /><br />改成<br /><br /><ol><li>function clear() {<br /><li><br /><li>return $this->obj->flushdb();<br /><li><br /><li>}</ol>缓存<em>, </em>内存<em>, </em>使用<em>, </em>优化<em>, </em>Redis 感谢分享!太实用了!<br />这么好的教程,现在还没人评论,抢沙发 经过对比发现 X3.5已经默认是这样的设置<br /><ol><li>$_config['memory']['prefix'] = 'p1oXuh_';<br /><li>$_config['memory']['redis']['server'] = '127.0.0.1';<br /><li>$_config['memory']['redis']['port'] = 6379;<br /><li>$_config['memory']['redis']['pconnect'] = 1;<br /><li>$_config['memory']['redis']['timeout'] = 0;<br /><li>$_config['memory']['redis']['requirepass'] = '';<br /><li>$_config['memory']['redis']['db'] = 0;</ol>source\class\memory\memory_driver_redis.php<br /><br />已经默认<br /><ol><li> function clear() {<br /><li> return $this->obj->flushDb();<br /><li> }</ol>指定数据库<br /><ol><li> @$this->obj->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE);<br /><li> $this->select(isset($config['db']) ? $config['db'] : 0);</ol><br /><br /> 谢谢分享
頁:
[1]