跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
分布式缓存
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= 分布式缓存 = '''分布式缓存'''是一种将数据存储在多个服务器节点上的缓存系统,旨在提高应用程序的性能、可扩展性和容错能力。它通过将热点数据缓存在内存中,减少对后端数据库的访问压力,从而显著提升系统的响应速度。分布式缓存广泛应用于高并发场景,如电商、社交网络和实时数据分析等。 == 核心概念 == === 缓存一致性 === 分布式缓存需要解决多个节点间的数据一致性问题。常见的一致性模型包括: * '''强一致性''':所有节点在任何时刻看到的数据都相同。 * '''最终一致性''':允许短暂不一致,但最终会达到一致状态。 数学上,最终一致性可以表示为: <math>\lim_{t \to \infty} P(data\_is\_consistent) = 1</math> === 缓存淘汰策略 === 当缓存空间不足时,系统需要决定哪些数据被淘汰。常见策略包括: * '''LRU'''(Least Recently Used) * '''LFU'''(Least Frequently Used) * '''FIFO'''(First In First Out) == 实现方式 == === 客户端分片 === 客户端直接决定数据存储在哪个节点上,通常通过哈希算法实现: <syntaxhighlight lang="python"> def get_cache_node(key, nodes): hash_value = hash(key) return nodes[hash_value % len(nodes)] </syntaxhighlight> === 代理模式 === 通过中间代理层(如Twemproxy)将请求路由到正确的缓存节点。 === 集群模式 === Redis Cluster等解决方案提供自动分片和故障转移功能。 == 实际案例 == === 电商平台商品详情 === 典型的读多写少场景,使用分布式缓存后的架构: <mermaid> graph LR A[客户端] --> B[负载均衡器] B --> C[缓存集群] C -->|缓存命中| A C -->|缓存未命中| D[数据库] D --> C </mermaid> === 社交网络好友关系 === 复杂关系数据通过缓存加速查询: <syntaxhighlight lang="java"> // 伪代码:获取用户好友列表 List<Long> getFriends(Long userId) { String cacheKey = "friends:" + userId; List<Long> friends = cache.get(cacheKey); if (friends == null) { friends = database.query("SELECT friend_id FROM relations WHERE user_id = ?", userId); cache.set(cacheKey, friends, TTL_24HOURS); } return friends; } </syntaxhighlight> == 常见问题与解决方案 == {| class="wikitable" |- ! 问题 !! 解决方案 |- | 缓存穿透 || 布隆过滤器+空值缓存 |- | 缓存雪崩 || 随机过期时间+多级缓存 |- | 热点Key问题 || 本地缓存+Key分片 |} == 性能优化 == * '''批量操作''':减少网络往返次数 * '''管道技术''':Redis Pipeline示例: <syntaxhighlight lang="redis"> > MULTI > SET key1 value1 > SET key2 value2 > EXEC </syntaxhighlight> * '''异步刷新''':后台定期更新缓存 == 进阶主题 == === 一致性哈希 === 解决节点增减导致的重新哈希问题: <mermaid> graph A[Key1] --> B[NodeA] C[Key2] --> D[NodeB] E[Key3] --> B style B fill:#f9f style D fill:#9f9 </mermaid> 数学表示: <math>h(key) \mod 2^{32}</math> 将哈希空间组织为环 === 多级缓存架构 === 典型的三级缓存结构: 1. 本地缓存(Guava/Caffeine) 2. 分布式缓存(Redis/Memcached) 3. 持久化存储(MySQL/MongoDB) == 总结 == 分布式缓存是现代分布式系统的关键组件,通过合理设计和调优可以: * 将读取性能提升10-100倍 * 降低数据库负载50-90% * 提高系统整体可用性 实际部署时需要根据业务特点选择合适的一致性级别、分片策略和淘汰算法,并持续监控缓存命中率等关键指标。 [[Category:计算机科学]] [[Category:面试技巧]] [[Category:分布式系统]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)