gpt4 book ai didi

Java JCache 字符串键与复合键

转载 作者:行者123 更新时间:2023-12-02 11:07:49 26 4
gpt4 key购买 nike

我正在使用 JCache 来缓存 Web 响应。缓存键包含以下字段:

  • Controller :字符串
  • 操作:字符串
  • 参数:数组

我创建了 ResponseKey 类并将其用作缓存键类型:

public class ResponseKey implements Serializable {

private String controller;
private String action;
private Object[] parameters;

@Override
public int hashCode() { // IMPL }

@Override
public boolean equals(Object obj) { // IMPL }
}

示例代码(工作正常):

JCache<ResponseKey, byte[]> cache = ...
ResponseKey key = new ResponseKey("category", "list", new Object[] { 1 });
cache.put(key, bytesContent);

另一种方法是使用 String 作为缓存键类型:

JCache<String, byte[]> cache = ...
String key = "/category/list/1";
cache.put(key, bytesContent);

由于 String 类型在序列化/反序列化方面比 ResponseKey 类型更轻。

我的问题是:我应该使用 String 键而不是 ResponseKey 键吗?

最佳答案

这个问题可能没有确切的答案,因为每种方法都有优点和缺点。两者都可以。

  • -> String:当不同的缓存项具有完全不同的参数集时,键类的灵 active 较差。
  • -> String:关键类在缓存查找方面有更多开销,因为您可能会附带一个 URL,并且在使用 String 时无需解析整个 URL 以防止缓存命中。
  • -> Key class:从代码中可以更清楚地看出什么是用作 key 的,并且它提供了更多的类型安全性。例如。您不会意外地错过 /
  • -> 字符串:字符串每个键的开销为 一个 个对象,而您的键类则需要大约 5 个或更多对象。
    但请注意,当相同的情况下,这可能会变成相反的情况 Action 、 Controller 甚至参数值都被非常频繁地使用经常。在这种情况下,不同的关键实例可能共享相同的自身 Action 字符串等。这可能会节省大量内存当缓存许多项目时。但是,缓存内容很可能会更大,因此这通常不会产生影响,除非重复数据删除也适用于您的缓存内容。

=> 所以我建议使用String,因为它有更多优点。

注意:在具有复杂值类型的其他语言中,还有另一种更好的选择,即使用仅由 String 组成的值类型,但提供额外的类型安全性以及(分解)其组件的方法。

关于Java JCache 字符串键与复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50821254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com