如何管理项目中的缓存应用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
arzon
V2EX    程序员

如何管理项目中的缓存应用

  •  
  •   2012-04-05 15:35:08 +08:00 4060 次点击
    这是一个创建于 5012 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这里暂且把memcached作为缓存的具体实现方便讨论.

    我想到的是两种方案, 但各自都存在一些缺点.

    1. 对单表进行缓存
    优点:
    a:对于key的维护简单. key与表对应, value与表数据对应. 表数据发生变化时, 能够主动对对应的缓存数据进行增量更新.
    b: 内存中不会有重复数据, 空间利用率高

    缺点:
    a, 开发难度增加. 因为绝大多数的取数据都是带条件查询甚至多表关联查询, 这样就需要把使用的单表数据先取出来, 然后在程序中进行条件过滤. 业务逻辑处理相对会复杂很多.
    b, 系统负担加大. 在每次查询都需要先取出对应的单表或多表数据进行遍历过滤, 加大了系统负担, 甚至这个过程比直接用SQL查询数据库花的时间更长.

    ----------------------------------------------------------------

    2. 直接缓存查询后的结果集数据块, 通常以对应的查询SQL做为KEY
    优点:
    a, 查找效率高, 通过KEY找到的value就是我们所要的数据, 无需进行额外的数据处理.

    b, 开发效率高. 相对来说缓存层甚至可以实现透明化

    缺点:
    a, 内存利用率差. 同一条数据库记录会在多个KEY中重复.

    b, 管理缓存中数据块的更新困难. 当key对应的查询条件的数据内容在数据库端发生变化时, 比如新增了一条纪录或删除了一条纪录, 却无法更新相关联的缓存. 因为无法知道这条发生变化的纪录是与哪些key有关系的. 只能等待缓存过期后, 被动地去数据库端重新查询数据再缓存. 如果这个查询比较复杂的话, 那对应用来说是有很危险的, 实际上缓存就不能起到预期的作用.

    从使用上觉得第二种方式相对来说应该更合适些, 但是对应的缺点却是很头疼的问题, 尤其是缺点b. 如果缓存数据不能主动更新, 很可能会导致展现的BUG.

    不知道大家在实际使用过程中采用的是什么方式? 有没有办法能够解决第二种方式的缺点呢? 欢迎大家一起来探讨.
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     905 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 22:19 PVG 06:19 LAX 14:19 JFK 17:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86