Redis技术文章
-
缓存击穿是热点key过期瞬间并发请求涌向DB,需用逻辑过期、随机过期时间、分级预热、互斥锁及行为验证来防控。455 收藏 -
不能。volatile-ttl仅在内存不足时随机采样少量带过期时间的key淘汰TTL最小者,并非定时批量清理;高QPS下写入快于淘汰易致OOM,需配合随机偏移、调优采样数、限流及兜底策略。454 收藏 -
RedisCommandTimeoutException本质是命令执行完成但客户端未及时收到响应,与连接池大小无关;应优先调整command-timeout、keepalive及tcpUserTimeout等网络层参数。454 收藏 -
根本原因是客户端频繁新建并立即关闭TCP连接,导致Linux内核在主动关闭方维持TIME_WAIT状态(2×MSL,通常60秒),端口无法复用;Redis服务端不产生该状态,问题源于客户端未复用连接池、错误调用close()、配置不当或框架内重复初始化。454 收藏 -
volatile-lru是仅对设置了TTL的key生效的近似LRU淘汰策略,不淘汰无过期时间的key;必须显式配置maxmemory-policy且配合EXPIRE或SETEX使用,否则无效。454 收藏 -
是,HLL适合统计日活UV,但需接受约0.81%误差且不支持成员查询与精确交集;按日期分key(如uv:20240520)、设过期、统一用户标识方可稳健使用。453 收藏 -
发布订阅模式适合实时性要求极高、可容忍消息丢失、一对多广播型通知场景,如服务状态广播、实时日志分发、WebSocket用户事件广播;Stream适合需持久化、至少一次投递、支持消费者组与重试的场景,如订单异步处理、用户行为埋点、审计日志归档。452 收藏 -
不能。Redis6–7.0的ACL不支持Key前缀通配符(如~tenant:a:),仅支持字面Key名或~;7.0起虽有实验性前缀匹配,但生产未验证且不支持嵌套通配。452 收藏 -
Redis集群不支持Pub/Sub跨节点广播,因设计上无全局频道路由机制,PUBLISH消息仅被本地订阅者接收;应改用单节点Redis+连接池,或升级至Kafka/Pulsar等专业消息中间件。451 收藏 -
volatile-lru适合电商购物车场景,但需为每个购物车key显式设置TTL并定期刷新;它仅淘汰带过期时间的key,采样随机且保守,不适用于依赖访问频次的场景。450 收藏 -
预热不充分指预热数据未覆盖真实热点、未执行完或未及时更新,导致上线后2–5分钟内缓存击穿;须用线上采样等动态数据源、分批超时控制、命中率校验及事件驱动机制。445 收藏 -
RedisPub/Sub不支持优先级,仅为瞬时广播;真正优先级队列需用List+BRPOP多键轮询,按queue:high→queue:medium→queue:low顺序原子消费,Pub/Sub仅作轻量通知触发器。441 收藏 -
volatile-ttl策略仅在内存达限且有写入时触发,随机采样已设TTL的key并淘汰其中剩余过期时间最短者,并非主动或精准清理“马上过期”的key。441 收藏 -
RedisTemplate操作Hash返回null的主因是序列化器不一致:key、hashKey、value三者序列化方式必须匹配,尤其hashKey须用StringRedisSerializer,value推荐Jackson序列化,否则反序列化失败或读不到数据。439 收藏 -
intset是Redis对全整数小集合的内存优化编码,将整数紧凑存储于连续内存,无指针和字符串头开销,比hashtable节省3–5倍内存;前提为元素均为合法64位有符号整数且数量不超set-max-intset-entries(默认512)。439 收藏