【问题标题】:Caching JSON string vs Java Object缓存 JSON 字符串与 Java 对象
【发布时间】:2014-03-10 06:57:30
【问题描述】:

在我的一个 Web 服务中,我正在使用 memcached 缓存结果。我可以缓存结果 json 或源对象。但是如果我缓存源对象,我必须在每次发送结果之前将其转换为 json(我在我的代码中这样做,因为我使用 json 视图来动态限制少数列)。如果我缓存我的 JSON 字符串(相当大),我只需要返回它。我的问题是,JSON 字符串会比 java 对象消耗更多的内存还是缓存 JSON 字符串是个坏主意?

【问题讨论】:

  • 您测量过这两种解决方案的性能/资源使用情况吗?
  • 由于 JSON 具有较低的语法开销,因此存储包含 JSON 的 char[] 所消耗的内存很可能比存储表示它的“已解析”对象要少得多。这是否是一个好主意取决于您的进一步要求。

标签: java json web-services caching


【解决方案1】:

如果通过 memcache 缓存源对象,则必须对其进行序列化和反序列化。这是很多开销。所以缓存 JSON 对象会更快。

对此有两个建议:

避免字符编码:如果可能,将 JSON 对象存储为字节数组,而不是字符串或字符数组,并通过 HttpResponse.getOutputStream(json) 返回。这样你也可以绕过额外的字符编码。

缓存整个响应:如果 JSON 是 REST 查询的结果,最好通过应用程序前面的缓存服务器(例如 varnish、nginx、apache 流量服务器)缓存整个请求。只要把正确的http缓存头放在上面就可以了。

【讨论】:

  • 如何将json对象存储为字节数组?
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多