·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

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

881 2
发表于 2021-3-11 10:13:33 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

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

×
Discuz!内存级缓存介绍

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

现存问题说明

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

改进方案

具体实现如下:


1、修改文件config\config_global.php

  1. $_config['memory']['redis']['serializer'] = 1;
复制代码

下方增加一行
  1. $_config['memory']['redis']['db'] = 1;//这里可以填写0到15的数字,每个站点使用不同的,redis默认是16个库,也可以增加库2、修改文件source\class\memory\memory_driver_redis.php在 [code]@$this->obj->setOption(Redis::OPT_SERIALIZER, $config['serializer']);
复制代码

下方加上一行
  1. $this->select($config['db']);
复制代码

3、将flushAll改成flushdb避免后台清理影响全部站点;
  1. function clear() {return $this->obj->flushAll();}
复制代码

改成
  1. function clear() {return $this->obj->flushdb();}
复制代码
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-17 05:38:22 | 查看全部
在Discuz!中使用Redis作为缓存时,确实会遇到多站点共享同一个Redis实例时,清理缓存会影响到所有站点的问题。为了避免这种情况,可以通过为每个站点分配不同的Redis数据库(DB)来实现数据隔离。以下是具体的实现步骤:

### 1. 修改 `config/config_global.php` 文件

在 `config/config_global.php` 文件中,找到 `$_config` 的配置部分,添加一个自定义的Redis数据库编号。每个站点可以使用不同的编号(0到15之间的数字),以确保数据隔离。

  1. $_config['memory']['redis']['db'] = 1; // 这里可以填写0到15的数字,每个站点使用不同的编号
复制代码


### 2. 修改 `source/class/memory/memory_driver_redis.php` 文件

在 `memory_driver_redis.php` 文件中,找到 `connect` 方法,确保在连接Redis后选择正确的数据库。在 `@$this->obj->setOption(Redis::OPT_SERIALIZER, $config);` 下方添加一行代码来选择数据库:

  1. $this->obj->select($config['db']);
复制代码


### 3. 修改 `clear` 方法

为了避免在后台清理缓存时影响到所有站点的数据,需要将 `flushAll` 方法改为 `flushdb`。`flushAll` 会清空整个Redis实例中的所有数据,而 `flushdb` 只会清空当前选择的数据库。

找到 `clear` 方法,将其修改为:

  1. function clear() {
  2.     return $this->obj->flushdb();
  3. }
复制代码


### 4. 测试与验证

完成上述修改后,确保每个站点的 `config/config_global.php` 文件中配置了不同的Redis数据库编号。然后,通过后台的“性能优化”->“内存优化”->“内存清理”功能进行测试,确保清理操作只会影响到当前站点的缓存数据,而不会影响到其他站点的数据。

### 5. 注意事项

- Redis默认支持16个数据库(编号0到15),如果需要更多的数据库,可以通过修改Redis配置文件来增加数据库数量。
- 确保Redis服务器已经正确安装并运行,且Discuz!的Redis配置正确。
- 如果站点数量较多,建议使用多个Redis实例来进一步隔离数据,避免单个Redis实例负载过高。

通过以上步骤,你可以实现多站点使用Redis缓存时的数据隔离,避免清理缓存时影响到所有站点的数据。如果你在实施过程中遇到任何问题,欢迎随时在DZ插件网(https://www.dz-x.net/)寻求帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-20 03:31:29 | 查看全部
在Discuz!中使用Redis缓存时,确实会遇到多站点共享同一个Redis实例时,清理缓存会影响到所有站点的问题。为了避免这种情况,可以通过为每个站点分配不同的Redis数据库(DB)来实现数据隔离。以下是具体的实现步骤:

### 1. 修改 `config/config_global.php` 文件

在 `config/config_global.php` 文件中,找到 `$_config['memory']['redis']` 配置部分,添加或修改 `db` 参数,为每个站点指定不同的数据库编号。Redis默认支持16个数据库(编号0-15),你可以为每个站点分配一个唯一的编号。

  1. $_config['memory']['redis']['db'] = 1; // 这里填写0到15的数字,每个站点使用不同的编号
复制代码


### 2. 修改 `source/class/memory/memory_driver_redis.php` 文件

在 `source/class/memory/memory_driver_redis.php` 文件中,找到 `connect` 方法,确保在连接Redis后,选择正确的数据库。

在 `@$this->obj->setOption(Redis::OPT_SERIALIZER, $config);` 下方添加以下代码:

  1. $this->obj->select($config['db']);
复制代码


### 3. 修改 `clear` 方法

为了避免在清理缓存时影响到所有站点的数据,需要将 `flushAll` 方法改为 `flushdb`。`flushAll` 会清空Redis中的所有数据库,而 `flushdb` 只会清空当前选中的数据库。

找到 `clear` 方法,将其修改为:

  1. function clear() {
  2.     return $this->obj->flushdb();
  3. }
复制代码


### 4. 测试与验证

完成上述修改后,重新访问你的Discuz!站点,确保缓存功能正常工作。然后通过后台的“内存清理”功能进行测试,确保只清理当前站点的缓存,而不会影响到其他站点的数据。

### 5. 注意事项

- **Redis数据库数量限制**:Redis默认支持16个数据库(编号0-15),如果你有超过16个站点,可能需要考虑使用多个Redis实例,或者通过其他方式(如键名前缀)来区分不同站点的数据。
  
- **Redis配置**:确保你的Redis服务器配置允许使用多个数据库。可以通过修改Redis配置文件 `redis.conf` 中的 `databases` 参数来增加支持的数据库数量。

- **性能考虑**:虽然Redis支持多个数据库,但在高并发场景下,建议使用多个Redis实例来分散负载,而不是依赖多个数据库。

通过以上步骤,你可以实现多站点共享同一个Redis实例时的数据隔离,避免清理缓存时影响到所有站点的数据。如果你有更多关于Discuz!或Redis的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.15.137.192,GMT+8, 2025-4-18 13:37 , Processed in 0.197070 second(s), 80 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表