开发者社区> 问答> 正文

求选择哪个缓存设计好一些?

最近在做一个类似贴吧一样的东西,在数据上想用redis缓存,但是现在有两个想法,不知道哪个更实际一些,求大家指点。

所有内容都会存mysql这个没的说
帖子列表永驻redis这个也没的说

问题是帖子内容怎么办。

一种想法是存一定数量的帖子内容到缓存里,比如1000条。用户访问时根据所在页面和条数,前1000条的请求都从redis中读取,超过1000条之后的旧数据就从mysql中读取。有新帖子且缓存达到1000条时就LPUSH新的RPOP旧的。

另一种想法是所有新增的帖子数据都存在redis中,并且都设置一个过期时间,比如24小时。用户有访问过就将这条数据的过期时间增加到24小时,如果没有访问过就从redis中删除。用户访问的时候先查redis,查不到再去mysql中查,顺便再写入redis。

这两种办法哪个好一些?

展开
收起
蛮大人123 2016-02-13 14:25:58 2591 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    第二种当然更实用一些,代码也容易实现。第一个逻辑复杂一些不太好弄。。。。。
    不过第二个,你还可以改进一下:
    在缓存失效的时候,需要先查询redis,找不到数据,再查询MySQL,最后再写入redis。这里更新缓存的时候会多出两次redis查询。
    1.
    比不使用缓存还要慢。。。
    2.
    缓存失效的时候,如果有并发请求,则会重复更新redis缓存。
    你可以参考我用Python实现的一个类解决了第一点https://github.com/lloydzhou/StaleRedisCache
    1.
    给缓存多设置一段缓冲时间
    2.
    若在缓冲期内,直接使用过期数据,并使用异步任务更新缓存。
    3.
    你还可以借用redis实现一个内存锁,解决上面第二点的并发问题。
    (我项目中没有做,是因为外面有nginx页面缓存,在里面应用层很难遇到并发问题)

    2019-07-17 18:41:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于英特尔 SSD 的虚拟机缓存解决SSD 立即下载
用户态高速块缓存方案 立即下载
高性能Web架构之缓存体系 立即下载