琉璃糖 2017-04-14 02:04 采纳率: 20%
浏览 2942
已采纳

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

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

  • 写回答

2条回答 默认 最新

  • zhangsheng_1992 2017-04-14 02:21
    关注

    这种根据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的规则需要定义好 保证多张表的规则不冲突 而且在分表情况下处理会很麻烦

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多