我正在开发一个网站来显示某种文章,就像stackoverflow一样 .

每篇文章都包含 Headers ,描述和一些经常更改的字段(如view_count) .

该网站还支持游标分页(max_id,since_id),过滤(按类别,标签) .

我想使用Redis添加缓存层 . 我心中有一些选择:

  • 使用zset存储前1000个蚁群ID列表 . 每个过滤器都有一个zset,如 articles:category:{category_id} articles:tag:{tag_id} . 发布新文章时,每个zset都会更新 .

使用哈希来存储每篇文章,如 article:{article_id}

直接在缓存中为每个视图更新view_count,并在某个时刻同步到db .

使用 ZRANGEBYSCORE 实现游标分页(分数是发布时间戳) .

  • 优点:永远不需要使缓存过期 . 新文章立即显示 .

  • 缺点:难以实施,可能容易出错 . 需要一些像rabbitmq这样的消息传递机制 .

  • 使用数据库进行过滤和分页,只返回id列表,redis中的缓存id列表,并设置一些TTL(10秒) . 仍然使用哈希来缓存每篇文章,因此可以立即更新view_count .

  • 优点:易于实现,无需消息传递机制 . 缓存过期时,只需要查询id列表 .

  • 缺点:需要每隔10秒查询新的id列表数据库,10秒后会显示新文章,但view_count会立即更新 .

  • 使用redis缓存每个查询的acticle列表,将其序列化为json,并设置TTL .

  • 优点:最容易实现(使用spring @Cacheable) .

  • 缺点:缓存将经常过期,需要再次查询数据库 . 只有在缓存过期时才会更新view_count .

我不知道女巫是一个更好的选择,性能和稳定性 . 谢谢您的帮助 .