redis 筆記記錄-概述
redis介紹
Redis是一個開源(BSD授權),記憶體儲存的資料結構伺服器,可用作資料庫,快取和訊息佇列代理。它支援字串、#雜湊表、列表、集#、有序集合#,位圖,hyperloglogs等資料類型。內建複製、Lua腳本、LRU收回、##交易以及不同層級磁碟持久化功能,同時透過Redis Sentinel提供高可用,透過Redis Cluster提供自動分區。
Redis到底有多快
Redis採用的是基於記憶體的採用的是單一進程單線程模型的KV 資料庫#,由C語言編寫 ,官方提供的資料是可以達到100000 的QPS(每秒內查詢次數)。
橫軸是連接數,縱軸是QPS。
我們看著官方給出的數據,發現是真的快;作為一個有夢想的程式設計師,必須得知道它為啥那麼快,你說對不對!
那麼我在網頁上查閱過一些資料,大致的情況如下:
完全基於內存,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1);
##資料結構簡單,對資料操作也簡單,Redis中的資料結構是專門進行設計的;
採用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或多執行緒導致的切換而消耗CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗;
#使用多路I/O復用模型,非阻塞IO;
使用底層模型不同,它們之間底層實作方式以及與客戶端之間通訊的應用協定不一樣,Redis直接自己建構了VM 機制,因為一般的系統呼叫系統函數的話,會浪費一定的時間去移動和請求;
多路I/O復用模型是利用select、poll、epoll 可以同時監察多個流的I/O 事件的能力,在空閒的時候,會把當前線程阻塞掉,當有一個或多個流有I/O 事件時,就從阻塞態中喚醒,於是程式就會輪詢一遍所有的流(epoll 是只輪詢那些真正發出了事件的流),並且只依序順序的處理就緒的流,這種做法就避免了大量的無用操作。
總結起來其實有三個點:
#使用 epoll 網路模型,採用單執行緒處理請求。
使用符合需求的各種高效能資料結構。
redis 使用記憶體操作;並使用C語言編寫。
出發點
#本系列的文章不重點討論epoll 網路模型,主要記錄學習redis資料結構的原理。讓我們知道 redis 為什麼資料處理得非常快。
redis 的string 實作原則
redis 的list 實作原則
redis 的set 實作原則
redis 的sorted set 實作原則
#redis 的hash 實作原理
#其他資料類型的介紹
以上是redis 筆記記錄-概述的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

Redis 作為消息中間件,支持生產-消費模型,可持久化消息並保證可靠交付。使用 Redis 作為消息中間件可實現低延遲、可靠和可擴展的消息傳遞。
