Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 如何将redis用于多个微服务?_Caching_Redis_Microservices - Fatal编程技术网

Caching 如何将redis用于多个微服务?

Caching 如何将redis用于多个微服务?,caching,redis,microservices,Caching,Redis,Microservices,我对redis很陌生。过去几天我一直在研究redis。我阅读了有关缓存管理(lru缓存)、命令等的文档。我想知道如何为多个微服务数据实现缓存。 我有几个问题: 能否将所有微服务数据(缓存)保存在一个redis实例下 服务器 每个微服务在redis中都应该有自己的缓存数据库吗 如何在不设置过期的情况下刷新缓存数据?因为它会消耗更多的内存 有关使用微服务的redis最佳实践的更多信息将有所帮助。可以对多个微服务使用同一个redis,只需将sur设置为redis缓存键的前缀,以避免所有微服务之间发生冲

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

  • 能否将所有微服务数据(缓存)保存在一个redis实例下 服务器
  • 每个微服务在redis中都应该有自己的缓存数据库吗

  • 如何在不设置过期的情况下刷新缓存数据?因为它会消耗更多的内存


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

    可以对多个微服务使用同一个redis,只需将sur设置为redis缓存键的前缀,以避免所有微服务之间发生冲突

    您可以在同一个redis实例中使用多个db(即每个微服务一个db),但不鼓励这样做,因为redis是单线程的

    最好的方法是为每个微服务使用一个Redis,然后您可以轻松刷新其中一个,而无需触摸其他服务

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

  • 能否将所有微服务数据(缓存)保存在redis server的单个实例下? 在微服务架构中,它的前缀是“弹性规模SaaS”。您可以认为您的缓存服务是一种微服务(可按需响应),那么您在这里有多种选择。关于数据存储的推荐做法是分片。有关本书,请参见下图

  • 每个微服务在redis中都应该有自己的缓存数据库吗?仍然可以思考“垂直分割”,但你应该考虑“水平分割”,所以再次考虑剪辑;另外,有“本地缓存”来避免DoS也是个不错的主意 “注意不要在解决方案中引入对共享缓存服务可用性的关键依赖关系。如果提供共享缓存的服务不可用,应用程序应能够继续运行。在等待缓存服务恢复时,应用程序不应挂起或失败。”

  • 如何在不设置过期的情况下刷新缓存数据?因为它会消耗更多的内存。 您可以定义同步策略;我认为缓存适用于变化不大的事物。 也可以使用一个后台进程来定期更新缓存中的引用数据,以确保它是最新的,或者在引用数据更改时刷新缓存

  • cahe最佳实践检查
    请在下面找到您所有问题的答案-

  • 能否将所有微服务数据(缓存)保存在redis server的单个实例下?Ans-是的,您可以将所有数据保存在单个redis实例下,您所需要做的就是使用不同的密钥名设置这些数据。因为redis基本上是一个键值数据库

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

  • 如何在不设置过期的情况下刷新缓存数据?因为它会消耗更多的内存。Ans-如果微服务响应有任何更改,您可以在同一个键上再次设置数据。在这种情况下,该键值将被重写

  • 谢谢你的回复。你的意思是说N个redis实例对应N个微服务,对吗?你建议使用N个实例轻松制作flushall,但为什么我们在使用flushdb时会使用flushall?这更像是当你的一个redis出现问题时,对其他微服务没有影响。但是,如果您使用相同的redis,则可以使用flushdb。但请记住,redis是单线程的,flushdb O(N)将阻止其他命令如果你有redis per microservice,为什么不在web应用程序中使用内存缓存呢?为您节省网络延迟和反序列化成本。@DirkBoer取决于您将存储到内存缓存中的项的数量以及您正在运行的计算机的大小。缓存可用于保存对数据库的调用(用于大查询),并存储数百万个无法与微服务存储在同一位置的项目