有20个生产服务器。每当团队进行配置更改并且我请求重新加载配置/重新启动服务以刷新存储在hashmap中的缓存。
当实际的事务进入服务器时,将从map中选择配置值来处理事务,而不是每次事务都按下DB。
我使用以下代码连接每个服务器。关于这种方法,我有几个问题和建议。 1)该逻辑是否正常并且在存储器中存储大量数据会导致性能下降? 2)有没有最好的方法可以建议逻辑?
httpurlcon = (HttpURLConnection) url.openConnection();
httpurlcon.setDoOutput(true);
httpurlcon.setRequestMethod("POST");
httpurlcon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpurlcon.connect();
答案 0 :(得分:0)
如果您仅使用HashMap在服务器端实现缓存,那么最好使用类似LRU(最近最少使用)缓存的东西,这很容易使用LinkedHashMap在Java中实现。
如果HashMap方法可能会占用太多内存并为您提供内存不足的方法,那么最近最少使用的缓存将摆脱保持特定大小的元素,优先处理最近使用的请求。此外,仅使用HashMap,您将希望同步数据结构上的所有操作,以确保线程安全。
还应该考虑调整数据库本身的一些参数。例如,在MySQL中,您可以调整InnoDB(MySQL的存储引擎)参数,例如缓冲池大小或查询缓存。 InnoDB的缓冲池本身就是一个LRU缓存,如果数据库本身就存在于某个服务器上,您可以将缓冲池的大小设置得相当大并提高性能,因为数据将缓存在内存中