我有一个使用 redis 缓存的应用程序,到目前为止它运行良好。然而,我们需要将我们的应用程序分布到不同的区域(通过用户位置的动态 DNS 调度程序,本地用户可以访问最近的服务器)。 考虑到网络限制和带宽,不太可能搭建一个中心化的redis。所以我们要为不同的地区分配不同的redis。所以这里的问题是我们如何处理漫游情况。用户在位置 1 打开应用程序,同时继续使用位置 2 的应用程序而不会丢失位置 1 的缓存。
最佳答案
您将不得不使用分层架构。这就是 Akamai 或 Amazon Cloudfront 等大多数 CDN 的工作方式。 简而言之,它是这样工作的:
当请求一个对象时,查看它是否存在于为位置L1分配的redis缓存服务器S1中。
如果S1中不存在,则检查S2,S3....SN等其他位置的缓存服务器中是否存在。
如果在 S2...SN 中找到,则将对象也存储在 S1 中,并提供该对象。
如果在 S2...SN 中也找不到,则从后端获取新的对象,并存储在 S1 中。
如果你使用memcached做缓存,那么facebook的开源mcrouter项目会有所帮助,因为它进行集中缓存。
关于Redis 缓存跨区域共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34172167/