{"ok":true,"error":"","redis":{"version":"8.2.3","mode":"standalone","uptime_in_seconds":3187753,"connected_clients":80,"instantaneous_ops_per_sec":2301,"total_commands_processed":305216371,"keyspace_hits":283258877,"keyspace_misses":21116023},"memory":{"used_human":"444.50M","peak_human":"450.46M","sys_human":"413.60M","fragmentation":0.93,"used_bytes":466091320,"peak_bytes":472339608,"sys_bytes":433688576,"max_bytes":0},"keyspace":[{"db":"db0","keys":353206,"expires":101795,"avg_ttl":89719215,"avg_ttl_human":"1d 55m"},{"db":"db0_distrib_strings_sizes","keys":0,"expires":0,"avg_ttl":0,"avg_ttl_human":""},{"db":"db0_distrib_sets_items","keys":0,"expires":0,"avg_ttl":0,"avg_ttl_human":""},{"db":"db0_distrib_zsets_items","keys":0,"expires":0,"avg_ttl":0,"avg_ttl_human":""},{"db":"db0_distrib_hashes_items","keys":0,"expires":0,"avg_ttl":0,"avg_ttl_human":""}],"stats":{"hits":0,"misses":0,"gets":0,"mgets":0,"sets":0,"dels":0,"incs":0,"decs":0,"clears":0,"time_get":0,"time_get_multi":0,"time_set":0,"time_set_multi":0,"time_del":0,"time_inc":0,"time_dec":0,"time_clear":0,"time_clear_pat":0,"errors":0,"prefetches":0,"prefetch_hits":0,"ttl_samples":0,"ttl_sum":0,"ttl_forum_samples":0,"ttl_home_samples":0,"ttl_portal_samples":0,"ttl_plugin_samples":0,"strict_key_violations":0,"strict_large_values":0,"strict_compression_recommended":0,"envelope_encoded":0,"envelope_decoded":0,"envelope_decode_fail":0,"envelope_small_bypass":0,"envelope_raw_size":0,"envelope_final_size":0,"serializer_php":0,"serializer_igbinary":0,"serializer_msgpack":0,"serializer_json":0,"serializer_raw":0,"compression_none":0,"compression_lzf":0,"compression_lz4":0,"compression_zstd":0,"compression_saved_bytes":0,"client_version":"1.2.0"},"stats_derived":{"hit_rate":null,"global_hits":283258877,"global_misses":21116023,"global_hit_rate":0.9306249529773973,"requests":0,"ops_per_sec":2301,"commands_total":305216371,"prefetches":0,"slow_commands":0,"errors":0,"error_rate":null,"avg_get_ms":null,"avg_set_ms":null,"avg_req_ms":null,"avg_clear_ms":null,"prefetch_hits":0,"prefetch_hit_rate":null,"ttl_samples":0,"ttl_avg_seconds":null,"ttl_forum_samples":0,"ttl_home_samples":0,"ttl_portal_samples":0,"strict_key_violations":0,"strict_large_values":0,"strict_compression_recommended":0,"ttl_plugin_samples":0,"prefetch_forum":0,"prefetch_forum_hits":0,"prefetch_forum_rate":null,"prefetch_home":0,"prefetch_home_hits":0,"prefetch_home_rate":null,"prefetch_portal":0,"prefetch_portal_hits":0,"prefetch_portal_rate":null,"prefetch_plugin":0,"prefetch_plugin_hits":0,"prefetch_plugin_rate":null,"prefetch_generic":0,"prefetch_generic_hits":0,"prefetch_generic_rate":null,"prefetch_generic_per_request":null,"prefetch_generic_effective":0,"prefetch_generic_skipped_small":0,"prefetch_generic_capped":0,"prefetch_generic_skip_ratio":null,"prefetch_generic_rtt_saved":0,"prefetch_generic_rtt_saved_per_request":0,"env_encoded":0,"env_decoded":0,"env_decode_fail":0,"env_small_bypass":0,"env_raw_size":0,"env_final_size":0,"env_compression_ratio":null,"serializer_php":0,"serializer_igbinary":0,"serializer_msgpack":0,"serializer_json":0,"serializer_raw":0,"serializer_total":0,"compression_none":0,"compression_lzf":0,"compression_lz4":0,"compression_zstd":0,"compression_total":0,"compression_saved_bytes":0,"maxttl":null,"maxttl_enabled":false,"ttl_audit_skipped":0,"ttl_audit_skip_reason":null,"ttl_audit_sampled":800,"ttl_audit_with_ttl":240,"ttl_audit_noexpire":560,"ttl_audit_noexpire_rate":0.7,"ttl_audit_gt_maxttl":0,"ttl_audit_gt_maxttl_rate":0,"ttl_audit_noexpire_top":[{"bucket":"forum","count":483,"rate":0.8625,"examples":["ZT2iXg_forum_threadaddviews_80660","ZT2iXg_forum_attachment_1932"]},{"bucket":"common","count":73,"rate":0.13035714285714287,"examples":["ZT2iXg_common_member_field_home_5965","ZT2iXg_common_member_field_forum_1953"]},{"bucket":"diytemplatenameportal","count":1,"rate":0.0017857142857142857,"examples":["demo2025:H05nPl_diytemplatenameportal"]},{"bucket":"duceapp","count":1,"rate":0.0017857142857142857,"examples":["ZT2iXg_duceapp_member_6763"]},{"bucket":"wq","count":1,"rate":0.0017857142857142857,"examples":["ZT2iXg_wq_cache_favorites_6784"]},{"bucket":"boan","count":1,"rate":0.0017857142857142857,"examples":["ZT2iXg_boan_avatar_3933"]}],"ttl_audit_noexpire_suggest_patterns":["*forum_threadaddviews_*","*forum_attachment_*","*common_member_field_home_*","*common_member_field_forum_*","*common_member_profile_*","*common_member_status_*","*common_member_*","*common_member_count_*","*duceapp_member_*","*wq_cache_favorites_*","*forum_collectionrelated_*","*boan_avatar_*"],"ttl_audit_gt_maxttl_top":[],"ttl_audit_gt_maxttl_suggest_patterns":[],"ttl_audit_noexpire_callers_top":[],"ttl_audit_noexpire_callers_examples":[],"ttl_audit_noexpire_callers_top_agg":[],"ttl_audit_noexpire_callers_ops_top":[],"ttl_audit_noexpire_callers_via_top":[],"ttl_audit_noexpire_callers_via_top_agg":[],"ttl_audit_noexpire_callers_via_examples_agg":[],"ttl_audit_noexpire_cross_index":[],"ttl_audit_noexpire_callers_examples_agg":[],"ttl_audit_noexpire_suspects":[{"bucket":"forum","noexpire_count":483,"noexpire_rate":0.8625,"hotmiss":0,"hotaccess":0,"hint":"","advice":"建议：对业务前缀做定向收敛，避免 Flush Everything。"}],"prefetch_key_rates":{"overall":{"prefetch_keys":0,"hit_keys":0,"hit_rate":null},"forum":{"prefetch_keys":0,"hit_keys":0,"hit_rate":null},"home":{"prefetch_keys":0,"hit_keys":0,"hit_rate":null},"portal":{"prefetch_keys":0,"hit_keys":0,"hit_rate":null},"plugin":{"prefetch_keys":0,"hit_keys":0,"hit_rate":null},"generic":{"prefetch_keys":0,"hit_keys":0,"hit_rate":null}}},"prefetch_key_top":[],"waf":{"enabled":false,"blocklist_key":"","score_prefix":"","blocklist_count":0,"error":""},"prefix":{"prefix":"","keys":null,"error":""},"codec":{"serializer":"php","compression":"none","envelope":false,"dynamic_ttl":false,"capabilities":{"serializer_igbinary":true,"serializer_msgpack":false,"serializer_json":true,"compression_lzf":false,"compression_lz4":false,"compression_zstd":false,"php_igbinary":true,"php_msgpack":false,"php_zstd":true,"phpredis_version":"5.3.7","igbinary_version":"3.2.14","msgpack_version":null,"zstd_version":"0.14.0","lzf_version":null,"opcache_enabled":true,"opcache_cli_enabled":true,"opcache_jit":false,"opcache_jit_buffer":false},"max_ttl":0,"ttl_jitter":0,"async_flush":false,"strict":false},"connection":{"mode":"tcp","server":"127.0.0.1","host":"127.0.0.1","port":6379,"socket":null,"database":0,"persistent":true,"auth":false,"maxmemory_policy":"allkeys-lru","socket_exists":null,"socket_readable":null,"socket_owner":null,"socket_perms":null,"php_user":"www","fallback_to_tcp":false,"messages":[]},"diagnostics":[{"level":"warn","message":"TTL 生命周期风险：采样 800 个 key，其中约 70% 为无 TTL（no-expire）。 主要来源：forum(86.3%)、common(13%)、diytemplatenameportal(0.2%)。 建议：启用\/确认 maxttl，并优先对“业务前缀”做定向收敛（避免 Flush Everything）。 可选 pattern：*forum_threadaddviews_*, *forum_attachment_*, *common_member_field_home_*, *common_member_field_forum_*, *common_member_profile_*, *common_member_status_*, *common_member_*, *common_member_count_*, *duceapp_member_*, *wq_cache_favorites_*, *forum_collectionrelated_*, *boan_avatar_*（建议先从非核心业务段开始，避免 syscache\/rt）。"},{"level":"warn","message":"Redis 未设置 maxmemory（当前为 0 \/ 未限制）。在高写入或 key 数增长时，可能导致系统内存压力与抖动。建议：为 Redis 设置合理的 maxmemory（预留 OS\/Buffer 与 PHP-FPM 内存），并配合合适的 maxmemory-policy（当前：allkeys-lru）。"},{"level":"info","message":"No-expire 证据链：已将无 TTL 的业务族与 hot keys 进行关联（用于定位绕过 normalizeTtl 的写入路径）。Top: forum hotmiss=0 hotaccess=0。建议：优先排查 lock\/security 相关写入是否存在 set 后未 expire、或插件直连 Redis 绕过 RedisProClient。"},{"level":"info","message":"Codec 概览：serializer=php（php=0%，igbinary=0%），compression=none（zstd=0\/1，saved=0 B）。"}],"generated_at":"2026-06-14 11:07:03","auto_flush":{"last_run":null},"ttl_caps":{"ttl_audit_noexpire_cross_index":[],"ttl_caps_advisor":{"candidates":[],"snippet":"\/\/ ===== TTL Caps Advisor (generated) =====\n\/\/ 放到 config_global.php 的 $_config['memory']['redis']['key_ttl_caps'] 或 bucket_ttl_caps 中（建议先人工确认）\n\/\/ ===== END TTL Caps Advisor =====\n"}},"rt_fragments_roi":{"present":true,"date":"20260614","key":"stats:rt:roi:20260612","count":1,"hit":0,"miss":3,"db":3,"db_any":1,"hit_rate":0,"db_rate":100,"db_rate_metric":300,"ttl_current":{"todayposts":10,"onlinenum":25,"members":30,"throttle_todayposts":1,"throttle_onlinenum":3,"p_todayposts":0.15,"p_onlinenum":0.06,"ts":1781406423,"source":"autotune","decision":"scale_up"},"avg_latency_us":29133,"p95_latency_us":50000,"buckets":{"le_1000":0,"le_2000":0,"le_5000":0,"le_10000":0,"le_20000":0,"le_50000":1,"le_100000":0,"le_200000":0,"le_500000":0,"le_1000000":0,"gt_1000000":0},"per_metric":{"todayposts":{"hit":0,"miss":1,"db":1},"members":{"hit":0,"miss":1,"db":1},"onlinenum":{"hit":0,"miss":1,"db":1}},"notes":["DB 回源率(按指标累计)可超过 100%：单次请求可能对多个指标分别发生 DB 回源；面板主展示已使用“任一指标 DB 回源”口径。","Refresh ROI：ok(3) > attempt(1)，已在面板口径中执行 clamp（需检查 realtime 脚本的 refresh_ok 计数逻辑）。","Refresh ROI：attempt=1 ok=3 lock_block=0 throttle_block=0 ok_rate=100%","RT Health：RISK · hit=0% · db=300% · p95=50ms · refresh_ok=100%","RT 建议：LightCache 命中率偏低：建议适度上调 soft TTL（todayposts\/onlinenum）或降低刷新触发概率，优先减少 miss。；DB 回源占比较高：建议提高 hard TTL（优先 onlinenum\/todayposts），或增强 cookie\/syscache 快路径以减少 session\/db 计数频率。"],"refresh":{"attempt":1,"ok":3,"fail":0,"lock_block":0,"throttle_block":0,"ok_clamped":1},"refresh_per_metric":{"todayposts":{"attempt":0,"ok":1,"lock_block":0,"throttle_block":0,"ok_clamped":1},"members":{"attempt":1,"ok":1,"lock_block":0,"throttle_block":0,"ok_clamped":1},"onlinenum":{"attempt":0,"ok":1,"lock_block":0,"throttle_block":0,"ok_clamped":1}},"refresh_derived":{"ok_rate":100,"lock_block_rate":0,"throttle_block_rate":0},"swr":{"stale_served":0,"force_maxstale":0,"blocked_lock":0,"blocked_throttle":0},"swr_derived":{"stale_rate":0},"health":{"level":"risk","summary":"RISK · hit=0% · db=300% · p95=50ms · refresh_ok=100%","actions":["LightCache 命中率偏低：建议适度上调 soft TTL（todayposts\/onlinenum）或降低刷新触发概率，优先减少 miss。","DB 回源占比较高：建议提高 hard TTL（优先 onlinenum\/todayposts），或增强 cookie\/syscache 快路径以减少 session\/db 计数频率。","p95 延迟偏高：建议检查 refresh 时 DB\/session 计数耗时，必要时提高 hard TTL 或优化 session 表索引与清理频率。"],"signals":{"hit_rate":0,"db_rate_metric":300,"p95_latency_us":50000,"refresh_ok_rate":100,"refresh_lock_block_rate":0,"refresh_throttle_block_rate":0}},"autotune":{"enabled":1,"decision":"scale_up","good_streak":0,"bad_streak":2,"signals":{"hit_rate":0,"db_rate_metric":0,"db_rate_onlinenum":100,"p95_latency_us":0,"refresh_ok_rate":0,"refresh_lock_block_rate":0},"prev":{"todayposts":10,"onlinenum":20,"members":30,"throttle_onlinenum":2,"p_onlinenum":0.08},"ttl_current":{"todayposts":10,"onlinenum":25,"members":30,"throttle_todayposts":1,"throttle_onlinenum":3,"p_todayposts":0.15,"p_onlinenum":0.06,"ts":1781406423,"source":"autotune","decision":"scale_up"}}},"prefetch_optimizer":{"enabled":0,"sample_rate":null,"ttl":null,"groups":[],"snippet":"'prefetch_key_stats' => 1,\n'prefetch_key_sample_rate' => 0.05,\n'prefetch_key_stats_ttl' => 86400,\n","notes":["尚未开启 prefetch_key_stats 采样；Top HIT\/MISS 将为空。"]}}