缓存系列文章--4.缓存的粒度控制

转载请注明出处:http://carlosfu.iteye.com/blog/2269678

一、什么是缓存粒度

下面这个图是很多项目关于缓存使用最常用的一个抽象,那么我们假设storage层为mysql, cache层为redis。
这里写图片描述

    假如我现在需要对视频的信息做一个缓存,也就是需要对select * from video where id=?的每个id在redis里做一份缓存,这样cache层就可以帮助我抗住很多的访问量(注:这里不讨论一致性和架构等等问题,只讨论缓存的粒度问题)。

    我们假设视频表有100个属性(这个真有,有些人可能难以想象),那么问题来了,需要缓存什么维度呢,也就是有两种选择吧:

java代码:

catch(id)=select * from video where id=#id 
catch(id)=select importantColumn1, importantColumn2 .. importantColumnN from video where id=#id  

    其实这个问题就是缓存粒度问题,我们在缓存设计应该佮预估和考虑呢?下面我们将从通用性、空间、代码维护三个角度进行说明。

二、全部数据和部分数据比较

1. 两者的特点是显而易见的:
数据类型通用性空间占用(内存空间 + 网络码率)代码维护
全部数据简单
部分数据较为复杂
2. 通用性

    如果单从通用性上看、全部数据是最优秀的,但是有个问题就是是否有必要缓存全部数据,任
务以后会有这样的需求,但是从经验上看除了非常重要的信息,哪些不重要的字段基本不会再绣球里出现,也就是说着中通用性,通常都是想象出来的。太多人觉得通用性是最重要的。vid拿一些基本信息,回想专辑明星,于是加了全局的,通用性很重要,但是要想清楚。

3. 空间占用:

    很显然,缓存全部数据,会占用大量的内存,有人会说,不就费一点内存吗,能有多少钱?而且已经有人习惯了把缓存当做下水道来使用,什么都框框的往里面放,但是我这里要说内存并不是免费的,可以说是很珍贵的资源。instagram21->4G的例子就说明了这个道理,好的程序员可以帮助公司节约大量的资源。

4. 代码维护:

    代码维护性,全部数据的优势更加明显,而部分数据一旦要加新字段就会修改代码,而且还需要对原来的数据进行刷新。

三、总结:

    缓存粒度问题是一个容易被忽视的问题,如果使用不当,可能会造成很多无用空间的浪费,可能会造成网络带宽的浪费,可能会造成代码通用性较差等情况,必须学会综合数据通用性、空间占用比、代码维护性 三点评估取舍因素权衡使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值