在 Java 中,“不可变缓存(Immutable Cache)”通常指缓存对象本身不可修改,一旦创建就不能被更改,从而保证线程安全、避免并发问题。下面从设计思路、常见实现方式、示例代码三个层面说明。
不可变缓存的关键点:
final 修饰List.of、Map.of、Collections.unmodifiableXXX)public final class ImmutableCache {
private final Map<String, String> cache;
public ImmutableCache(Map<String, String> data) {
this.cache = Map.copyOf(data); // Java 9+
}
public String get(String key) {
return cache.get(key);
}
// 返回新的缓存,而不是修改原缓存
public ImmutableCache put(String key, String value) {
Map<String, String> newMap = new HashMap<>(cache);
newMap.put(key, value);
return new ImmutableCache(newMap);
}
}
✅ 优点:
Collections.unmodifiableMappublic class ImmutableCache {
private final Map<String, String> cache;
public ImmutableCache(Map<String, String> data) {
this.cache = Collections.unmodifiableMap(
new HashMap<>(data)
);
}
public String get(String key) {
return cache.get(key);
}
}
⚠️ 注意:
public final class CacheValue {
private final int code;
private final String desc;
public CacheValue(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() { return code; }
public String getDesc() { return desc; }
}
public class SafeCache {
private volatile ImmutableCache cache =
new ImmutableCache(Map.of());
public String get(String key) {
return cache.get(key);
}
public void update(String key, String value) {
cache = cache.put(key, value);
}
}
✅ 适合:
| 特性 | 不可变缓存 |
|---|---|
| 线程安全 | ✅ |
| 是否需要锁 | ❌ |
| 写代价 | 较高(新建对象) |
| 适合场景 | 读多写少 |
如果你有具体场景(如:高并发、本地缓存、分布式),我可以给你更合适的实现方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。