??各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站尚硅谷的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛
💡Redis知識點速覽
- 🍖 NoSQL數據庫引入
- 🥩 為什么要學NoSQL
- 🥩 web時代發展的問題及解決方案
- 🍖 初識NoSQL數據庫
- 🥩 NoSQL數據庫簡介
- 🥩 初識Redis
🍖 NoSQL數據庫引入
🥩 為什么要學NoSQL
??回顧之前的java后端學習歷程,我們可以發現以往學習的技術可以被大致分為以下兩種類型:其一,解決功能性問題:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN,通過這幾門技術的學習就可以實現基礎的業務邏輯編寫;其二,解決擴展性問題:Struts、Spring、SpringMVC、Hibernate、Mybatis,以上幾種框架或者說是技術可以增加我們程序的可擴展性,在對功能進行更改的時候就會簡化操作
??當然,你可能會疑惑這些技術是不是就已經完全足夠我們使用了,為什么還要學習Redis呢?那是因為,程序最終的功能是面向用戶,但是用戶群體肯定不止幾個人而是一個很大的概念,當你的程序投入使用的時候也就代表著它要面臨性能所帶來的諸多問題。而以下技術就是用來解決性能問題:NoSQL、Java線程、Hadoop、Nginx、MQ、ElasticSearch
🥩 web時代發展的問題及解決方案
如何解決CPU及內存壓力?
??解決web 2.0 時代存在的CPU及內存壓力問題,方案就是將原本的一臺服務器采用分布式的方式部署在許多臺服務器上,分布式部署需要在所有服務器之前使用負載均衡技術平均分配發送過來的所有請求,一般這個技術就是Nginx。但是分布式服務器就會存在一個關于session對象的問題,那就是如果同一個用戶發送兩次請求但是卻被分配給了兩個不同的服務器,那么這個時候如何正確讀取到該用戶的session對象就顯得異常重要??上圖就畫出了分布式服務器的組件圖,并給出了session存儲的四個方案,其中NoSQL數據庫存儲session對象就是很好的一個解決方案,因為NoSQL中的數據都存儲在內存中,數據讀取速度很快且無需經過IO操作
如何解決IO壓力?
??我們可以對數據庫和表中的數據進行水平切分、垂直切分、讀寫分離等操作,在破壞一定的業務邏輯的基礎上提高數據的IO性能;或者將頻繁查詢的數據拿出來放到緩存數據庫中,由此減少IO的讀操作提高查詢速度;再或者將一些特殊的數據拿出來進行文檔數據庫或者列式數據庫等的存儲。通過這些方式來減少IO的壓力
🍖 初識NoSQL數據庫
🥩 NoSQL數據庫簡介
??NoSQL(Not Only SQL)意思是“不僅僅是SQL”,這一概念被用來泛指非關系型數據庫(相對于關系型數據庫的嚴格標準而言的一種概念)。NoSQL并不依賴業務邏輯方式進行存儲,不遵循SQL標準,不支持ACID,且遠超于SQL的性能
??NoSQL數據庫大致上可分為四種,而我們要學的Redis就是其中一種典型的鍵值對數據庫
NoSQL數據庫的適用場景
- 對數據高并發的讀寫
- 海量數據的讀寫
- 對數據高可擴展性的
NoSQL數據庫不適用的場景
- 需要事務支持
- 基于sql的結構化查詢存儲,處理復雜的關系,需要即席查詢(用戶根據自己的需求靈活選擇查詢條件,系統能夠根據用戶的選擇生成相應的統計報表)
- 用不著sql的和用了sql也不行的情況,請考慮用NoSql
🥩 初識Redis
??Redis是一個開源的key-value存儲系統,它和Memcached數據庫類似,同樣支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。
??在此基礎上,Redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中,區別的是Redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
??在初步認識過Redis之后,下一步就是要學習Redis的下載安裝和使用了