Redis深度剖析系列【二次重構】


一. Redis整體介紹

1. NOSQL介紹

1.什么是NOSQL

 NoSQL(NoSQL = Not Only SQL),意即“不僅僅是SQL”,是一項全新的數據庫理念,泛指非關系型的數據庫。

 隨着互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高並發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由於其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。

2. NOSQL和關系型數據庫比較

優點:

 1)成本:nosql數據庫簡單易部署,基本都是開源軟件,不需要像使用oracle那樣花費大量成本購買使用,相比關系型數據庫價格便宜。

 2)查詢速度:nosql數據庫將數據存儲於緩存之中,關系型數據庫將數據存儲在硬盤中,自然查詢速度遠不及nosql數據庫。

 3)存儲數據的格式:nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,所以可以存儲基礎類型以及對象或者是集合等各種格式,而數據庫則只支持基礎類型。

 4)擴展性:關系型數據庫有類似join這樣的多表查詢機制的限制導致擴展很艱難。

缺點:

 1)維護的工具和資料有限,因為nosql是屬於新的技術,不能和關系型數據庫10幾年的技術同日而語。

 2)不提供對sql的支持,如果不支持sql這樣的工業標准,將產生一定用戶的學習和使用成本。

 3)不提供關系型數據庫對事務的處理。

3. 非關系型數據庫的優勢

 1)性能NOSQL是基於鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。

 2)可擴展性同樣也是因為基於鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。

4. 關系型數據庫的優勢

 1)復雜查詢可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數據查詢。

 2)事務支持使得對於安全性能很高的數據訪問要求得以實現。對於這兩類數據庫,對方的優勢就是自己的弱勢,反之亦然。

5. 總結

 關系型數據庫與NoSQL數據庫並非對立而是互補的關系,即通常情況下使用關系型數據庫,在適合使用NoSQL的時候使用NoSQL數據庫,讓NoSQL數據庫對關系型數據庫的不足進行彌補。一般會將數據存儲在關系型數據庫中,在nosql數據庫中備份存儲關系型數據庫的數據

6.主流的NOSQL產品

(1). 鍵值(Key-Value)存儲數據庫

 相關產品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB

 典型應用: 內容緩存,主要用於處理大量數據的高訪問負載。

 數據模型: 一系列鍵值對

 優勢: 快速查詢

 劣勢: 存儲的數據缺少結構化

(2). 列存儲數據庫

 相關產品:Cassandra, HBase, Riak

 典型應用:分布式的文件系統

 數據模型:以列簇式存儲,將同一列數據存在一起

 優勢:查找速度快,可擴展性強,更容易進行分布式擴展

 劣勢:功能相對局限

(3). 文檔型數據庫

 相關產品:CouchDB、MongoDB

 典型應用:Web應用(與Key-Value類似,Value是結構化的)

 數據模型: 一系列鍵值對

 優勢:數據結構要求不嚴格

 劣勢: 查詢性能不高,而且缺乏統一的查詢語法

(4). 圖形(Graph)數據庫

 相關數據庫:Neo4J、InfoGrid、Infinite Graph

 典型應用:社交網絡

 數據模型:圖結構

 優勢:利用圖結構相關算法。

 劣勢:需要對整個圖做計算才能得出結果,不容易做分布式的集群方案
View Code

2. 什么是Redis

  Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與范圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內置了 復制(replication)LUA腳本(Lua scripting), LRU驅動事件(LRU eviction)事務(transactions) 和不同級別的 磁盤持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分區(Cluster)提供高可用性(high availability)

  Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,官方提供測試數據,50個並發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s。(這是舊測試結果,現在redis6.0多線程機制速度更快)

3. Redis版本變遷

 參考:https://blog.csdn.net/qq_34206560/article/details/90902924

    https://help.aliyun.com/document_detail/164235.html?spm=a2c4g.11186623.6.611.23f0adb4rcoSCR

4. redis核心功能

(1). 數據類型

(2). pub/sub-發布訂閱

(3). PipeLine-管道

(4). 事務

(5). Lua

(6). 數據持久化

(7). 緩存淘汰策略

(8). 分布式鎖

(9). 主從→哨兵→cluster

(10). 布隆過濾器

5. 熱門知識點

(1). redis為什么這么快?

(2). 什么是緩存雪崩、擊穿、穿透?

(3). 如何解決雙寫一致性?

(4). redis和memcached比較?

(5). 主從數據同步機制的原理?

(6). redis常見的阻塞原因有哪些?

(7). hot key造成集群訪問量傾斜如何解決?

(8). bagsave的原理是什么?

。。。。。等等

6. Redis客戶端

(1) .Net的3個程序集

 a. StackExchange.Redis:免費.【推薦】 (目前最新版本:2.2.4),里面的每類方法基本上都有對應的異步方法。 (https://github.com/StackExchange/StackExchange.Redis)

 PS:該程序集一直飽受爭議,舊版本timeout現象非常嚴重,在2.x版本后使用異步方法得到了改進。包括博客園2020.10月-11月的翻車時間,是因為使用了擴展程序集StackExchange.Redis.Extensions 】導致的。(吃瓜群眾可以前去觀看:https://www.cnblogs.com/cmt/p/14008145.html

 b. ServiceStack.Redis:收費(1小時3600次請求限制),但可以破解,自行百度。

 c. CSRedisCore: 免費,性能比StackExchange高。(https://github.com/2881099/csredis)   【目前強烈推薦】

 d. FreeRedis:免費,是CSRedisCore作者新維護的一個開源項目 (https://github.com/2881099/FreeRedis)

(2).可視化客戶端程序:RedisDesktopManager

7. 各種地址

 官網:https://redis.io/ 

 官網-中文:http://www.redis.cn/

 Linux下載地址:https://download.redis.io/releases/

 Windows下載地址:https://github.com/MicrosoftArchive/redis/tags

 菜鳥教程:https://www.runoob.com/redis/redis-tutorial.html

 Redis命令大全和官方翻譯:http://doc.redisfans.com/index.html   (推薦)

 

二. 系列章節

 

新版目錄:(即將完結)

          第一節:Redis的安裝(Linux、docker、win)和配置文件詳解

          第二節:Redis數據類型、使用場景、常用指令剖析

          第三節:Redis緩存雪崩、擊穿、穿透、雙寫一致性、並發競爭、熱點key重建優化、BigKey的優化 等解決方案

          第四節:Redis數據持久化機制(備份恢復)、緩存淘汰策略、主從同步原理、常見規范與優化詳解

          第五節:Redis架構演變之主從、Sentinel哨兵、Cluster(通信、分片、路由等機制)

          第六節:Redis Cluster搭建詳解和集群運維(節點、槽位等)

          第八節: Redis事務、pub/sub、PipeLine-管道、benchmark性能測試詳解

          第九節:Redis的Bloom Filter原理、實操、以及應用場景(緩存穿透、黑名單校驗等)詳解

          第十節:Redis 腳本、Lua語法學習、以及秒殺案例腳本分析

          第十一節:Redis6.0新特性、剖析線程模型(單線程和多線程)

          第十二節:Redis面試專題總結版(持續更新)

          第十三節:基於StackExchange.Redis程序集調用redis各個功能詳解(可參考舊版目錄的調用-不單獨整理)

          第十四節:基於CSRedisCore程序集調用redis各個功能詳解

          第十五節:Redis分布式鎖剖析和幾種客戶端的實現

          第x節:

          第x節:

 

舊版目錄(內容僅供參考,不再維護):

          第一節: String類型和Hash類型的介紹和案例應用

          第二節: Set類型和SortedSet類型的介紹和案例應用

          第三節: List類型的介紹、生產者消費者模式、發布訂閱模式

          第四節:Geo類型介紹以及Redis批量操作、事務、分布式鎖

          第五節:Redis架構演變歷程和cluster集群模式架構的搭建

          第六節:秒殺業務/超賣問題的幾種解決思路

          第七節:

          第八節:

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM