【狂神說Java】Redis最新超詳細(xì)版教程通俗易懂

一、Nosql概述
為什么要用Nosql?
現(xiàn)在是大數(shù)據(jù)時(shí)代,大數(shù)據(jù)時(shí)代一般的數(shù)據(jù)庫無法繼續(xù)分析處理了!2006年Hadoop。Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu), 是一個(gè)存儲(chǔ)系統(tǒng)+計(jì)算框架的軟件框架。主要解決海量數(shù)據(jù)存儲(chǔ)與計(jì)算的問題,是大數(shù)據(jù)技術(shù)中的基石。Hadoop以一種可靠、高效、可伸縮的方式進(jìn)行數(shù)據(jù)處理,用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,用戶可以輕松地在Hadoop上開發(fā)和運(yùn)行處理海量數(shù)據(jù)的應(yīng)用程序。
為什么要用Nosql?
單機(jī)MySQL

90年代,一個(gè)基本的網(wǎng)站訪問量不會(huì)太大,一個(gè)數(shù)據(jù)庫完全足夠!
更多使用的靜態(tài)網(wǎng)頁HTML,服務(wù)器沒有太大壓力。
1、數(shù)據(jù)量太大,一個(gè)機(jī)器放不下!
2、數(shù)據(jù)量超過300w,會(huì)導(dǎo)致搜索變慢,需要建立索引,一個(gè)機(jī)器放不下。
3、訪問量(讀寫混合),一個(gè)服務(wù)器承受不了。
只要出現(xiàn)上述之一,就需要另尋他法。
二、緩存memcaced+mysql+垂直拆分
通過緩存來減輕數(shù)據(jù)庫壓力

三、分庫分表+水平拆分+mysql集群
本質(zhì):數(shù)據(jù)庫(讀,寫)
MyISAM:表鎖
innodb:行鎖
慢慢的使用分庫分表解決寫的壓力。Mysql推出了表分區(qū)(沒有多少人使用),mysql的集群(很好的滿足了那個(gè)年代的所有需求)
四、如今的年代
mysql等關(guān)系型數(shù)據(jù)庫不夠用了,數(shù)據(jù)量很多,變化很快!
有的使用mysql去存儲(chǔ)一些較大的文件,如blog、圖片等,數(shù)據(jù)庫表會(huì)變大,運(yùn)行效率就會(huì)降低,可以尋找一個(gè)專門的數(shù)據(jù)庫來進(jìn)行存儲(chǔ)該類信息,來分擔(dān)mysql的壓力。
5、目前一個(gè)基本的互聯(lián)網(wǎng)項(xiàng)目

五、為什么要用NoSQL!
用個(gè)人信息,社交網(wǎng)絡(luò),地理位置。用戶自己產(chǎn)生的數(shù)據(jù),用戶日志的爆發(fā)增長。
這時(shí)候我們就需要用Nosql數(shù)據(jù)庫的,Nosql可以很好的處理以上情況。
六、什么是Nosql
Nosql=not only sql
關(guān)系型數(shù)據(jù)庫:類似于excel表格,行列
泛指非關(guān)系型數(shù)據(jù)庫,隨著web2.0誕生,尤其是超大規(guī)模的高并發(fā)社區(qū)。Nosql發(fā)展尤為迅速,redis是發(fā)展最快,是當(dāng)下必掌握的技術(shù)。
Nosql特點(diǎn)
解耦!
1、方便擴(kuò)展(數(shù)據(jù)之間沒有關(guān)系,很好擴(kuò)展)
2、大數(shù)據(jù)量高性能(redis一秒寫8w,讀11w,)
3、數(shù)據(jù)類型是多樣的,(不需要設(shè)計(jì)數(shù)據(jù)庫,隨取隨用)
傳統(tǒng)數(shù)據(jù)庫與NoSQL對(duì)比
1、傳統(tǒng)數(shù)據(jù)庫
-結(jié)構(gòu)化組織
-sql語言
-數(shù)據(jù)和關(guān)系都存在單獨(dú)的表中
-數(shù)據(jù)定義語言
-嚴(yán)格的一致性
-基礎(chǔ)的事務(wù)
2、Nosql
-不僅僅是數(shù)據(jù)
-沒有固定的查詢語言
鍵值對(duì)存儲(chǔ),列存儲(chǔ),文檔存儲(chǔ)、圖形數(shù)據(jù)庫(社交關(guān)系)
-最終一致性
-cap定理、base (異地多活)初級(jí)架構(gòu)師
-高性能、高可用、高可擴(kuò)
真正的在公司中實(shí)踐:
Nosql+關(guān)系型數(shù)據(jù)庫
1、商品基本信息(名稱、價(jià)格、商家信息)
使用關(guān)系型數(shù)據(jù)庫,如:mysql(王堅(jiān))、orcle解決
2、商品的描述、評(píng)價(jià)(文字較多)
使用文檔型數(shù)據(jù)庫,如MongoDB進(jìn)行解決
3、圖片
分布式文件系統(tǒng)FASTDFS
-淘寶TFS
-Google:GFS
-Hadoop:HDFS
阿里云:oss
4、商品的關(guān)鍵字(搜索)
-搜索引擎 solr elasticsearch
-ISerach:多隆
5、商品的熱門的波段信息
-內(nèi)存數(shù)據(jù)庫
-redis tair、Menache
6、商品的交易、外部支付接口
-三方應(yīng)用
大型互聯(lián)網(wǎng)面對(duì)的問題:
- 數(shù)據(jù)類型太多
- 數(shù)據(jù)源繁多,重構(gòu)問題
- 數(shù)據(jù)要改造,大面積改造
解決問題:加一層
NoSQL四大分類
KV鍵值對(duì)
- 新浪:redis
- 美團(tuán):redis+Tair
- 阿里、百度:redis+memecache
文檔型數(shù)據(jù)庫(bson格式)
- MongoDB(一般必須要掌握)
MongoDB是基于分布式的文件儲(chǔ)存數(shù)據(jù)庫,C++編寫,主要用于處理大量文檔。
MongoDB是介于關(guān)系型和非關(guān)系型之間的一種數(shù)據(jù)庫。
MongoDB是非關(guān)系型數(shù)據(jù)庫中功能最豐富、最像關(guān)系型數(shù)據(jù)庫的
- ConthDB
列存儲(chǔ)數(shù)據(jù)庫
- HBase
- 分布式文件系統(tǒng)
圖形關(guān)系數(shù)據(jù)庫
并不是存儲(chǔ)圖形,放的是關(guān)系,比如:朋友圈社交網(wǎng)絡(luò),廣告推薦。如Neo4j,InfoGrid

redis名為遠(yuǎn)程字典服務(wù)
是一個(gè)開源的使用c語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、key-value數(shù)據(jù)庫,并提供多種語言的API。
能實(shí)現(xiàn)主從同步。
redis能干嘛?
1、內(nèi)存存儲(chǔ)、持久化、內(nèi)存是斷電即失的,持久化機(jī)制(rdb、aof)
2、效率高,可以用于高速緩存
3、發(fā)布訂閱系統(tǒng)
4、地圖信息分析
5、計(jì)時(shí)器、計(jì)數(shù)器(瀏覽量)
redis默認(rèn)端口:6379