缓存是架构当中非常重要的部分,高性能场景绕不开的话题
缓存的底层几个思想:空间换时间,局部性原理
缓存选型
技术选型标准,永远是最适合的是最好的,要实事求是,作为一个架构师最核心的还是tradeoff,永远不存在最优解,你是架构师就告别了酷炫都是柴米油盐的权衡。简单展开一下,不感兴趣的直接跳过
-
选择你最熟悉,你无法驾驭啥都白扯,技术收益=技术天花板*适合程度*熟悉程度
-
社区是否活跃,不要陷入
alone in the dark
,可以去StackOverFlow等搜下内容量和新来判断 -
技术是否还在持续成长,好的技术永远跑在业务前面,技术的生命周期必须显著长于项目的生命周期,意味着项目还可以持续吸收技术红利,如BigTable、MapReduce、GFS。这是一个大topic,你是否还记得下图
-
结合业务思考,时间是检验真理的唯一标准,在公司这个商业机构里面,最最底层永远是ROI、人效、利润等概念。距离这些越近对他们影响越大你的项目就越有价值
-
一定要验证再试用,小范围验证,从业务范围和团队梯队角度等考虑。要重视经验类的东西,注意是重视而不是拘泥于。经验的关键是要扩大输入,多交流,别人家是怎么做的
-
要多学习,掌握各不同开源方案的优缺点,这样在你需要做决策的时候才能提升正确的概率,这是根本
Memcache
-
是非常非常不错的方案之一,性能
-
全内存不支持持久化
-
value默认大小不超过1m,可以通过参数调,只能存储kv没有其他数据结构
-
memcache比较经典的内存池方式slabs管理(图1/2/4)如果插入item的时候先选择刚刚大于自己size的slab class(图3),这就存在了浪费(图5)的可能性这个依赖于数据分布,解法就是优化合理的增长因子
-
Page:实际物理空间,默认1m的固定大小,这是为何只能默认最大为1m的item
-
Chunk->Slab :同样大小的chunk称之为slab(图4)
-
-
也可以手动移除