我想去掉一个cron,它每20秒从数据库加载一次数据,以便在服务器的内存中缓存数据。我知道它看起来很糟糕,所以我想重新设计。
我有两个想法。
首先,我可以用 message queue
就像 kafka
, rabbitMQ
等等,我以前用过的 rabbitMQ
用不同的项目来解决这个问题。那就行了。
顺便说一下,第二种方法是 redis
酒吧/酒吧。可能真的有用。然后我就可以要么把所有的内存缓存转换成redis缓存,要么在订阅时只更新内存缓存。
两种方法都好吗?有没有更好的方法来实现我的目标?我必须同时考虑多服务器更新。
1条答案
按热度按时间mfpqipee1#
对于内存缓存,最重要的一点是在多个服务器之间更新数据。mq和redis解决方案各有优缺点。
对于mq解决方案,优点是缓存将分布到应用服务器,这可以减少缓存的负载压力(前面有负载均衡器)。
缺点是需要确保每个服务器的缓存都是同步的。由于mq监听器是异步的,不同的服务器可能会有延迟。如果您的服务器与mq失去连接,您的数据也将过时。另外,如果缓存了大量数据,应用程序内存可能会激增,因为每个服务器都维护一个完整的缓存副本。
对于redis,它将始终使用单个数据源,因此同步不会成为问题。您不需要使用pub/sub,只需将数据加载到redis中即可。
但redis将面临巨大的负载压力,因为所有服务器都将从同一个redis查询缓存。
因此,您可以根据您的案例比较每种解决方案的优缺点。