我想摆脱每隔20秒从数据库加载数据的cron,以便在服务器上的内存中缓存数据。我知道它看起来很糟糕,所以我想重新设计一下。
我有两个想法。
首先,我可能会使用message queue,比如kafka,rabbitMQ等等。我曾经使用rabbitMQ来解决不同项目的这个问题。这样就行了。
顺便提一下,提出了第二种方法,即redis发布/订阅。它可能真的会起作用。然后,我将能够将所有内存缓存转换为redis-cache,或者在订阅时仅更新内存缓存。
这两种方法都是好的吗?有没有更好的方法来实现我的目标?我必须一次考虑多服务器更新。
发布于 2020-08-28 01:23:16
对于内存缓存来说,最重要的一点是让多个服务器之间的数据更新到最新。MQ和Redis解决方案各有优缺点。
对于MQ解决方案,优势在于您的缓存将分布到您的应用程序服务器,这可以减少缓存的负载压力(前面有负载均衡器)。
缺点是您需要确保每个服务器的缓存是同步的。由于MQ侦听器是异步的,因此不同的服务器可能会有延迟。如果您的服务器失去了与MQ的连接,您的数据也将过期。此外,如果您缓存了大量数据,您的应用程序内存可能会迅速增长,因为您的每个服务器都维护着一个完整的缓存副本。
对于Redis,它将始终使用单一数据源,因此同步不会成为问题。您不需要使用pub/sub,只需将数据加载到Redis即可。
但是Redis会有很大的负载压力,因为所有的服务器都会从同一个Redis上查询缓存。
因此,您可以根据自己的情况比较每种解决方案的优缺点。
https://stackoverflow.com/questions/63613743
复制相似问题