yuanxiaojiao0012
琉璃糖
采纳率20%
2017-04-14 02:04

Memcache缓存sql查询结果,数据变了如何更新缓存

2
已采纳

网上提到Memcache的一种使用场景,缓存sql查询结果,具体操作时将sql语句的md5值作为key,查询结果作为value放到Memcache中,但是如果此时数据库涉及该sql语句的表数据有了更新,该如果更新缓存中的值?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • zhangsheng_1992 zhangsheng_1992 4年前

    这种根据sql语句md5的方式现在已经很少用了,原因就是查询与更新可能在两个不同的业务情景中,
    你总不能在更新数据的同时把查询用到所有sql整理出来再计算md5后重新set吧?
    如果不想这样么干,比较好的做法就是设置一个短点的时效时间,比如60秒,利用过期策略去更新数据,
    但是问题也很明显

    第一个是缓冲穿透

    第二个是数据一致性问题

    现在比较常见的做法是根据查询条件加表名等来作为key 这样的一个key-value只保存一条记录 比如 key为usertable_id_1保存user_id为1的用户信息
    后台更新操作的时候也是根据查询字断user_id来更新的 这个时候根据user_id就可以直接得到需要更改的缓存key 直接去修改即可 但这样也有问题,
    1是数据库中的key会非常非常多 保存key也需要内存 key:value = 1:1 所以实际存储数据的空间只能占到一半
    2.创建key的规则需要定义好 保证多张表的规则不冲突 而且在分表情况下处理会很麻烦

    点赞 评论 复制链接分享
  • u011606457 _1_1_7_ 4年前

    不变的数据(比如字典表,配置参数表等)可以缓存;
    相对稳定的数据,也可以考虑缓存(加个比较长的有效时间),时效期到了就重新查询数据库;
    如果经常变化的数据就没必要缓存了;

    点赞 评论 复制链接分享

相关推荐