·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹📱AI全功能
123下一页
返回列表 发布新帖

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

400 33
发表于 2025-12-9 23:02:01 | 查看全部 阅读模式 | Google Chrome| Windows 10

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

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

×
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和具备WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展包:【2025.12.21 推进更新至 V7.1 极致版本】

熟悉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,Discuz,Redis,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 的协作接口。

Discuz 协作层(memory_driver / discuz_memory) [12.19 v7.0 更新增强]
  • 对齐 X5 的 clear/evalscript/prefetch 调用链
  • Prefetch → RedisProClient::prefetchKeys() 打通
  • info()/expire() 诊断接口为面板与审计提供能力

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

12.15 新增能力:
RedisProClient(OCP 风格核心驱动)
  • 文件:extend/redis-pro/RedisProClient.php
  • 已实现/确认的能力:

    • TTL 抖动 + max_ttl(normalizeTtl)
    • Cluster-friendly key layout(hash_tag 兼容)
    • async_flush、group_flush API
    • Telemetry(hits/misses/latency/ops 等)
    • SlowLog(慢操作观测)
    • 本地缓存(减少重复 Redis IO)
    • TCP + Unix Socket 双模式兼容
    • clearByPattern($pattern, $limit, $async):SCAN+DEL 批量清理(为 Group Flush UI 预埋)
    • 动态 TTL profile(按 forum/home/portal/plugin/generic 页面类型),开关 dynamic_ttl_enabled
    • strict=1 时连接级自动选择 serializer/compression(Auto Serializer / Auto Compression Phase)
    • Envelope pipeline:编码/解码计数、small bypass、raw/final size、压缩收益统计等(逐步对齐 OCP 行为)

Discuz X3.5 内存驱动协作(对齐 X5 思路)
  • 文件:source/class/discuz/discuz_memory.php、source/class/memory/memory_driver_redis.php
  • 已实现:

    • clear()/evalscript() 协作方式对齐 X5
    • info()/expire() 诊断与 TTL 接口,为仪表盘与 OCP 风格诊断扩展提供基础

12.19 v7.0更新增强:
核心缓存引擎层(RedisProClient)
  • Envelope pipeline(自动序列化/压缩/回退)+ counters(encoded/decoded/bypass/ratio/saved_bytes)
  • Serializer auto(php/igbinary/msgpack)与能力探针
  • Compression auto(lzf/lz4/zstd)与收益阈值(min_size/min_gain/max_size)
  • TTL 策略体系:ttl_jitter + max_ttl + dynamic_ttl_profile
  • Strict mode(key 规范/误用检测方向)
  • Group flush + async flush(SCAN+DEL + 异步避免阻塞)
  • Cluster-friendly key layout / hash_tag(可扩展到集群)
  • Telemetry + SlowLog(命中/耗时/错误/慢操作)

可观测闭环(redis_status.php + RedisServerStatus)
  • OCP 风格 diagnostics:policy/eviction/capabilities/codec
  • Telemetry 的 stats/stats_derived 口径化输出
  • Prefetch 验收口径工程化(per_request/effective/skip reason)
  • Realtime Fragments ROI + health/actions(“看见问题→给建议→能收敛”)

全量Redis数据采样后台:https://www.dz-x.net/redis_status.php?format=json [12.19 v7.0版新增]
Realtime Fragments(12.19 v7.0版新增 Discuz-specific 的亮点)
  • LightCache(soft/hard TTL)+ SWR + singleflight + throttle
  • cookie/syscache/db 多源回退
  • Self-heal(autoflush 后 forumstats 空的“一次性自愈”)
  • ROI 指标采集 + Autotune(尤其 onlinenum)

管理员网站统计计数第三方模板采样数据视角(管理员 UID1 可视数据保护):https://www.dz-x.net/redis_realtime_fragments.php?debug=1 [12.19 v7.0版新增]
Redis 状态面板(OCP Diagnostics 风格)
  • 文件:redis_status.php、extend/redis_server/RedisServerStatus.php
  • 已实现:

    • Redis 基础信息、keyspace、memory、policy 探测
    • codec/capabilities 探针输出(phpredis/igbinary/zstd 等)
    • Telemetry 可视化:stats / stats_derived(OCP 风格)
    • Prefetch(Generic) 验收口径与诊断建议:

      • prefetch_generic_per_request、prefetch_generic_effective
      • prefetch_generic_skipped_small/capped 汇总诊断

    • Realtime Fragments ROI 模块:hit/miss/db_rate/p95/refresh_ok 等,并输出可执行建议
    • 时区显示修正(面板时间按 Asia/Shanghai 展示)

Cron AutoFlush(凌晨 03:00 自动触发)
  • 文件:source/include/cron/cron_redis_autoflush.php
  • 已实现/调整方向:

    • 默认从“全量清空”转向“安全 patterns 清理”(避免把 syscache/forumstats 等关键计数缓存打穿后锁死 0)
    • 现在线上 auto_flush scope=patterns,patterns 示例:*blockcache_*, *portal_*, *forumdisplay_*
    • 与 Realtime Self-heal 联动,保证清理后不会锁死在 0

线上观测证据(必须当成验收口径)
将以 redis_status.php?format=json 的这些段作为验收口径:[12.19 v7.0版新增  管理员视角 数据中台采样全量数据]
  • stats:hits/misses/gets/mgets/sets/dels/time_get/time_set、prefetches/prefetch_hits、ttl_samples、envelope_、serializer_、compression_* 等
  • stats_derived:hit_rate、ops_per_sec、avg_req_ms、prefetch_*_rate、prefetch_generic_per_request、env_compression_ratio、compression_saved_bytes 等
  • rt_fragments_roi:hit_rate、db_rate_metric、p95_latency_us、refresh_*、health/actions 等
  • prefetch_key_top:hotmiss/hotaccess/hit 排名(按 group:forum/home/generic…)
  • codec/capabilities:phpredis/igbinary/zstd 版本探针(确认真实环境)

特别注意:
  • Prefetch 命中数可能 > prefetches(因为一次 prefetch 包含多个 key),这是预期行为。
  • Realtime ROI 中 ok>attempt 需 clamp;应修正 refresh_ok 计数逻辑(已在面板口径做 clamp,并提示检查源逻辑)。

游客,如果您要查看本帖隐藏内容请回复

废话也不多说,直接放扩展包,扩展包目录结构如下:[注意:最新v7.0版本根目录的关联辅助文件更多,建议保留上传,config_global.php可以控制安全访问token,不会涉及访问入口数据泄密]
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展包 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis
使用方法、说明:【只对Discuz! X3.5版负责,其他DZ版本请自助比对更新使用!!!】
由于设计的文件逻辑比较多,强烈建议使用比对更新的方法进行更新:https://www.dz-x.net/t/161529/1/1.html  V6.8版本之后基线包已经相当复杂,注意比对!】
前置环境操作:【以宝塔面板为例  😀小技巧:哪怕你不用此基线包,按照此设置了你的宝塔Redis性能也有提升20%
首先需要理解,宝塔软件商店的 Redis 软件与PHP版本里面的redis扩展两方面区别:
先在宝塔软件商店搜索 Redis 建议安装最新的8.2.3或更新版本的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,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis
宝塔面板Redis软件套接字权限与 FPM 用户组和合理 maxmemory设置:
点开安装之前在软件商店安装好的Redis 8.2.3或更新版本的redis服务器设置:
  • 合理 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,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis
  • 配置文件搜索修改:

搜索:unixsocket /tmp/redis.sockunixsocketperm,去掉前面 # 号,并把 unixsocketperm 的权限改成770,如下图:【注意看图操作!】
为Discuz!X3.5引入Discuz!X5.0 Redis性能和内存缓存加速能力和WP的Object Cache Pro极致性能体验的Discuz! Redis Pro增强扩展包 缓存,Discuz,Redis,性能,能力,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis
进阶性能释放:
还是配置文件里面搜索 maxmemory-policy noeviction  ,修改为 maxmemory-policy allkeys-lru ,并去掉前面的  # 号。【注意看图操作,右侧QQ客服可以手把手包教包会!】
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,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis
然后需要SSH命令运行:FPM 运行用户加入 redis 组(宝塔常见 www):[不同linux版本命令不一样,以下为主流Debian Linux 12.x]
  1. usermod -aG redis www
复制代码
重启Redis服务器和你的PHP:(也可以宝塔面板里面点重启。)
最后上传扩展包部分:【如果嫌弃上面操作太麻烦,右侧客服QQ手把手远程教学,包教包会!】

步骤一:
游客,如果您要查看本帖隐藏内容请回复

步骤二:
编辑:\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,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis
整段替换为下面高级参数配置:【在提供的增强包里面有“config 参考文件,请勿直接替换你的网站”作为参考配置。】(2025.12.19 新更新,请同步更新!  V6.8版本及后续版本需要比对增加配置!
[以下是 12.19 v7.x 的全量Redis扩展配置段,理论上低版本Redis扩展包也可以引用不受影响!]
  1. $_config['memory']['redis'] = array(
  2.     'server'        => '127.0.0.1',      // Windows 环境使用
  3.     // 'server'      => 'unix:///tmp/redis.sock', // Linux 环境使用
  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.         
  12.     'auto_flush' => array(
  13.     'enable' => 1,
  14.     'timezone' => 'Asia/Shanghai',
  15.     'times' => array('03:00'),
  16.     'window_sec' => 600,
  17.     'lock_ttl' => 900,
  18.     'scope' => 'patterns',
  19.     'patterns' => array(
  20.     '*blockcache_*',
  21.     '*portal_*',
  22.     '*forumdisplay_*',
  23.      ),
  24.     ),
  25.    
  26.     // ====== 实时统计白名单(真正接入 RedisProClient · v2) ======
  27. // 说明:这里的 'stats_keys' 会被 RedisProClient::normalizeTtlForKey()
  28. //       识别为“统计类 key”,并应用更短的 stats_ttl(见下)。
  29.         'stats_ttl' => 15,
  30.         'stats_keys' => array(
  31.     'syscache:forumstats',
  32.     'syscache:userstats',
  33.     'syscache:forums',
  34.     'syscache:onlinerecord',
  35.     'syscache:onlinelist',
  36.     'syscache:heats',
  37.         ),
  38.    
  39.         // ===== Realtime Fragments / LightCache 核心(统一口径,避免重复覆盖)=====
  40.         'rtlc_ttl_todayposts_min' => 6,
  41.         'rtlc_ttl_todayposts_max' => 30,
  42.         'rtlc_ttl_onlinenum_min'  => 300,
  43.         'rtlc_ttl_onlinenum_max'  => 1800,
  44.         'rtlc_ttl_members_min'    => 60,
  45.         'rtlc_ttl_members_max'    => 300,
  46.         
  47.         'rtlc_soft_ratio' => 0.6,
  48.         
  49.         // hard TTL:控制最坏情况下 DB 回源上限(秒)
  50.         'rtlc_hard_ttl_todayposts' => 10,
  51.         'rtlc_hard_ttl_onlinenum'  => 300,
  52.         'rtlc_hard_ttl_members'    => 60,
  53.         // stale refresh 概率:降低“集中回源风暴”
  54.         'rtlc_stale_refresh_p'              => 0.10,
  55.         'rtlc_stale_refresh_p_todayposts'   => 0.12,
  56.         'rtlc_stale_refresh_p_onlinenum'    => 0.005,
  57.         // 节流与锁:避免高并发刷新抢锁/打 DB
  58.         'rtlc_lock_ttl_onlinenum'     => 3,
  59.         'rtlc_throttle_ttl_onlinenum' => 10,
  60.         'rtlc_throttle_todayposts'    => 1,
  61.         'rtlc_throttle_onlinenum'  => 30,
  62.         // 在线人数“展示值”工程化(不改真实 session 逻辑)
  63.         // 在线人数“展示值”工程化(不改真实 session 逻辑)
  64.     // OnlineNum Display(仅展示层,不改真实 session)
  65.     'rtlc_onlinenum_display_enable' => 1,
  66.     'rtlc_onlinenum_display_hold_sec' => 7200,     // 120分钟:慢更新窗口(hold)
  67.     'rtlc_onlinenum_display_ttl' => 14400,         // 状态Key TTL(默认 hold*2)
  68.     'rtlc_onlinenum_display_key' => 'stats:rt:onlinenum_display',
  69.     'rtlc_onlinenum_display_use_as_value' => 1,    // 1=前台 onlinenum 用 display;0=仍输出真实值并附带 display 字段
  70.         
  71.         // 如果是独立UC的话,这里请开启,否则请注释下行
  72.         'rtlc_members_source' => 'uc',

  73.     // Self-heal(autoflush-aware)
  74.     'rtlc_self_heal_forumstats_enable' => 1,
  75.     'rtlc_self_heal_after_autoflush_sec' => 900,   // 15分钟窗口
  76.     'rtlc_self_heal_autoflush_key' => 'stats:rt:autoflush:last_run',

  77.     // —— 实时行为增强:附件下载数强制实时更新 ——
  78.     'realtime_attachment_downloads' => 1,
  79.    
  80.     // 诊断文件调试访问入口token
  81.     'probe_token' => 'dzx_probe_20251214_xxxxxxxxxxxxx',   // 自由定义
  82.     'diag_token' => 'dzx_probe_20251214_xxxxxxxxxxxxx',   // 自由定义
  83.     //'ttl_caps_telemetry' => 1,
  84.     //'ttl_caps_sample'    => 0.05,
  85.         
  86.         'raw_cmd_audit' => 1,     // 旁路审计开关
  87.     // ===== B2: no-expire callers 证据链采样(从 bucket -> 调用点闭环)=====
  88.     'ttl_audit_callers_enable' => 1,          // 总开关:是否记录 no-expire 的调用点
  89.     'ttl_audit_callers_sample' => 0.10,       // 采样率:0.05~0.20 建议先 0.10(10%)
  90.     'ttl_audit_callers_depth'  => 18,         // 栈深度:10~20 都可,越深越重
  91.     'ttl_audit_callers_topn'   => 20,         // 每个 bucket 保留 Top N callers
  92.     'ttl_audit_callers_ttl'    => 86400,      // callers 统计 key 的 TTL(建议 1 天滚动)
  93.     'ttl_audit_callers_ignore' => array(
  94.         'extend/redis-pro/RedisProClient.php', // 排除自身封装层,避免“只看到自己”
  95.     ),
  96.     'ttl_audit_callers_max'    => 80,     // callers_top 最大保留条数(避免面板膨胀)
  97.     'ttl_audit_callers_stack'  => 12,     // 栈深(太深噪声大;太浅定位不够)
  98.     'ttl_audit_callers_min_us' => 0,      // 可选:只记录耗时>阈值的写入(先别开)
  99.         
  100.         // 让插件 bucket 的 no-expire 也能自然过期(不靠 flush)[以你自己插件的特征为准,以下是dz插件网安装的插件特征]
  101.     'bucket_ttl_caps' => array(
  102.     'boan' => 600,   // 1h
  103.     'keke' => 3600,    // 10m(先保守)
  104.         'addon' => 600,    // 10m(先保守)
  105.         'th' => 600,    // 10m(先保守)
  106.         'lcaddon' => 600,    // 10m(先保守)
  107.     'wq'   => 3600,   // 1h
  108.     ),
  109.    
  110.         // 下面是我网站插件缓存上限限制,请依据你实际调整
  111.     'key_ttl_caps' => array(
  112.     'addon_collect_discuz' => 120, // 2 分钟上限
  113.     'th_chat'              => 60,  // 1 分钟上限
  114.     'lcaddon_newtopic'     => 120, // 2 分钟上限
  115.     ),
  116.     // 某些“用户状态类字段”也强制按 DB 为准(已经在 _init_session 里实现)
  117.     'realtime_user_fields' => array(
  118.         'invisible',
  119.         // 后续如果有需要可以加:'groupid', 'accessmasks' 等
  120.     ),
  121.         
  122.         'prefetch_map' => array(
  123.     // ====== 论坛部分(保持你当前的,略) ======
  124.     'forum_index' => array('setting', 'userstats', 'forumstats', 'forums', 'onlinerecord', 'onlinelist', 'heats'),
  125.     'forum_viewthread' => array('setting', 'userstats', 'profilesetting', 'medals', 'magics'),
  126.     'forum' => array('setting', 'userstats', 'forumstats', 'grouplevels', 'style_default', 'onlinerecord', 'onlinelist'),

  127.     // ====== Portal 部分:增加 portalcategory 等结构性缓存 ======
  128.     'portal_index' => array(
  129.         'setting',
  130.         'userstats',
  131.         'portalcategory',  // 频道/栏目结构
  132.         'heats',
  133.     ),

  134.     'portal' => array(
  135.         'setting',
  136.         'userstats',
  137.         'portalcategory',
  138.     ),

  139.     // ====== 插件页:至少预取 setting / userstats,减少 DB 重复访问 ======
  140.     'plugin' => array(
  141.         'setting',
  142.         'userstats',
  143.         // 将来如果某个插件有自己的 syscache,我们再按插件名扩展
  144.     ),

  145.     // ====== generic:先关闭或极简化(见上) ======
  146.     'generic' => array(
  147.         // 暂时留空
  148.     ),
  149. ),
  150.     'prefetch_key_stats'       => 1,
  151.     'prefetch_key_sample_rate' => 0.20,   // 建议先 0.1~0.3,避免写入过猛
  152.     'prefetch_key_stats_ttl'   => 86400,  // 1 天滚动
  153.     // 按页面类型的动态 TTL(参考 Object Cache Pro 的 maxttl 机制)
  154.         'dynamic_ttl_enabled' => 1,
  155.         'dynamic_ttl_profile' => array(
  156.     // ===== 论坛大类兜底 =====
  157.     'forum' => array('min' => 600, 'max' => 3600),   // 10~60 分钟

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

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

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

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

  166.     // ===== Portal 文章 / 专题 =====
  167.     'portal'       => array('min' => 900,  'max' => 7200),   // 15 分钟~2 小时
  168.         'portal_index' => array('min' => 1200, 'max' => 7200),   // 20 分钟~2 小时
  169.         'portal_list'  => array('min' => 1200, 'max' => 7200),
  170.         'portal_view'  => array('min' => 1800, 'max' => 14400),  // 30 分钟~4 小时

  171.     // ===== 家园 / 空间 =====
  172.     'home'       => array('min' => 300,  'max' => 1800),
  173.     'home_space' => array('min' => 300,  'max' => 1800),

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

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

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

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

  185.     // —— 编码管线:序列化 + 压缩 ——
  186.     'serializer'  => 'auto',
  187.     'compression' => 'auto',
  188.     //'serializer'    => 'php',   // 或 'igbinary' / 'json' / 'msgpack'
  189.     // 'compression' => 'zstd',  // 若不支持 zstd,可尝试 'lz4' 或 'lzf'

  190.     // —— Redis 连接超时等 ——
  191.     'timeout'       => 0.20,
  192.     'read_timeout'  => 0.50,

  193.     // —— Telemetry / SlowLog ——
  194.     'stats'             => 1,
  195.     'debug'             => 0,
  196.     'slowlog_threshold' => 0.05,
  197.     'stats_key'         => 'stats:global',

  198.     // —— OCP 行为增强区 ——
  199.     'async_flush'   => 1,                // 映射 OCP async_flush
  200.     'group_flush'   => 'scan',           // scan / incremental / keys / full
  201.     'prefetch'      => 1,                // 开启批量预取
  202.         'prefetch_sample_rate'    => 1.0,
  203.     'non_prefetchable_groups' => array(),
  204.     'strict'        => 1,                // 默认“宽松模式”
  205.         
  206.         // Envelope:仅当你确认使用 Phase3 时再打开
  207.         'envelope' => 1,
  208.         'envelope_compress_min_size' => 24576,   // 24KB 才尝试压缩(比 16KB 更保守)
  209.         'envelope_compress_min_gain' => 0.03,    // 至少节省 3%
  210.         'envelope_compress_max_size' => 1048576, // 1MB 上限,避免超大对象压缩

  211.     // 集群相关(目前先空着)
  212.     'cluster'           => null,
  213.     'cluster_failover'  => 'none',

  214.     // 限流与 WAF
  215.     'rate_limit' => array(
  216.         'enable' => 1,
  217.         'prefix' => 'rl:',
  218.     ),

  219.     'waf' => array(
  220.         'enable'       => 1,
  221.         'blocklist_key'=> 'waf:block:ip',
  222.         'score_prefix' => 'waf:score:',
  223.         'score_ttl'    => 3600,
  224.     ),
  225.         
  226.         // 新增配置:允许 Unix Socket 失败时回退到 TCP
  227.     'fallback_to_tcp' => 1,
  228.     'fallback_host'   => '127.0.0.1',
  229.     'fallback_port'   => 6379,
  230. );
复制代码

!!!每个配置项都有注释,根据注释替换该替换的!!!【右侧QQ客服支持手把手包教包会!】
最后,访问 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,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis
也考虑到了有的站长需要首页统计数据比如:发帖数、会员数等数字的显示要实时不缓存,
预留了控制参数:\source\module\forum\forum_index.php
[2025.12.15 已经更新优化!]
V6.8版本及后续更新需要在后台创建计划任务
Discuz 后台 → 工具 → 计划任务:
  • 脚本文件:cron_redis_autoflush.php
  • 执行周期:每天
  • 执行时间:03:00

你也可以按你的业务习惯加第二个时间段(例如 15:00 或 23:30),但建议先只上 03:00,观测 2–3 天再加。
Redis 增强包(基线)v7.1.zip 附件下载地址:【2025.12.21修复更新  由于耗费将近1个多月精力,往后版本如果反响不大,就不再频繁更新了~
游客,如果您要查看本帖隐藏内容请回复

我要说一句 收起回复
最后回复时间:2025-12-19 23:30:53社区官方发言人回复了此贴
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论33

admin楼主Lv.9 发表于 2025-12-19 23:20:48 | 查看全部 | Google Chrome| Windows 10
bit 发表于 2025-12-19 23:18
7.0 能不能指定Redis数据库了

指定redis"数据库"在config_global.php的redis配置段的:
  1. 'prefix'        => 'dz-x:',      //dz-x改为你自己的命名空间(随意)
复制代码
在教程中且从一开始版本都已经支持,只是这里叫做命名空间。
体现在 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,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis,Discuz,Redis

我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。
回复 支持 反对

使用道具 举报

admin楼主Lv.9 发表于 2025-12-19 23:24:03 | 查看全部 | Google Chrome| Windows 10
下一步工程主线
  • 推进 原生命令旁路审计(raw command proxy audit)
  • 覆盖命令:

    • SET / HSET / PERSIST / EXPIRE

  • 必须在 RedisProClient Proxy 层
  • 绑定:

    • via
    • examples

  • 与:

    • callers
    • callers_via
    • cross_index联动

下一阶段子工程(规划)
  • Redis L7 WAF / CC 防护

    • score / blocklist / rate-limit
    • Redis 原子计数
    • 面板可视化

  • Prefetch optimizer 自动化
  • caps 建议自动生成 → 人工确认 → 落地

我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。
回复 支持 反对

使用道具 举报

Discuz智能体Lv.8 发表于 2025-12-9 23:06:43 | 查看全部
# Discuz! Redis Pro 增强扩展 - X3.5 性能加速方案

## 核心特性概述

本扩展为 Discuz! X3.5 引入 X5.0 的 Redis 性能增强能力,并融合 WordPress Object Cache Pro 的极致性能体验,打造 Discuz! Redis Pro 增强扩展。

## 技术架构亮点

### 1. 兼容性设计
- 保留 X3.5 原生接口习惯(get/set/getMulti/clear/evalscript)
- 对齐 X5.0 能力探测机制(feature() 检测驱动支持)
- 新增 prefetch() 统一入口和 userstats 懒重建逻辑

### 2. Object Cache Pro 高级特性移植

#### 序列化机制
- 自动协商:php / igbinary / msgpack
- 严格模式下的序列化检查
- Telemetry 序列化时间记录

#### 智能压缩
- 支持 zstd / lz4 / lzf 自动协商
- 自动降级机制
- 多级 Envelope 包装

#### TTL 优化
- TTL Jitter 避免缓存雪崩
- max_ttl 策略兼容 X3.5 框架
- 参考 OCP 最大 TTL 策略

#### 动态 TTL 配置
- 按页面类型自动适配 TTL
- 支持 forum_index / thread / home / portal / plugin / generic
- 完整可配置和可观测

### 3. 预取机制完整实现
- 重写 RedisProClient::prefetchKeys()
- Telemetry 记录预取命中率
- 修复 memory_driver_redis::prefetch()
- 支持 prefetch_map 业务前缀自动匹配

### 4. 分组清理功能
- clearByPattern() 基础能力
- 异步清理与慢日志机制复用
- 未来支持后台管理面板对接

### 5. 严格模式保护
- 协议检查机制
- 防止非序列化数据污染 Redis
- 确保 OCP 风格缓存一致性

### 6. 集群友好设计
- 避免热点 Key 分布不均
- hash_tag 兼容性支持

### 7. 监控体系
- stats:global 哈希统计
- 预取命中率监控
- 序列化/压缩性能指标
- 慢日志阈值支持

### 8. Redis 状态仪表盘
可视化监控面板包含:
- 延迟分析
- 命中率统计
- TTL 分布情况
- 预取命中率
- 内存使用情况
- 淘汰策略诊断

### 9. 连接协议支持
- Windows 环境:TCP 连接
- Linux 环境:Unix Socket
- 支持 TCP 回退机制

## 安装部署指南

### 步骤一:文件更新
强烈建议使用比对更新方式,参考教程:
down.dz-x.net/t/161529/1/1.html

需要更新的核心文件包括:
- 内存驱动相关文件
- Redis 客户端组件
- 配置管理文件

### 步骤二:配置调整
编辑 config/config_global.php 文件(约20-25行)

**重要提示**:请勿直接替换现有配置,参考增强包中的配置文件进行比对更新。

## 进阶功能规划

### 下一阶段开发重点
1. **热点路径缓存** - 重点页面热链优化
2. **智能预取映射** - 基于页面访问轨迹的权重训练
3. **严格模式第二阶段** - 防止非序列化数据写入
4. **Redis Guard 插件 v2** - 完整后台管理界面
   - Key 树状查看
   - 手动分组清理
   - Telemetry 数据查看
   - 慢日志分析
   - WAF 评分监控
5. **完整压缩流水线** - LZ4 / ZSTD 智能决策
6. **Envelope Pipeline 第二阶段** - 分层压缩与检查点

## 版本兼容性说明

**仅支持 Discuz! X3.5 版本**
其他 Discuz! 版本请自行比对文件差异后使用

## 技术支持与资源

- 官方文档:open.dismall.com/?ac=document&page=dev_coderule
- 插件开发指南:open.dismall.com/?ac=document&page=dev_plugin
- 模板开发:open.dismall.com/?ac=document&page=dev_template
- X5.0 开发索引:open.dismall.com/?ac=document&page=dev_x5_index

## 性能优化建议

1. 根据站点规模调整 TTL 策略
2. 启用压缩功能减少内存占用
3. 合理配置预取映射提升命中率
4. 定期监控 Telemetry 数据优化配置

## 安全注意事项

- 确保 Redis 服务仅限内网访问
- 定期更新安全补丁
- 监控异常访问模式
- 启用严格模式防止数据污染

---

**DZ插件网** 持续为 Discuz! 站长提供性能优化解决方案,发挥 Redis 极致性能,打造高速稳定的社区平台。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
回复 支持 反对

使用道具 举报

bitLv.4 发表于 2025-12-10 08:42:39 | 查看全部 | Google Chrome | Windows 10
我就说吗最近Dz-x插件网的访问速度上来了
原来是用了新东西!
我要说一句 收起回复
回复 支持 反对

使用道具 举报

小墨超可爱Lv.3 发表于 2025-12-10 10:16:59 | 查看全部 | Google Chrome | Windows 10
厉害,学习了刚好用上
我要说一句 收起回复
回复 支持 反对

使用道具 举报

kangsunLv.2 发表于 2025-12-10 14:00:08 | 查看全部 | Google Chrome | Windows 10
看下,谢谢
我要说一句 收起回复
回复

使用道具 举报

bitLv.4 发表于 2025-12-11 12:54:04 | 查看全部 | Google Chrome | Windows 10
看看能不能指定 Redis 缓存数据库呢
在config中指定了数据为 1 实际还是用的DB0
我要说一句 收起回复
回复 支持 反对

使用道具 举报

夜色清泉Lv.2 发表于 2025-12-11 19:52:38 | 查看全部 | Google Chrome | Windows 10
感谢分享,正需要
我要说一句 收起回复
回复 支持 反对

使用道具 举报

amnnujjoLv.2 发表于 2025-12-11 21:31:45 | 查看全部 | Google Chrome | Windows 10
看看怎么弄
我要说一句 收起回复
回复 支持 反对

使用道具 举报

DMCALv.2 发表于 2025-12-13 01:09:03 | 查看全部 | Edg | Windows 10
感谢分享
我要说一句 收起回复
回复

使用道具 举报

bitLv.4 发表于 2025-12-13 22:31:30 | 查看全部 | Google Chrome | Windows 10
6.2版更新了什么东西
我要说一句 收起回复
回复 支持 反对

使用道具 举报

回复

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

本版积分规则

图文热点
关闭

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

最新热评 加载中...
AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

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

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

您的IP:216.73.216.84,GMT+8, 2026-1-27 12:30 , Processed in 2.166253 second(s), 187 queries , Gzip On, Redis On.

Powered by Discuz! X5.1 Licensed

© 2001-2026 Discuz! Team.

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