redis - 如何维护 key-value 缓存

 mobiledu2502873617 发布于 2022-10-27 04:53

做web,经常会用到key-value的缓存,虽然快,但缓存的维护是个问题,就拿sgementfault举例来说,如果我来做,首页的问题分页就涉及到
1.问题总数缓存
2.每页问题清单缓存

现在管理员删除了一个问题,那么为满足实时性,肯定需要更新缓存
1.问题总数缓存-1
2.每页问题清单缓存如何更新?
当然可以查数据库算出来,是否有这个必要?

这只是个例子,为了说明问题,为了更新一个缓存而造成了另外的数据库查询开销。在实际过程中,我经常用查询条件的组合作为key,这使得我在更新缓存时无从下手(虽然我自己手工维护了一个缓存key的清单,但难免会有遗漏,终归不是好办法)。但如果把缓存的key都定义死,则缓存的使用不是那么灵活。

3 个回答
  • 使用缓存主要目的是为了减轻数据库的压力,过于频繁的更新缓存是不太合理的。
    一、放弃实时性,当数据到达某个定义的阀值时更新缓存。
    二、使用搜索引擎如sphinx的实时增量索引。

    2022-11-12 01:43 回答
  • 1. 问题总数缓存的用@jawa 提供的 memcache incr/decr 就挺好的
    2. 每页问题清单,这个,可以不维护列表而只缓存问题内容,列表本身从数据库查就好。也的确是如@jawa 所说,看量。细节上可以有很多解决方案,有非常粗粒度的方法,比如前面说的列表本身直接从数据库查;也有非常细的方法,比如新浪微博的内容转发、评论次数都是二次获取,解耦了内容的变化(较少)和计数的变化(频繁)

    2022-11-12 01:43 回答
  • 建议如此处理:

    1. 问题总数缓存

    $memcached->increment('sum', $sum);

    参考:http://www.php.net/manual/zh/memcache...

    2.每页问题清单缓存如何更新?

    没有细想,如果是我的话可能会用一个end_id作为结束戳,然后有新的问题过来就向前递增,每100+汇总一次刷新,主要还是看量,脱离了量的情况下不好判断(开始小的情况下就直接刷db三分钟一次也没问题)

    2022-11-12 01:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有