如何将redis用于微服务的数量?

时间:2016-04-25 04:51:34

标签: caching redis microservices

我非常喜欢redis。我过去几天一直在研究redis。我阅读了有关缓存管理(lru缓存),命令等的文档。我想知道如何为多个微服务数据实现缓存。 我几乎没有问题:

  1. 可以将所有微服务数据(缓存)保存在单个redis实例下     服务器?
  2. 每个微服务是否应该在redis中拥有自己的缓存数据库?

  3. 如何在不设置EXPIRE的情况下刷新缓存数据?因为它会消耗更多的内存。

  4. 有关使用微服务的redis最佳实践的更多信息将会有所帮助。

3 个答案:

答案 0 :(得分:7)

可以将相同的Redis用于多个微服务,只需将你的redis缓存键设置为前缀,以避免所有微服务之间发生冲突。

您可以在同一个redis实例中使用multi db(即每个微服务一个),但不建议使用它,因为Redis是单线程的。

最好的方法是为每个微服务使用一个Redis,然后您可以轻松冲洗其中一个而不触及其他微服务。

根据我在生产中使用redis缓存的个人经验(拥有2百万个密钥),使用EXPIRE没有问题。我鼓励你使用它。

答案 1 :(得分:1)

请在下面找到您所有问题的答案 -

  1. 是否可以将所有微服务数据(缓存)保存在redis服务器的单个实例下? Ans - 是的,您可以将所有数据保存在单个redis实例下,您只需使用不同的密钥名称设置该数据。因为redis基本上是一个键值数据库。

  2. 每个微服务是否应该在redis中拥有自己的缓存数据库?答案 - 不需要。只需为每个微服务制作不同的密钥。另请注意,您可以使用冒号(:)在redis中创建文件夹,以便在Redis Desktop Manager上轻松识别不同的微服务。 示例 - 键名X:Y:Z,这里Z放在Y文件夹中,Y在X中。所以你会得到一个文件夹类型的结构。这有助于区分不同的微服务。

    1. 如何在不设置EXPIRE的情况下刷新缓存数据?因为它会消耗更多的内存。 Ans - 如果微服务响应有任何变化,您可以在同一个密钥上再次设置数据。在这种情况下,Key值将被覆盖。

答案 2 :(得分:0)

  1. 是否可以将所有微服务数据(缓存)保存在redis服务器的单个实例下? 在微服务架构中,它是可预测的"弹性规模SaaS"。您可以认为缓存服务微服务(将按需响应)然后您在此处有多个选项。有关数据存储的建议做法是 分片 https://azure.microsoft.com/en-us/documentation/articles/best-practices-caching/#partitioning-a-redis-cache。请参阅下面的图表Microservices, IoT and Azure

  2. 每个微服务是否应该在redis中拥有自己的缓存数据库?可以继续思考"垂直分区"但你应该考虑"水平分区"所以再考虑分片;另外,拥有"本地缓存"并不是一个坏主意。特别是为了避免DoS "注意不要在解决方案中引入共享缓存服务可用性的关键依赖性。如果提供共享缓存的服务不可用,则应用程序应该能够继续运行。在等待缓存服务恢复时,应用程序不应挂起或失败。"

  3. 如何在不设置EXPIRE的情况下刷新缓存数据?因为它会消耗更多的内存。 您可以定义同步策略;我认为缓存适用于几乎没有变化的东西。 "使用后台进程定期更新缓存中的参考数据以确保它是最新的,或者在参考数据更改时刷新缓存也可能是合适的。&#34

  4. Microservice Architecture 对于cahe最佳实践检查 Caching Best Practices