文章目錄
1.NoSQL簡介
在開始介紹Redis之前,我們有必要先了解一下NoSQL(Not Only SQL),意爲反SQL運動,指非關係型的數據庫。
1.1 NoSQL是什麼
NoSQL(Not Only SQL),意爲反SQL運動,指非關係型的數據庫,是以key-value形式存儲,和傳統的的關係型數據庫不一樣,不一定遵循傳統數據庫的一些基本要求,如遵循SQL標準,ACID屬性,表結構等等,這類數據庫有一下特點:非關係型的,分佈式的、開源的、水平可擴展的
1.2 NoSQL爲什麼會出現
隨着互聯網web2.0網站的興起,傳統的關係型數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,數據庫 壓力特別大,而非關係型數據庫則由於其本身的特點能解決上面問題得以迅速發展
1.3NoSQL的特點
- 處理超大量的數據
- 運行在便宜的PC服務器集羣上
- 擊碎了性能瓶頸(分佈式存儲,增加了併發訪問量,可通過增加節點擴展存儲量)
1.4NoSQL適用場景
- 對數據高併發讀寫
- 對海量數據的高效率存儲和訪問
- 對數據的高可擴展性和高可用性(可擴展因爲他沒有表結構,高可用性因爲他採用分佈式存儲)
1.5NoSQL型數據庫有哪些
有Cassandra、Mongodb、CouchDB、Redis、 Riak、Membase、Neo4j 和 HBase等
sql和nosql對比:https://www.csdn.net/article/2014-07-29/2820915
2. redis是什麼
redis是非關係型數據庫,是以key-value形式存儲,支持存儲的value有5種類型,爲了保證效率數據都是緩存在內存中,它可週期性的把更新的數據寫入磁盤或把修改的操作寫入朱愛家的記錄文件。提供的API語言包括:C,C++,C#,JAVA,PHT等
3. redis的作用
- 可對數據高併發讀寫
- 提高數據的高可擴展性和高可用性
4. redis的適用場合
- 取最新N個數據的操作
- 排行榜應用,取TOP N操作
- 需要精確設定過期時間的應用(應爲可以設置字段的過期時間)
- 計數器應用(因爲字段有自增功能)
- Uniq操作,獲取某段時間所有數據排重值
- 實時系統,反垃圾系統
- Pub/Sub構建實時消息系統
- 構建隊列系統
- 緩存
有些應用場合還沒真正用過,不知道具體應用到哪,不過查資料瞭解了這些應用場合,先了解一下
總之,應用場景大致分爲2種:
- 應用程序直接訪問Redis數據庫(比如查詢數據時,redis數據庫中有數據,就直接放回數據了,讀和寫兩種情況)
- 應用程序直接訪問Redis數據庫,只有當Redis訪問失敗時才訪問Mysql等關係型數據庫(比如查詢數據時,redis數據庫中沒有查詢到數據,就再去Mysql數據庫中查)
5. redis的數據類型
redis時以key——value存儲的,key類型永遠是strign類型,value有string,hash,list,set和zset(sorted set)5種數據類型
6. redis緩存同步
舉例:去數據庫查詢姓名中帶有霜字的所有人,第一次查詢有6人,在第一次查詢完添加了一個名字帶有霜的人,這是數據庫中就有7人姓名中帶有霜字了,但此時如果再查詢姓名中帶有霜字的所有人,此時查出的結果還是6人,因爲應用程序先去redis緩存中查詢,查到數據就直接返回了,所以當對Mysql數據庫進行增刪改操作後,要還redis數據庫同步。(粗暴簡單(#.#的)緩存同步方法:在對Mysql數據庫進行增刪改操作後,刪除redis中對應的緩存數據(我們常用的數據類型爲string,hash,如果是hash,不要刪除key對應的所有數據,而是刪除field字段對應的數據,因爲如果把整個hash刪除,可能有別的功能數據緩存,這樣都刪除後,再執行查詢時,又都去mysql數據庫查詢了,mysql數據庫壓力又變大了),這樣再進行查詢時,應用程序先去redis緩存中查詢,查不到再去mysql數據庫查詢了
7.mybatis有緩存,爲什麼要加redis作緩存
mybatis的緩存:分爲一級緩存和二級緩存,一級緩存的作用範圍爲session,所以當session commit或close後,緩存就會被清空 ;二級緩存的作用範圍爲sqlsessionfactory,映射語句文件中的所有select語句都會被緩存,所有CRUD的操作都會刷新緩存,緩存會存儲1024個對象,緩存容易造成髒毒數據,影響真實數據的準確性,實際開發業務中會放棄二級緩存。
redis的緩存:可控制的後端緩存服務,通常用來緩存後端數據,當程序第二次訪問數據庫的時候,命中redis,大大減少數據庫的負擔,減少訪問數據庫的鏈接時間,實際開發過程中都會採用這種緩存方式,達到訪問速度和效率的解決方案,因爲redis基於內存的讀取和寫入相比傳統的數據庫基於磁盤IO快上數倍
- 提供緩存服務,存儲訪問頻率高的熱數據防止穿透到數據庫
- 在分佈式系統中可以作爲實現分佈式鎖的一種實現方案
個人認爲其主要原因是redis支持分佈式存儲,提高了高併發量和可擴展性和查詢速度快,並且redis中只保存需要的數據而數據庫中保存的的是所有的數據,還有待研究!!!
8.使用場景
通常使用在併發量高的地方,如ITOO的登錄,考試抽題,選課,因爲操作數據庫設計到IO操作,獲得一個連接及操作非常慢,但是redis直接把數據放在了內存中,操作速度非常快,從而頁面顯示效果非常好。如考試抽卷,如果不同redis可能需要2分鐘才能把試題抽出從而顯示出來,但是如果用redis的話,可能是瞬間的事,用戶體驗非常好。