我们必须对现有的网络应用程序实现一个监控模块。该应用程序的目的是记录在运行时执行的每个方法所花费的时间并保存到 2 个监控表。由于应用中有很多方法调用,我们不能每次执行一个方法都保存到表中。我们使用了spring aop来拦截时间。我们使用redis来缓存数据,每隔十分钟取一次数据从缓存中保存到数据库中。但是redis似乎是一个麻烦的想法,因为它不断建立新的连接,这给应用程序带来了一场噩梦。有没有其他方法可以做到这一点。我们考虑过写入文件并从中获取数据文件定期。但这似乎也是一种资源消耗解决方案。
最佳答案
我建议将所有内容都存储在您的 Java 应用程序中。如果您只需要一些统计数据,您可以在 HashMap 中跟踪此信息,并每 10 分钟从另一个线程将其写入数据库。最小/最大/平均时间不会占用太多内存,并且您可以在将其写入数据库后重置统计信息。
如果出于某种原因这不能满足您的需求,Redis 应该很快,甚至可以帮助您计算统计数据。我会设置一个连接池以防止它每次都建立新的网络连接。然后,我会在您的 Redis 客户端中使用异步写入(流水线)来加速写入。 Jedis 和 JRedis 都支持这个。
关于进入数据库前的Java缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597614/