Redis的緩存原理

1. Redis是什麼

Redis 是一個高性能的開源的、C語言寫的Nosql(非關係型數據庫),數據保存在內存中。 Redis 是以key-value形式存儲,和傳統的關係型數據庫不一樣。不一定遵循傳統數據庫的些基本要求,比如說,不遵循sql標準,事務,表結構等等,非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合。 Java中數據結構:String,數組,list,set map… Redis提供了很多的方法,可以用來存取各種數據結構的數據。

2.優勢

1.數據保存在內存,存取速度快,併發能力強
2.Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
3.redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關係數據庫(如MySQL)起到很好的補充作用。
4.它提供了Java,C/C++,C#,PHP,JavaScript等客戶端,使用很方便。
5.Redis支持集羣(主從同步、負載均衡)。數據可以主服務器向任意數量從的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。
6.支持持久化,可以將數據保存在硬盤的文件中
7.支持訂閱/發佈(subscribe/publish)功能 QQ羣
1、數據存放:存放到內存中,還能不定期持久化到磁盤。存取速度快,併發能力強,斷電後數據不丟失。
2、支持Value類型更多。
3、多種客戶端(語言 java php c# js)
4、支持集羣來擴展空間 8G+8G+16G
5、開源

持久層緩存:
減少了連接數據庫的時間;減少了resultSet封裝成對象的過程。

3.業務層和控制層的緩存:

減少調用層次。

描述緩存在業務層的邏輯:

查詢商品信息

判斷當前查詢在緩存是否有數據

如果有數據,直接返回,當前請求結束;

如果沒有數據,查詢持久層數據庫數據,獲取數據存儲再緩存一份,供後續訪問使用;

緩存雪崩/緩存擊穿
海量請求訪問服務器,服務器的性能由緩存支撐,一旦一定範圍的緩存數據未命中,請求的數據訪問涌入數據庫;承受不了壓力造成宕機–重啓–海量請求並未消失–宕機–重啓,系統長時間不可用;這種情況就是緩存的雪崩。

4.Redis經典實用場景-緩存

4.1爲什麼要使用緩存

把經常查詢的數據,很少修改的數據存放到緩存中,減少訪問數據庫,降低數據庫壓力並且緩存一般都是內存,訪問速度比較快。

4.2哪些數據適合放到緩存中

經常查詢:緩存就是提供數據查詢高效訪問。
很少修改:修改時要同步修改緩存和數據庫
例如:地區數據、商品分類、數據字典 菜單(不考慮權限)

4.3選擇合適的緩存

Hibernate二級緩存,mybatis二級緩存,redis中央緩存
Hibernate二級緩存,mybatis二級緩存默認不支持集羣緩存,要使用redis

4.4怎麼存儲數據

1) json:把要存放的數據轉換爲json類型的字符串
保存緩存時:
Java Object----------->json字符串
獲取緩存:
json字符串-------->Java Object-
Json框架:jdk-json-lib jackson gson fastjson

5.Redis的優缺點

優點:加速讀寫,降低後端負載、減少DB壓力
缺點:數據不能保證一致性,代碼維護成本和運維成本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章