IT618

Discuz!应用中心

dz插件源码应用中心

  • 分享店铺
  • 商家级别: 钻石商家
  • 商家信誉等级:
  • 联系电话:

  • 店铺地址:addon.dz-x.net
  • 优惠公告:一次购买终身免费包更新。
已入驻7个商家

查看全部类别

您现在的位置:首页 » 其他 » Discuz! X3.5内部对象缓存(Object Cache Redis Pro)商业级对象缓存增强扩展包[含X5.0功能下放和Object Cache Pro高级扩展功能包]

Discuz! X3.5内部对象缓存(Object Cache Redis Pro)商业级对象缓存增强扩展包[含X5.0功能下放和Object Cache Pro高级扩展功能包]

为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展
¥10.00¥ 299.00
收藏 | 分享
消费类型
虚拟物品直接QQ发货 交易成功后请查看你邮箱收到的网盘下载地址或附件,如果没有收到直接联系右侧客服QQ获取
购买数量
剩余 0
立即购买
加入购物车

店铺信息

  • 分享店铺
  • 店铺掌柜: admin
  • 商家级别: 钻石商家
  • 商家信誉等级: 1级
  • 联系电话:

  • 店铺地址:addon.dz-x.net
  • 优惠公告:一次购买终身免费包更新。
  • 发货方式:QQ或邮箱及时发货。
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和具备WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展:

熟悉WP的都知道:WordPress 默认使用的是“非持久化”的内存缓存(即每次请求结束后缓存就清空)。Object Cache Pro 则通过连接 Redis(或 Memcached)这样的外部缓存服务器,把原本临时的对象缓存变成持久化、跨请求共享的缓存,避免重复查询数据库或执行昂贵的 PHP 操作。
Object Cache Pro 是一款专为 WordPress 设计的高性能、商业级对象缓存插件,主要用于将 WordPress 的内部对象缓存(Object Cache)持久化到 Redis,从而显著提升网站性能和可扩展性。它由付费插件开发商 Rhubarb Group 开发,是 WordPress 官方推荐的高级缓存解决方案之一。

而熟悉X5.0的都知道:X5.0 在 feature() 探测、Lua 脚本、Cluster 等方面对内存驱动做了增强;
所以废话不多说,怎么做到既要WP的Object Cache Pro的高级能力实现又要在X3.5中享受X5.0的内存驱动增强呢:
DZ插件网2G2H 1M带宽的服务器实测性能演示:
Redis 状态仪表盘:https://www.dz-x.net/redis_status.php 【开放访问】
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis
DZ插件网独家为站长加速Discuz!网站,发挥极致的Redis性能和内存缓存加速优化,包括今后的实现Redis的L7层CC防御的WAF能力!
DZ插件网做出了Redis 增强包(基线)主要实现:
保留了 X3.5 的接口习惯(get/set/getMulti/clear/evalscript 等);
对齐了 X5.0 的能力探测方式(通过 feature() 检测 driver 支持 set/hash/sortedset/cluster/lua/pipeline 等);
在此基础上新增了:
  • prefetch() 统一入口;
  • userstats 懒重建逻辑;
  • 与 RedisProClient 的动态 TTL / Strict / Telemetry 的协作接口。

Object Cache Pro高级功能特性引入:
1. 高级序列化机制(Auto Serializer)
  • php / igbinary / msgpack 自动协商
  • strict=1 时强制序列化检查
  • Telemetry 记录序列化时间

2. 高级压缩(Auto Compression)
  • 支持 zstd / lz4 / lzf 自动协商
  • 自动 fallback
  • 多级 Envelope 包装

3. TTL Jitter + max_ttl
  • 避免缓存雪崩
  • 兼容 Discuz X3.5 框架行为
  • 参考 OCP maxttl 策略

4. 动态 TTL(Dynamic TTL Profile)
  • 按页面类型自动确定 TTL 范围
    (forum_index / thread / home / portal / plugin / generic)
  • 完整可配置、可观测

5. Prefetch(缓存预取)完整实现
  • 重写 RedisProClient::prefetchKeys()
  • 将 prefetched / prefetch_hits 写入 Telemetry
  • 修复 memory_driver_redis::prefetch()
  • 支持 prefetch_map 业务前缀自动匹配
  • 完整打通 Discuz → 内核 → RedisProClient → Redis

6. Group Flush(按业务分组清理)
  • clearByPattern() 基础能力
  • async_flush 与 slowlog 机制复用
  • 未来与 UI 面板对接

7. Strict Mode
  • 协议检查
  • 禁止非序列化数据污染 Redis 缓存
  • 用于保护 OCP 风格缓存一致性

8. Key Layout(Cluster Friendly)
  • 避免热点 key 分布不均
  • hash_tag 兼容

9. Telemetry(核心监控体系)
  • stats:global hash
  • prefetches / prefetch_hits
  • serializer_* 字段
  • compression_* 字段
  • envelope_* 字段预留
  • slowlog_threshold 支持

10. Redis Dashboard(redis_status.php)
  • 可视化:

    • latency
    • hit ratio
    • TTL distribution
    • prefetch 命中率
    • memory usage
    • eviction policy 诊断(allkeys-lru / volatile-lru)


11. 兼容 TCP / Unix Socket
  • Windows → TCP
  • Linux → unix:///tmp/redis.sock
  • 支持 fallback_to_tcp


12. Envelope Telemetry 写入
  • envelope_encoded
  • envelope_decoded
  • envelope_small_bypass
  • envelope_raw_size
  • envelope_final_size

本帖隐藏的内容


如果有站长感兴趣,将实现下一阶段进阶功能提升:
1. Hot Path Caching(重点页面热链缓存)
2. Prefetch Map 进一步智能化(按页面轨迹训练权重)
3. Strict Mode Phase 2(禁止错写非序列化数据)
4. Redis Guard 插件 v2(完整后台管理 UI)
  • 查看 key 树
  • 手动 group flush
  • 查看 Telemetry
  • 查看 slowlog
  • WAF score 监控

5. 完整 OCP 级别压缩流水线(LZ4 / ZSTD 更智能的决策)6. 构建 Envelope Pipeline Phase 2(分层压缩 + 检查点)


废话也不多说,直接放扩展包,扩展包目录结构如下:
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis
使用方法、说明:【只对Discuz! X3.5版负责,其他DZ版本请自助比对更新使用!!!】
由于设计的文件逻辑比较多,强烈建议使用比对更新的方法进行更新:https://www.dz-x.net/t/161529/1/1.html
前置环境操作:【以宝塔面板为例】
首先需要理解,宝塔软件商店的 Redis 软件与PHP版本里面的redis扩展两方面区别:
先在宝塔软件商店搜索 Redis 建议安装最新的8.2.2版本 Redis服务器,安装好后,
在你discuz使用的实际php版本里面,点开“安装扩展”,先安装好serializer序列化需要的igbinary这个扩展和zstd算法扩展,如下图所示安装好:
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis
宝塔面板Redis软件套接字权限与 FPM 用户组和合理 maxmemory设置:
点开安装之前在软件商店安装好的Redis 8.2.2服务器设置:
  • 合理 maxmemory设置:(一般1~2G足以)

为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis

  • 配置文件搜索修改:

搜索:unixsocket /tmp/redis.sock和unixsocketperm,去掉前面 # 号,并把 unixsocketperm 的权限改成770,如下图:
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis
进阶性能释放:
还是配置文件里面搜索 maxmemory-policy noeviction  ,修改为 maxmemory-policy allkeys-lru ,并去掉前面的  # 号。
allkeys-lru 的优点:
  • 适合通用缓存场景:不需要手动设置 TTL,也能自动清理冷数据。
  • 高效利用内存:保留热点数据,淘汰冷数据,提升命中率。
  • 简单可靠:相比基于 TTL 的策略,不依赖用户是否设置过期时间。


为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis

然后需要SSH命令运行:FPM 运行用户加入 redis 组(宝塔常见 www):

  1. usermod -aG redis www
复制代码
重启Redis服务器和你的PHP:(也可以宝塔面板里面点重启。)



最后上传扩展包部分:【如果嫌弃上面操作太麻烦,右侧客服QQ手把手远程教学,包教包会!】

步骤一:

本帖隐藏的内容

上传或者比对更新下图红框里面的文件:
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis


步骤二:
编辑:\config\config_global.php
查找:【约20~25行】
大概如下这样:
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis
整段替换为下面高级参数配置:【在提供的增强包里面有“config 参考文件,请勿直接替换你的网站”作为参考配置。】
  1. $_config['memory']['redis'] = array(
  2.     'server'        => '127.0.0.1',      // Windows 环境用'127.0.0.1'
  3.     // 'server'      => 'unix:///tmp/redis.sock', // Linux 线上用'unix:///tmp/redis.sock'
  4.     'port'          => 6379,             // Linux 线上 填 0
  5.     'pconnect'      => 1,
  6.     'requirepass'   => '',
  7.     'db'            => 0,

  8.     'prefix'        => 'dz-x:', // 这里'dz-x:' 注意后面还有英文冒号,替换为你喜欢的命名空间
  9.     'max_ttl'       => 86400,
  10.     'ttl_jitter'    => 0.10,             // ±10% 抖动

  11.     'prefetch_map' => array(
  12.         // 精确匹配 redis_page_type
  13.         'forum_index' => array('setting', 'userstats', 'forumstats', 'forums', 'onlinerecord', 'onlinelist', 'heats'),
  14.         'forum_viewthread' => array('setting', 'userstats', 'profilesetting', 'medals', 'magics'),

  15.         'home_space' => array('setting', 'userstats', 'profilesetting'),
  16.         'portal_index' => array('setting', 'heats'),

  17.         // 大类前缀:会在 forum_xxx 回退匹配用
  18.         'forum' => array('setting', 'userstats', 'forumstats', 'grouplevels', 'style_default', 'onlinerecord', 'onlinelist'),
  19.         'home'   => array('setting', 'userstats', 'grouplevels', 'style_default'),
  20.         'portal' => array('setting', 'userstats'),
  21.         'plugin' => array('setting', 'userstats'),

  22.         // 兜底
  23.         'generic' => array('setting'),
  24.     ),

  25.     // 按页面类型的动态 TTL(参考 Object Cache Pro 的 maxttl 机制)
  26.         'dynamic_ttl_enabled' => 1,
  27.         'dynamic_ttl_profile' => array(
  28.     // ===== 论坛大类兜底 =====
  29.     'forum' => array('min' => 600, 'max' => 3600),   // 10~60 分钟

  30.     // 首页:读多写少,可略长
  31.     'forum_index' => array('min' => 900,  'max' => 3600),   // 15~60 分钟

  32.     // 板块列表:有新帖,但无需秒级更新
  33.     'forum_forumdisplay' => array('min' => 600,  'max' => 2400),  // 10~40 分钟

  34.     // 帖子详情:回复频率最高,TTL 更短
  35.     'forum_viewthread' => array('min' => 300,  'max' => 1800),    // 5~30 分钟

  36.     // 发帖页面:更偏交互,不建议太长
  37.     'forum_post' => array('min' => 120,  'max' => 900),           // 2~15 分钟

  38.     // ===== Portal 文章 / 专题 =====
  39.     'portal'       => array('min' => 900,  'max' => 7200),   // 15 分钟~2 小时
  40.     'portal_index' => array('min' => 900,  'max' => 7200),
  41.     'portal_list'  => array('min' => 900,  'max' => 7200),
  42.     'portal_view'  => array('min' => 1800, 'max' => 10800),  // 30 分钟~3 小时

  43.     // ===== 家园 / 空间 =====
  44.     'home'       => array('min' => 300,  'max' => 1800),
  45.     'home_space' => array('min' => 300,  'max' => 1800),

  46.     // ===== 插件(通用 + 重点插件)=====
  47.     // 通用插件:大部分列表/展示型功能,适中 TTL
  48.     'plugin' => array('min' => 300,  'max' => 1200),          // 5~20 分钟

  49.     // 若某个插件页面特别重、又对“实时性”要求不高,可单独拉长:
  50.     // 例如 aljlog 列表页
  51.     // 'plugin_aljlog' => array('min' => 600, 'max' => 2400),

  52.     // 若某个插件是“管理/操作面板”,建议短 TTL,避免界面长期不刷新:
  53.     // 'plugin_someadmin' => array('min' => 120, 'max' => 600),

  54.     // ===== 兜底策略 =====
  55.     'generic' => array('min' => 0, 'max' => 0),   // 不限制,交给 max_ttl + eviction 兜底
  56. ),

  57.     // —— 编码管线:序列化 + 压缩 ——
  58.     'serializer'  => 'auto',
  59.     'compression' => 'auto',
  60.     //'serializer'    => 'php',   // 或 'igbinary' / 'json' / 'msgpack'
  61.     // 'compression' => 'zstd',  // 若不支持 zstd,可尝试 'lz4' 或 'lzf'

  62.     // —— Redis 连接超时等 ——
  63.     'timeout'       => 0.20,
  64.     'read_timeout'  => 0.50,

  65.     // —— Telemetry / SlowLog ——
  66.     'stats'             => 1,
  67.     'debug'             => 0,
  68.     'slowlog_threshold' => 0.05,
  69.     'stats_key'         => 'stats:global',

  70.     // —— OCP 行为增强区 ——
  71.     'async_flush'   => 1,                // 映射 OCP async_flush
  72.     'group_flush'   => 'scan',           // scan / incremental / keys / full
  73.     'prefetch'      => 1,                // 开启批量预取
  74.         'prefetch_sample_rate'    => 1.0,
  75.     'non_prefetchable_groups' => array(),
  76.     'strict'        => 1,                // 默认“宽松模式”

  77.         // Envelope:仅当你确认使用 Phase3 时再打开
  78.     'envelope'      => 1,      // 显式启用 Envelope 单对象编码

  79.     // 集群相关(目前先空着)
  80.     'cluster'           => null,
  81.     'cluster_failover'  => 'none',

  82.     // 限流与 WAF
  83.     'rate_limit' => array(
  84.         'enable' => 1,
  85.         'prefix' => 'rl:',
  86.     ),

  87.     'waf' => array(
  88.         'enable'       => 1,
  89.         'blocklist_key'=> 'waf:block:ip',
  90.         'score_prefix' => 'waf:score:',
  91.         'score_ttl'    => 3600,
  92.     ),

  93.         // 新增配置:允许 Unix Socket 失败时回退到 TCP
  94.     'fallback_to_tcp' => 1,
  95.     'fallback_host'   => '127.0.0.1',
  96.     'fallback_port'   => 6379,
  97. );
复制代码
!!!每个配置项都有注释,根据注释替换该替换的!!!


最后,访问 http(s)://你的网站/redis_status.php 【面板后台】
注:【可选操作】
为收紧面板数据查看权限,在 redis_status.php 集成了权限控制说明:
查找:
  1. // 访问控制:如需公网/内网访问,可自行放宽或关闭
  2. $remote = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
  3. $localWhitelist = array('127.0.0.1', '::1');

  4. // 默认关闭基于 REMOTE_ADDR 的白名单校验,以兼容使用 CDN / 反向代理 的场景;
  5. // 如需仅限内网访问,可将 $enableIpWhitelist 调整为 true 并维护 $localWhitelist。
  6. $enableIpWhitelist = false;
  7. if ($enableIpWhitelist && !in_array($remote, $localWhitelist)) {
  8.     header('HTTP/1.1 403 Forbidden');
  9.     echo 'Redis Status Panel - Access Denied (REMOTE_ADDR: ' . htmlspecialchars($remote, ENT_QUOTES, 'UTF-8') . ')';
  10.     exit;
  11. }
复制代码
上面这段请按需修改。
另外,本面板已经考虑了仅允许站点创始人(默认 UID=1)在面板中执行 Flush Cache (内存清理)操作:
查找:
  1. // 仅允许站点创始人(默认 UID=1)在面板中执行 Flush Cache 操作
  2. $redis_status_can_flush = false;
  3. if (!empty($_G['uid'])) {
  4.     $allowedFlushUids = array(1);
  5.     if (in_array(intval($_G['uid']), $allowedFlushUids, true)) {
  6.         $redis_status_can_flush = true;
  7.     }
  8. }
复制代码
非站点创始人(默认 UID=1)连刷新按钮都不显示:
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis

也考虑到了有的站长需要首页统计数据比如:发帖数、会员数等数字的显示要实时不缓存,
预留了控制参数:\source\module\forum\forum_index.php
查找:
  1. // 临时禁用论坛首页的内存缓存与访客静态缓存,确保首页统计实时刷新
  2. // 如果需要首页发帖数、会员数等统计数实时更新就解除下段注释
  3. /*if (isset($_G['setting']['memory']['forumindex'])) {
  4.     $_G['setting']['memory']['forumindex'] = null;
  5. }

  6. if (isset($_G['setting']['cacheindexlife'])) {
  7.     $_G['setting']['cacheindexlife'] = 0;
  8. }*/
复制代码
去掉这段的注释符号即可。
Redis 增强包(基线)v6.zip 附件下载地址:

实测性能演示:
Redis 状态仪表盘:https://www.dz-x.net/redis_status.php 【开放访问】

使用之后效果:DZ插件网2G2H 1M带宽的服务器 访问速度、加载速度、性能发挥得到实质提升。

更多高级技巧及discuz优化建站经验,见群共享更多分享交流:https://jq.qq.com/?_wv=1027&k=xWSYC8tG