1 概念和使用場景
2 基本存儲類型
- String
- List
- Set
- SortedSet
- Hash
3 事務
單線程執行,即只能保證一個client發起的事務中的命令可以連續的執行,而中間不會插入其他client的命令。
根據事務的四大特性ACID,只保證了原子性、一致性和隔離性
4 如何實現mybatis的二級緩存
步驟一:新建一個類,用於實現org.apache.ibatis.cache.Cache接口
步驟二:在mapper.xml中開啟基於redis二級緩存
<cache type=“com.wooyoo.learning.util.RedisCache”/>
步驟三:sql語句中增加標簽如,flushCache=true
4.1 二級緩存目的
取數據時,首先從一級緩存中取,其次蔥二級緩存中,如果二級緩存中有數據,則從二級緩存中取,否則查詢數據庫。
刪除、更新、增加數據的時候,同時更新緩存。
4.2 什么數據適合存放到二級緩存中
- 很少被改動;
- 數據不是很重要,容許出現偶爾的並發數據;
- 不會被並發訪問;
5 擴展
5.1 緩存穿透
查詢緩存中不存在的數據,導致直接查詢到數據庫。
解決方案:第一次查詢不存在的數據時,在緩存中增加一個對應的key為空的數據。
5.2 緩存雪崩
所有緩存在同一時間全部失效,導致了所有請求都直接訪問數據庫。
解決方案:設置線程互斥,只讓一個線程構建緩存,其他等待緩存創建完成后再通過緩存取數據。或,設置交錯失效時間
5.3 緩存擊穿
緩存雪崩的一個特例,不同的是緩存雪崩針對全部數據,緩存擊穿是特定的熱點數據。
緩存方案:二級緩存