Redis篇
網(wǎng)址:http://www.reibang.com/p/08c2ab3bd738
1.Redis介紹
??1.1?什么是NoSql
???關(guān)系型數(shù)據(jù)庫(mysql ? sqlserver ? oracle):以關(guān)系(由行和列組成二維表)來建模的數(shù)據(jù)庫.
SQL:? 結(jié)構(gòu)化查詢語言呢---用到關(guān)系型數(shù)據(jù)庫
NoSql:泛指非關(guān)系型的數(shù)據(jù)庫,說白了就是處理大數(shù)據(jù),高并發(fā)的迫吐。
NoSQL分類 --- 四類
key-value:Redis纬霞、MeneCache
列:HBase
文檔:(k-table):MongoBD
圖:Neo4J
??1.2?Redis簡介
??Redis 是一個高性能的開源的、C語言寫的Nosql(非關(guān)系型數(shù)據(jù)庫)桃犬,數(shù)據(jù)保存在內(nèi)存中。
redis是一個key-vlue類型Nosql!主要用途用來做緩存!
??支持的類型:String,List奠骄,Set,Zset番刊,Map
??數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合:通過存入字符串含鳞,由Redis自動轉(zhuǎn)換為對應(yīng)的數(shù)據(jù)類型
??Redis 是以key-value形式存儲的Nosql,和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫不一樣芹务。不一定遵循傳統(tǒng)數(shù)據(jù)庫的一些基本要求蝉绷,比如說,不遵循sql標(biāo)準(zhǔn)锄禽,事務(wù)潜必,表結(jié)構(gòu)等等,非關(guān)系型數(shù)據(jù)庫嚴(yán)格上不是一種數(shù)據(jù)庫沃但,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合磁滚。
redis給我們提供了一堆方法,調(diào)用特定方法就能把數(shù)據(jù)保存為特定數(shù)據(jù)結(jié)構(gòu).
1.3??特點(優(yōu)勢)
- 1.數(shù)據(jù)保存在內(nèi)存,存取速度快,并發(fā)能力強
- 2.它支持存儲的value類型相對memcached更多垂攘,包括string(字符串)维雇、list(鏈表)、set(集合)晒他、 -zset(sorted set --有序集合)和hash(哈希類型)吱型。
- 3.redis的出現(xiàn),很大程度補償了memcached這類key/value存儲的不足陨仅,在部分場合可以對關(guān)系數(shù)據(jù)庫(如MySQL)起到很好的補充作用津滞。
- 4.它提供了Java,C/C++灼伤,C#触徐,PHP,JavaScript等客戶端狐赡,使用很方便撞鹉。
- 5.Redis支持集群(主從同步)。數(shù)據(jù)可以主服務(wù)器向任意數(shù)量從的從服務(wù)器上同步颖侄,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器鸟雏。
- 6.支持持久化,可以將數(shù)據(jù)保存在硬盤的文件中
- 7.支持訂閱/發(fā)布(subscribe/publish)功能 QQ群
數(shù)據(jù)存儲:
存放到內(nèi)存中,并且還能不定期持久化到硬盤.
Value類型:??---??相較于memcached支持Value更多
客戶端支持:??--- ??支持多種客戶端-跨語言
超大并發(fā)支持:??---??支持集群
Mysql览祖、Memcache和Redis的比較
存儲過期:存儲數(shù)據(jù)時設(shè)置一個有效期,時間到了就沒了.
場景:訂單,vip,短信驗證碼,游戲道具,優(yōu)惠券,紅包等等
Memcache和Redis的相同點和不同點? Memcache?
相同點:
都是key-value類型Nosql,非關(guān)系型數(shù)據(jù)庫孝鹊,都存放數(shù)據(jù)到內(nèi)存中,讀寫效率高,而且都支持存儲過期.不同點:
redis相較于Memcached還支持持久化到磁盤,數(shù)據(jù)安全更高.
redis相較于Memcached支持value類型更多. (Memcache只支持key-value)
redis集群方案(高性能、高并發(fā))展蒂,memcache原生不支持集群
使用場景
-
1. 中央緩存(空間換時間)
??經(jīng)常查詢數(shù)據(jù)惶室,放到讀速度很快的空間(內(nèi)存),以便下次訪問減少時間玄货。減輕壓力皇钞,減少訪問時間.而redis就是存放在內(nèi)存中的。
Hibernte二級緩存,mybatis二級緩存,這些緩存默認(rèn)都不支持在集群環(huán)境使用.redis中央緩存就OK.
-
2. 計數(shù)器應(yīng)用
網(wǎng)站通常需要統(tǒng)計注冊用戶數(shù)松捉,網(wǎng)站總瀏覽次數(shù)等等
新浪微博轉(zhuǎn)發(fā)數(shù)夹界、點贊數(shù)
-
3. 實時防攻擊系統(tǒng)
暴力破解:使用工具不間斷嘗試各種密碼進行登錄。防:ip(賬號)--->num,到達5次以后自動鎖定IP,30分鐘后解鎖
解決方案:
1隘世、存數(shù)據(jù)庫
登錄操作的訪問量非常大
2可柿、static Map<String,int> longinFailNumMap;
Map存儲空間有限,大批量就不行丙者,并且斷電以后數(shù)據(jù)丟失复斥。
問題:
1、每次查詢數(shù)據(jù)庫,查詢速度慢械媒,多次寫 內(nèi)存
2目锭、斷電會丟失數(shù)據(jù),多個節(jié)點,不能共用 redis集群评汰,容量可以無限大,可以共享數(shù)據(jù)痢虹、并且支持過期
- 排行榜
總積分榜被去,今日積分榜,周積分奖唯,月積分惨缆,季度積分
方案:從數(shù)據(jù)庫中查出來計算.
問題:
1、實時查詢丰捷,查詢速度慢
2坯墨、還要進行各種計算。
- 設(shè)定有效期的應(yīng)用
設(shè)定一個數(shù)據(jù)病往,到一定的時間失效畅蹂。 自動解鎖,購物券
- 設(shè)定有效期的應(yīng)用
- 自動去重應(yīng)用
Uniq 操作荣恐,獲取某段時間所有數(shù)據(jù)排重值 這個使用 Redis 的 set 數(shù)據(jù)結(jié)構(gòu)最合適了,只需要不斷地將數(shù)據(jù)往 set 中扔就行了累贤,set 意為 集合叠穆,所以會自動排重。
- 自動去重應(yīng)用
- 隊列
構(gòu)建隊列系統(tǒng) 使用 list 可以構(gòu)建隊列系統(tǒng)臼膏,使用 sorted set 甚至可以構(gòu)建有優(yōu)先級的隊列系統(tǒng)硼被。
- 隊列
秒殺:可以把名額放到內(nèi)存隊列(redis),內(nèi)存就能處理高并發(fā)訪問。
- 消息訂閱系統(tǒng)
Pub/Sub 構(gòu)建實時消息系統(tǒng) Redis 的 Pub/Sub 系統(tǒng)可以構(gòu)建實時的消息系統(tǒng)渗磅,比如很多用 Pub/Sub 構(gòu)建的實時聊天系統(tǒng) 的例子嚷硫。
比如QQ群消息
- 消息訂閱系統(tǒng)
每一次請求都要去數(shù)據(jù)庫查,數(shù)據(jù)庫壓力會很大始鱼。
redis就是在中間建立一個緩存區(qū)
MySQL:關(guān)系型數(shù)據(jù)庫---(行和列)
NoSQL:非關(guān)系型數(shù)據(jù)庫---(Redis)
java育兒園里的小學(xué)生“磨陀貨”友情提供W械А!医清! 不用謝不用謝 誒~不用不用 真不用謝
圖片.png