内容提要
分布式缓存架构中,缓存是介于数据源与访问者之间的高速存储,关键指标为命中率,受键集合大小、内存空间和生存时间影响。常见类型包括代理缓存、CDN、通读缓存和旁路缓存。需防范缓存雪崩、穿透,并做好预热。Redis支持复杂数据结构、主从复制和16384槽集群,优于Memcached。
延伸解读
缓存命中率:分布式缓存的核心指标
缓存命中率是衡量缓存有效性的关键指标,它取决于缓存键集合大小、可用内存空间和对象生存时间。键集合越小,重用机会越大;内存空间越大,能缓存的对象越多,命中率越高;TTL 越长,对象被重用的可能性也越高。因此,在设计缓存时,应尽量缩小键空间、合理分配内存并设置适当的过期时间,以提升整体性能。
缓存失效策略:如何平衡一致性与性能
缓存数据与数据源之间可能存在不一致,通常通过设置失效时间来容忍一定延迟。数据更新时,立即更新缓存会带来额外开销和事务一致性问题,更稳妥的做法是通知缓存失效并删除数据。此外,缓存雪崩、穿透和预热也是必须考虑的问题。例如,雪崩可通过高可用集群和熔断降级缓解,穿透可缓存空值并设置短 TTL,预热则能在系统启动时加载热点数据,避免初期性能波动。
Redis 与 Memcached:分布式缓存选型对比
Redis 相比 Memcached 支持更复杂的数据结构、多路复用异步 I/O、主从复制高可用以及原生集群模式。Redis 集群预分 16384 个槽,通过 CRC16 算法决定键的分布,客户端可连接任意节点,节点间相互通信。这些特性使 Redis 更适合需要高可用、复杂数据操作和水平扩展的场景,而 Memcached 则更简单,适用于纯键值缓存。
Q&A
什么是缓存?它和缓冲有什么区别?
缓存是介于数据访问者和数据源之间的高速存储,用于在数据需要多次读取时加快读取速度。缓冲常用于硬盘、网络等低速介质的读取。
影响缓存命中率的主要因素有哪些?
影响缓存命中率的主要因素有三个:缓存键集合大小、缓存可使用内存空间、缓存对象生存时间(TTL)。键集合越小、内存空间越大、生存时间越长,命中率通常越高。
常见的缓存类型有哪些?
常见的缓存类型包括代理缓存、内容分发网络(CDN)、通读缓存(read-through)和旁路缓存(cache-aside)。其中代理缓存、反向代理缓存和CDN都属于通读缓存;对象缓存是一种旁路缓存。
什么是缓存雪崩?如何应对?
缓存雪崩是指缓存服务器崩溃后,数据库因无法承受全部访问压力而宕机,导致整个网站不可用。应对措施包括缓存预热(启动时加载热点数据)等。
缓存穿透是什么?有什么简单的解决办法?
缓存穿透是指持续高并发请求某个不存在的数据,由于缓存没有保存该数据,所有请求都落到数据库上,造成巨大压力甚至崩溃。简单的对策是将不存在的数据也缓存起来(value为null),并设定较短的失效时间。
Redis和Memcached相比有哪些优势?
Redis相比Memcached的优势包括:支持复杂的数据结构、支持多路复用异步I/O实现高性能、支持主从复制高可用、原生集群与share nothing集群模式。
Redis集群是如何分片的?
Redis集群预分好16384个桶(slot),当需要在集群中放置一个key-value时,根据CRC16(key) mod 16384的值决定将key放到哪个桶中。所有物理节点映射到[0-16383] slot上,cluster负责维护slot与服务器的映射关系。