{"ok":true,"error":"","redis":{"version":"8.2.3","mode":"standalone","uptime_in_seconds":2282092,"connected_clients":32,"instantaneous_ops_per_sec":1425,"total_commands_processed":209680947,"keyspace_hits":180242860,"keyspace_misses":14268993},"memory":{"used_human":"319.35M","peak_human":"372.93M","sys_human":"342.44M","fragmentation":1.07,"used_bytes":334861032,"peak_bytes":391050552,"sys_bytes":359075840,"max_bytes":0},"keyspace":[{"db":"db0","keys":306214,"expires":76402,"avg_ttl":100566949,"avg_ttl_human":"1d 3h"},{"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":180242860,"global_misses":14268993,"global_hit_rate":0.9266420386216772,"requests":0,"ops_per_sec":1425,"commands_total":209680947,"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":190,"ttl_audit_noexpire":610,"ttl_audit_noexpire_rate":0.7625,"ttl_audit_gt_maxttl":0,"ttl_audit_gt_maxttl_rate":0,"ttl_audit_noexpire_top":[{"bucket":"forum","count":533,"rate":0.8737704918032787,"examples":["ZT2iXg_forum_threadaddviews_170434","ZT2iXg_forum_attachment_38180"]},{"bucket":"common","count":74,"rate":0.12131147540983607,"examples":["ZT2iXg_common_member_field_forum_4709","ZT2iXg_common_session_idx_ip_44.223.115.10"]},{"bucket":"posttableids","count":1,"rate":0.001639344262295082,"examples":["ZT2iXg_posttableids"]},{"bucket":"wq","count":1,"rate":0.001639344262295082,"examples":["ZT2iXg_wq_cache_articlepollagainst_3510"]},{"bucket":"wsq","count":1,"rate":0.001639344262295082,"examples":["ZT2iXg_wsq_threadlist_155084"]}],"ttl_audit_noexpire_suggest_patterns":["*forum_threadaddviews_*","*forum_attachment_*","*common_member_field_forum_*","*common_member_status_*","*common_member_*","*common_member_count_*","*common_member_profile_*","*common_member_field_home_*","*forum_collectionrelated_*","*wq_cache_articlepollagainst_*","*wsq_threadlist_*"],"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":533,"noexpire_rate":0.8737704918032787,"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，其中约 76.25% 为无 TTL（no-expire）。 主要来源：forum(87.4%)、common(12.1%)、posttableids(0.2%)。 建议：启用\/确认 maxttl，并优先对“业务前缀”做定向收敛（避免 Flush Everything）。 可选 pattern：*forum_threadaddviews_*, *forum_attachment_*, *common_member_field_forum_*, *common_member_status_*, *common_member_*, *common_member_count_*, *common_member_profile_*, *common_member_field_home_*, *forum_collectionrelated_*, *wq_cache_articlepollagainst_*, *wsq_threadlist_*（建议先从非核心业务段开始，避免 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-04-30 07:13:33","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":false,"date":"20260430","key":"stats:rt:roi:20260429","count":0,"hit":0,"miss":0,"db":0,"db_any":0,"hit_rate":null,"db_rate":null,"db_rate_metric":null,"ttl_current":[],"avg_latency_us":null,"p95_latency_us":null,"buckets":[],"per_metric":[],"notes":[]},"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 将为空。"]}}