多級緩存
在提高系統性能時,使用了多級緩存的理念,尤其是對於熱點數據的訪問,如何能夠在保證服務穩定性的前提下爲更多的用戶提供良好的用戶體驗緩存起到了尤爲重要的作用。
緩存設計原則
- 使用快速存取的設備,所以儘量使用內存
- 將緩存推到離用戶最近的地方,可以更快的爲用戶提供服務
- 髒緩清理。使用緩存就會有數據丟失的特點,數據更新之後,緩存中的數據有可能變成髒數據,所以對於緩存並不是所有的數據都需要,而且要求對髒讀不敏感纔可以使用,其餘情況要根據具體需求確定如何使用。
緩衝方式
- Redis緩存
- 熱點數據本地緩存(內存)
- Nginx緩存
本地熱點緩存
要實現本地熱點緩存,使用的是Guava cache組件
Google Guava 工具類
Google Guava 工具類是Google公司封裝了平常用的方法,不需要再重複造輪子,節約開發人員時間,提高工作效率而開發的。
guava優點
- 高效設計良好的API,
- 遵循高效的java語法實踐
- 使代碼更刻度、簡潔、簡單
- 節約時間、資源、提高生產力
guava核心庫
- 基本工具(basic utilities)
- 集合(collections)
- 緩存(caches)
- 函數式風格(functional idioms)
- 併發(concurrency)
- 字符串處理(strings)
- 原生類型(primitives)
- 區間(ranges)
- I/O
- 散列(hash)
- 事件總線(eventbus)
- 數學運算(math)
- 反射(reflection)
使用Guava cache
pom文件引入依賴
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
使用
新建CacheServer,定義get和set方法
public interface CacheService {
void setCommonCache(String key,Object value);
Object getFromCommonCache(String key);
}
server實現層
@Service
public class CacheServiceImpl implements CacheService {
private Cache<String,Object> commonCache = null;
@PostConstruct
public void init(){
commonCache = CacheBuilder.newBuilder()
//設置緩存容器的初始容量爲10
.initialCapacity(10)
//設置緩存中最大可以存儲100個KEY,超過100個之後會按照LRU的策略移除緩存項
.maximumSize(100)
//設置寫緩存後多少秒過期
.expireAfterWrite(60, TimeUnit.SECONDS).build();
}
@Override
public void setCommonCache(String key, Object value) {
commonCache.put(key,value);
}
@Override
public Object getFromCommonCache(String key) {
return commonCache.getIfPresent(key);
}
}
讀取本地緩存的方式:
//先取本地緩存
itemModel = (ItemModel) cacheService.getFromCommonCache("item_"+id);