简单的Java实现Cache Aside pattern :
import java.util.HashMap;
import java.util.Map;
public class CacheAsidePattern {
// 模拟数据库或其他数据源
static class Database {
private static Map<String, String> data = new HashMap<>();
static {
data.put("key1", "value1");
data.put("key2", "value2");
data.put("key3", "value3");
}
public static String fetchDataFromDatabase(String key) {
// 模拟从数据库获取数据
return data.get(key);
}
public static void updateDatabase(String key, String value) {
// 模拟更新数据库
data.put(key, value);
}
public static void removeFromDatabase(String key) {
// 模拟从数据库删除数据
data.remove(key);
}
}
// 模拟缓存
static class Cache {
private static Map<String, String> cache = new HashMap<>();
public static String getFromCache(String key) {
return cache.get(key);
}
public static void addToCache(String key, String value) {
cache.put(key, value);
}
public static void removeFromCache(String key) {
cache.remove(key);
}
}
// 获取数据的方法,先从缓存获取,如果没有再从数据库获取,并更新缓存
public static String getData(String key) {
String value = Cache.getFromCache(key);
if (value == null) {
value = Database.fetchDataFromDatabase(key);
if (value != null) {
Cache.addToCache(key, value);
}
}
return value;
}
// 更新数据的方法,先更新数据库,再更新缓存
public static void updateData(String key, String value) {
Database.updateDatabase(key, value);
Cache.addToCache(key, value);
}
// 删除数据的方法,先删除数据库中的数据,再从缓存中删除
public static void deleteData(String key) {
Database.removeFromDatabase(key);
Cache.removeFromCache(key);
}
public static void main(String[] args) {
// 测试示例
System.out.println("Getting data for key1: " + getData("key1")); // 从数据库获取
System.out.println("Getting data for key1 again: " + getData("key1")); // 从缓存获取
updateData("key1", "new value for key1");
System.out.println("Getting updated data for key1: " + getData("key1")); // 从数据库获取
deleteData("key1");
System.out.println("Getting data for key1 after deletion: " + getData("key1")); // null,因为数据已被删除
}
}
在这个例子中,Database
类模拟了一个数据源(比如数据库),Cache
类模拟了一个缓存。getData
方法首先尝试从缓存获取数据,如果缓存中没有,则从数据库中获取,并将结果存入缓存。updateData
方法先更新数据库,然后更新缓存。deleteData
方法先从数据库删除数据,然后从缓存中删除。