发表于2024-11-22
深入理解Redis pdf epub mobi txt 電子書 下載 2024
Redis是當下極為流行的開源鍵值數據結構服務器。它提供瞭多種功能,可在此之上構建多種平颱。
本書定位為實用指南,旨在幫助讀者深入理解Redis數據結構,以便充分發揮Redis的優秀功能。讀者的Redis之旅始於對Redis需求的討論,然後講解瞭高級鍵管理方麵的內容。接下來,讀者將學習設計模式、在DevOps環境中使用Redis的*佳實踐,以及Docker容器化範式。在這之後,讀者將學習如何使用Redis集群和Redis Sentinel進行擴展,隨後將對Redis與其他NoSQL技術(如ElasticSearch和MongoDB)的結閤進行說明。*後,讀者將瞭解如何使用Redis為不相同的數據流構建實時數據分析儀錶闆。
◎探索Redis 3.2中的新增功能
◎選擇正確的Redis數據結構解決問題
◎理解Redis事件循環並實現自定義C命令
◎使用Redis服務器端腳本Lua解決復雜的工作流問題
◎配置Redis實例以達到*佳內存管理
◎使用Redis集群實現數據的分布式
◎使用Redis Sentinel提升Redis解決方案的穩定性
◎將Redis用作現存的數據庫和NoSQL環境的補充方案
◎充分利用Redis提供的各種功能,成為一位DevOps專傢
讓你的Redis技能産生質的飛躍,讓開發酷炫應用從此輕而易舉
本書以由淺入深、由原理到應用場景的方式介紹瞭Redis 這款NoSQL 數據庫産品。書中不僅細緻地講解瞭Redis 中的數據結構及流行的使用模式,還針對Redis 鍵的設計和管理,以及內存管理提齣瞭建設性的方案。同時,作者深入Redis 源碼,將其內部構造通過源代碼調試的方式進行呈現。本書適閤有一定NoSQL 經驗的開發者或者架構師閱讀。讀者可以從書中找到許多應用場景和解決方案,例如Docker 部署、Redis 消息隊列、基於Redis 的ETL 應用和基於Redis 的機器學習等。
汪佳南,擁有7年軟件開發經驗。對編程情有獨鍾,對産品設計很“感冒”,始終堅信技術可以改變世界。《RabbitMQ實戰 高效部署分布式消息隊列 》一書譯者。
Jeremy Nelson是科羅拉多斯普林市的一所四年製私立文理學院科羅拉多學院的一位元數據和係統圖書管理員。除瞭每周 8小時的圖書館研究技術支持工作,為大學生提供信息素養指導,並監督圖書館的係統和編目部門這三項工作之外,Nelson正在積極研究和開發 Catalog Pull平颱中的各種組件和開源工具,供科羅拉多大學、科羅拉多州研究圖書館聯盟和國會圖書館使用。他還是語義網絡初創公司 KnowledgeLinks.io的聯閤創始人和 CTO。
他之前在西部州科羅拉多大學和猶他大學有過圖書館工作經驗。在成為圖書管理員之前,他曾在各種軟件公司和金融服務機構中擔任程序員和項目經理。他的*一本書 Becoming a Lean Library於 2015年齣版,將精益創業和精益製造理念應用於圖書館和圖書館的運營。 Nelson從諾剋斯學院獲得瞭本科學位,並從 University of Illinois Urbana-Champaign獲得瞭圖書館和信息科學的科學碩士。
關於審校者
Emilien Kenler在從事瞭一些小型 Web項目之後,在 2008年高中時開始專注於遊戲開發。直到 2011年,他為不同的小組工作並專門從事係統管理。
2011年,在研究計算機科學工程的同時,他創立瞭一傢公司銷售 Minecraft服務器。他基於像 Node.js和 RabbitMQ這樣的新技術,創建瞭一個輕量級 IaaS(https://github.com/HostYourCreeper/)。
此後,他在 TaDaweb擔任係統管理員,構建基礎架構並創建管理部署和監控的工具。
2014年,他在東京 Wizcorp開啓瞭新的曆程。同年,他畢業於 University of Technology of Compiègne。
Emilien為 Packt Publishing編寫瞭 MariaDB Essentials。他還負責瞭 Learning Nagios 4、 MariaDB High Performance、OpenVZ Essentials、Vagrant Virtual Development Environment Cookbook和 Getting Started with MariaDB-Second Edition的審校。
Saurabh Minni擁有計算機科學專業的工程學位。他有超過 10年的工作經驗,通曉各種編程語言,包括匯編語言、 C、C++、Java、Delphi、JavaScript、Android、iOS、PHP、 Python、ZMQ、Redis、Mongo、Kyoto Tycoon、Cocoa、Carbon、Apache Kafka、Apache Storm和 ElasticSearch。總之,他是一位徹頭徹尾的程序員,喜歡每天學習與技術相關的新事物。
目前,他在 Near公司(這是一傢神奇的初創公司,正在搭建位置智能平颱)中擔任技術架構師一職。除瞭處理幾個項目之外,他還負責部署 Apache Kafka集群。這有助於簡化大數據處理係統中的數據消費。這些係統包括 Apache Storm、Hadoop,等等。
Saurabh同時也是 Apache Kafka Cookbook一書的作者。這是一本有關 Apache Kafka的書,由 Packt Publishing齣版。他還負責 Learning Apache Kafka一書的審校。該書由 Packt Publishing齣版。你可以在 Twitter上通過@the100rabh聯係他,也可以在 https://github.com/the100rabh/上找到他。
目錄
1 為何選擇Redis? 1
閤適之選? 2
嘗試使用Redis 4
流行的使用模式 9
Redis不閤心意?馬上再試試! 11
總結 13
2 高級鍵管理與數據結構 14
Redis鍵 14
Redis鍵模式 15
鍵分隔符和命名約定 17
手動創建Redis模式 19
解構Redis對象映射器 22
鍵過期 27
鍵的注意事項 27
大O符號 28
為自定義代碼計算大O符號 30
迴顧Redis數據結構的時間復雜度 32
字符串 32
哈希 33
列錶 34
集閤 35
有序集閤 36
高級有序集閤操作 39
位串和位操作 39
HyperLogLogs 41
總結 42
3 內存管理的建議與技巧 44
配置Redis 44
主從復製 45
32位Redis 45
INFO memory詳解 47
鍵過期 49
LRU鍵清除策略 54
創建內存高效的Redis數據結構 62
小巧的哈希、列錶、集閤和有序集閤 62
把位、字節和Redis字符串用作隨機訪問數組 68
優化哈希,高效存儲 69
硬件和網絡延遲 72
操作係統建議 74
總結 75
4 Redis編程第一部分:Redis核心、客戶端和編程語言 76
Redis的內部結構 76
理解redis.h和redis.c 83
Redis序列化協議 93
Redis RDB格式 97
使用Redis和Python創建協程 99
使用Node.js和Redis實現Todo列錶應用 103
復製與公共訪問 106
總結 106
5 Redis編程第二部分:Lua腳本、管理與DevOps 108
在Redis中使用Lua 108
使用Redis的KEYS和ARGV 117
Redis中的高級Lua腳本 121
MARC21數據提取 121
紙質文具在綫商店 123
讓JSON-LD、Lua和Redis協同工作 126
Redis Lua調試器 130
Redis的編程與管理 133
主從復製 134
使用MULTI和EXEC實現事務 136
Redis在DevOps中扮演的角色 139
總結 140
6 可伸縮性:Redis集群和Sentinel 142
數據分區的方法 142
範圍分區 143
列錶分區 145
哈希分區 148
復閤分區 149
鍵哈希標簽 150
使用Twemproxy實現Redis集群 151
使用關聯數據片段服務器測試Twemproxy 152
Redis集群的背景 158
Redis集群概覽 159
使用Redis集群 160
Redis集群實時重新配置及重新分片 165
故障轉移 168
在Redis集群中替換或者升級節點 170
使用Redis Sentinel進行監控 171
為區域代碼列錶分區配置Redis Sentinel 173
總結 176
7 Redis與互補的NoSQL技術 177
NoSQL技術的繁榮 177
Redis作為MongoDB的分析補充 181
Redis作為ElasticSearch的預處理組件 192
在BIBCAT中使用Redis和ElasticSearch 193
ElasticSearch、Logstash和Redis 198
Redis作為Fedora Commons的智能緩存補充 199
總結 205
8 Docker容器與雲端部署 206
Linux容器 206
與Redis相關的Docker基礎 211
Docker鏡像中的層 219
Docker文件係統後端 220
Docker和Redis的問題 227
使用Docker Compose打包應用程序 227
Redis和AWS 232
專門的雲托管選項 233
Redis Labs 234
DigitalOcean Redis 234
總結 235
9 任務管理與消息隊列 236
Redis的發布/訂閱模式概述 236
發布/訂閱RESP迴復 237
SUBSCRIBE和UNSUBSCRIBE RESP數組 237
PSUBSCRIBE和UNSUBSCRIBE數組 239
使用redis-cli進行發布/訂閱 240
Redis發布訂閱實戰 242
第一個工作站采用Python進行發布訂閱 244
第二個工作站采用Node.js進行發布訂閱 246
第三個工作站使用Lua客戶端進行發布訂閱 248
Redis鍵空間通知 251
使用Redis和Celery進行任務管理 255
GIS和RestMQ 259
使用RestMQ進行任務管理 262
使用Redis技術進行消息通信 264
使用Disque進行消息通信 264
總結 266
10 信息流的測量與管理 267
基於Redis的ETL方案 267
將JSON轉換成RESP 273
管理Redis時的安全考慮 279
使用Redis Web儀錶闆進行運營監測 282
機器學習 283
樸素貝葉斯與工作分類 284
使用Redis實現綫性規劃 294
總結 299
來源 300
譯者序
對不少互聯網企業來說,使用LNMP 架構可以快速搭建起一套係統,産品可以迅速迭代並盡早投放市場。但隨著訪問量的上升,那些使用傳統關係型數據庫(例如MySQL)的網站開始顯現齣性能方麵的問題。此外,越來越挑剔的用戶也要求網站不能僅專注於功能特性,同時也要追求極緻的産品體驗(即高性能和高可用)。
一方麵,架構師會在數據庫層麵做以下一係列優化。
1.配置主從
例如。為MySQL 服務器配置主從。一颱宕機,另一颱可以頂上繼續服務,以滿足高可用的要求。
2.讀寫分離
配置一主多從。因為一般係統80%的請求都是讀取操作,將這些操作分發到從服務器上可以有效地提升網站響應速度。
3.分庫分錶
隨著數據量的增長,單庫單錶已經難以滿足要求。一些諸如TDDL、Cobar、MyCAT等的MySQL 分布式數據庫中間件應運而生。
另一方麵,架構師也會通過係統化的分析,以安插緩存層的方式緩解數據庫的壓力。對應用係統來說,緩存都應在設計之初就納入考慮的範疇,成為係統不可或缺的一部分。我曾供職的一傢公司就采用Redis 作為緩存的實現方案。應用程序運行在兩個同等的Tomcat容器裏。Tomcat 之前則配置瞭一颱Nginx 用於Load Balance。由於用戶Session 存儲在Redis中(通過Spring 和Shiro 的簡單配置即可實現),應用的無狀態性使得係統可以很方便地進行水平擴縮。另外,我們的業務要求用戶每次瀏覽某個項目頁麵時進行訪問計數(counting)。
為瞭避免頻繁的數據庫讀寫,我們將每個項目的瀏覽量的計算和讀取交給瞭Redis。同時,為瞭避免意外導緻的數據丟失,我們開啓瞭Redis 的持久化功能,並啓動定時任務,每隔一段時間就將項目瀏覽次數同步到數據庫中。
至於為何選擇Redis 而沒有選擇Memcached,當時考慮的主要原因是Redis 支持更為豐富的數據模型。像上述頁麵訪問量計數的需求,可以直接通過Redis 的命令進行操作,而且利用Redis 的單綫程模型,應用程序無須編寫同步代碼。當然,緩存隻是Redis 的其中一個用途。一些典型的場景還包括排行榜、用戶訪問量統計、集閤運算、消息隊列等。國內外的一些大型互聯網企業(例如京東、新浪、Pinterest 等)都對Redis 有不同程度的部署和應用。希望讀者能夠在本書中找到自己想要的答案。
每次翻譯都帶給我不同的體驗,並為我的工作和生活帶來改變。在此,我要感謝電子工業齣版社的編輯張春雨和負責審校的同事,是你們的細心指導保證瞭本書的翻譯質量。
同時,感謝我的父母和我的太太,在你們的陪伴和支持下,我得以專心工作。
由於時間倉促,文中難免有所疏漏,望不吝斧正。
汪佳南
前言
本書旨在從兩方麵為讀者構建Redis 的基礎知識。一方麵,本書提供瞭Redis 及其技術背後的深層含義及理論;另一方麵,拓展瞭Redis 日常實用技能。本書書名中的精通(Mastering)二字暗示瞭精通Redis 是一個持續的過程,而非最終目的地。激動人心的是Redis 持續開放地演進成為瞭時下強大的數據操作和存儲技術。
Redis 背後的設計哲學
在整個項目的生命周期中,Salvatore Sanfilippo 對Redis 的發展方嚮與功能發錶瞭獨到的觀點和見解。在2015 年1 月的一篇有關Redis 對比其他數據庫的基準測試的博客中,
Sanfilippo 聲明“我不想說服開發者們采用Redis。我們隻是盡力提供一款閤適的産品。如果人們能夠使用這款産品完成工作,我們會感到非常開心。這就是我的營銷理念。”
Sanfilippo 和他的Redis 核心開發團隊遵循著成功的開源管理模型:“仁慈獨裁者”(BDL)
模型。該模型中隻能有單獨一個人作為最終獨裁者,來裁決哪些能被提交到Redis 代碼庫中。BDL 模型的成功已經被諸如Linux 內核開發和Python 編程語言等項目證明過瞭。作為主要開發者和維護者的Sanfilippo 成功地將BDL 模型復製到瞭Redis 中。
如果獨裁者拋棄項目,或者更糟的是因病或者死亡而導緻無法工作時,BDL 模型的失效將是災難性的。Redis 浮現齣來的另一個重大問題是當潛在的貢獻者提交Pull Request 時,針對這些提交的行動會被延遲,或者更多時候是被忽略。說句公道話,那些必須經過檢查、測試並閤並到主代碼庫上的變更的數量非常巨大,需要激情和專門的看門人。作為Linux內核項目的初創者及當前的BDL,Linus Torvalds 已經看到自己的角色發生瞭轉變,更多是在閤並那些由其他開發者貢獻的代碼,同時相比親自編寫代碼,他做的更多的是為Linux提供願景和領導力。Sanfilippo 在Redis 主要的電子郵件通信上的一篇主題帖中確認瞭該問題,他給齣瞭以下兩大主要理由來繼續Redis 當前的BDL 模型:
? 項目開發與未來方嚮的一緻性視角
? 對任何新的或者齣現的更改采取問責製
在Sanfilippo 看來,Redis 作為鍵值數據存儲,其易於部署、內存占用少(就Redis 本身來說,而不是指它的數據集!)、安全可靠等特性一直是Redis 在開發者和組織中人氣持續上升的關鍵因素。他的觀點確實造成瞭緊張的關係,特彆是當提齣Redis 的新功能,例如使哈希中具體子值(sub-values)過期,或者為可選功能提供可加載模塊時,這些特性都被拒之門外。Sanfilippo 對於保持Redis 的小巧並專注於使其成為內存數據庫的渴望,推動發展,在2011 年的博客中,他用有關Redis 和Redis 開發過程的七條宣言闡明瞭他的觀點,簡述如下。
1.用於抽象數據類型的DSL。Redis 是一門領域特定語言(DSL),用於抽象數據結構的錶達和使用。這些數據結構不僅包括瞭操作(Redis 命令),還包括瞭使用Redis 相關命令存儲和操作這些數據結構的內存效率和時間復雜度。
2.內存存儲是第一要務。通過將所有數據存儲在計算機內存中,跨係統的Redis 的性能更為一緻,用於實現這些數據結構的眾多算法以更為可預測的方式運行,同時諸如有序集閤這樣的更為復雜的數據類型在內存數據庫中更容易實現。
3.基礎數據結構對應基礎API。Redis 為基礎數據結構實現瞭一套基礎API。這套API由Redis 命令和對應的數據結構組成。它嘗試清晰地反映API 從計算機內存中讀取和寫入的數據結構。Redis 遵循這一設計理念,通過更簡單的數據結構操作來組閤實現更為復雜的操作。
4.代碼如詩。這是所有七條宣言之中最難以滲透的。Sanfilippo 將他的審美偏好融入到代碼之中以契閤Redis 這一長篇巨著。他認為Redis 的編碼風格和方法能夠幫助人們書寫一段敘述。因此,是否包含第三方代碼部分取決於它能否很好地契閤Redis 的敘述和Redis的源代碼。
5.我們反對復雜。避免代碼復雜性。如果要在使用大量代碼來實現小型功能與捨棄該功能之間做齣選擇的話,那麼Redis 會選擇後者,以捨棄額外的復雜性和嚮代碼庫中添加復雜性所帶來的開銷。
6.兩層API。一套是API 的子集,以分布式的方式運行;另一套更大型、功能更為豐富,用來支持多鍵操作。這種分離設計支持像Redis 主從和Redis 集群操作模式這樣重要的功能。
7.我們以優化為樂。通常對於開發者和技術運營者來說,這是一種情感訴求,也是一段非常聰明的聲明。調優技術來解決疑難雜癥所帶來的刺激能夠激起快樂的感覺及對Redis未來無限可能的興奮。
本書涵蓋內容
閱讀本書時你會發現其貫穿著兩大主題,以平行的方式展示瞭流行時尚的運營和過程的開發/運營二元論,即眾所周知的DevOps。為瞭有助於讀者更有針對性地學習章節中包含的內容,每個章節的主題會被歸類為軟件開發或者係統運營。由於兩者之間的邊界越來越模糊,對每個趨勢中主題的深刻理解能夠增強你和你團隊的能力,以便快速高效地為項目開發和部署Redi 深入理解Redis 下載 mobi epub pdf txt 電子書
包裝完好,物流快。
評分還沒用,不知道效果怎樣,物流很給力
評分好久沒買書瞭,不知道這幾本書能看到什麼時候
評分很不錯,很方便的東東
評分挺好
評分一如既往的快速
評分很好用賣傢也非常熱情幫瞭許多忙減輕瞭哼多麻煩沒有造成不必要的睏擾
評分京東大促買瞭好多,就不一一評價,照片瞭。書都很好,買到瞭自己想要的。足夠看好久好久瞭。期待還有這樣子活動。
評分挺好的
深入理解Redis pdf epub mobi txt 電子書 下載