Redis缓存策略

时间:2017-05-01 06:56:47

标签: caching redis

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

每篇文章都包含标题,说明和一些经常更改的字段(例如view_count)。

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

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

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

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

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

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

    • 优点:永远不需要使缓存过期。新文章立即显示。
    • 缺点:难以实施,可能容易出错。需要像rabbitmq这样的消息传递机制。
  2. 使用数据库进行过滤和分页,只返回id列表,redis中的缓存id列表,并设置一些TTL(10秒)。仍然使用哈希来缓存每篇文章,因此可以立即更新view_count。

    • 优点:易于实现,无需消息传递机制。缓存过期时,只需要查询id列表。
    • 缺点:每隔10秒需要查询新的id列表数据库,10秒后会显示新文章,但view_count会立即更新。
  3. 使用redis缓存每个查询的acticle列表,将其序列化为json,并设置TTL。

    • 优点:最容易实现(使用spring @Cacheable)。
    • 缺点:缓存会频繁过期,需要再次查询数据库。只有在缓存过期时才会更新view_count。
  4. 我不知道女巫是一个更好的选择,性能和稳定性。谢谢你的帮助。

0 个答案:

没有答案