【Redis】——NoSql與Redis之間的XXOO
NoSql概念
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,它泛指非關係型的資料庫。
分類
Redis概念
Redis 是一個高效能的開源的、C語言寫的Nosql(非關係型資料庫),資料儲存在記憶體中。
Redis 是以key-value形式儲存,和傳統的關係型資料庫不一樣。不一定遵循傳統資料庫的一些基本要求,比如說,不遵循sql標準,事務,表結構等等,非關係型資料庫嚴格上不是一種資料庫,應該是一種資料結構化儲存方法的集合。
特點
1.資料儲存在記憶體,存取速度快,併發能力強
2.它支援儲存的value型別相對更多,包括string(字串)
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、開源(免費還有很多人維護)
補充
Mysql、Memcached和Redis的比較
|
mysql |
redis |
memcached |
型別 |
關係型 |
非關係型 |
非關係型 |
儲存位置 |
磁碟 |
磁碟和記憶體 |
記憶體 |
儲存過期 |
不支援 |
支援 |
支援 |
讀寫效能 |
低 |
非常高 |
非常高 |
使用場景
1.快取(新聞列表)
經常查詢資料,放到讀速度很快的空間(記憶體),以便下次訪問減少時間。減輕資料庫壓力,減少訪問時間.而redis就是存放在記憶體中的。
Hibernte二級快取(ehcache)
2.計數器應用
網站通常需要統計註冊使用者數,網站總瀏覽次數等等
新浪微博轉發數、點贊數
3.實時防攻擊系統
暴力破解:使用工具不間斷嘗試各種密碼進行登入。防:ip--->num,到達10次以後自動鎖定IP,30分鐘後解鎖
解決方案:
1、存資料庫
2、static Map<String,int> longinFailNumMap;
Map儲存空間有限,大批量就不行,並且斷電以後資料丟失。
問題:Redis能解決
1、每次查詢資料庫,查詢速度慢,多次寫 記憶體
2、斷電會丟失資料,多個節點,不能共用 redis叢集,容量可以無限大,可以共享資料、、
Key value time 企業手法(封ip)
192. 1 1s
0.2 1 1.9 15次
並且支援過期
4.排行榜
總積分榜,今日積分榜,周積分,月積分,季度積分
方案:從資料庫中查出來計算.
5.設定有效期的應用
設定一個數據,到一定的時間失效。 自動解鎖,購物券
6.自動去重應用
Uniq 操作,獲取某段時間所有資料排重值 這個使用 Redis 的 set 資料結構最合適了,只需要不斷地將資料往 set 中扔就行了,set 意為 集合,所以會自動排重。
7.佇列
構建佇列系統 使用 list 可以構建佇列系統,使用 sorted set 甚至可以構建有優先順序的佇列系統。
秒殺:可以把名額放到記憶體佇列(redis),記憶體就能處理高併發訪問。限流
8.訊息訂閱系統
Pub/Sub 構建實時訊息系統 Redis 的 Pub/Sub 系統可以構建實時的訊息系統,比如很多用 Pub/Sub 構建的實時聊天系統 的例子。
比如QQ群訊息