特價 -20%

NoSQL開發完美方案:Redis+Docker高性能虛擬化實戰 DM2136

NT$960

出版商 深智數位股份有限公司
出版日期 2021年07月19日
語言 繁體中文
頁數 868
ISBN 9789860776140
Add to Wishlist
貨號: DM2136 Category:

描述

內容簡介

還在MySQL嗎?

全世界都在NoSQL了,首選當然就是Redis!

好裝好用還能用Docker做叢集分佈,帶你進入巨量資料的世界。

 絕大多數Redis初學者只會拿Redis當Map用,只會在單機環境上只會針對String資料類型進行SET和GET操作,這當然不是Redis!Redis本身就支援多台叢集的功能,這才是NoSQL的精神所在。當系統出現大量存取需求時,單台Redis伺服器並沒有形成高可用的運行環境,這也是大家使用Redis最常見的錯誤。

本書程式設計師提供一本實戰開發的Redis圖書,包括高頻使用的Redis運行維護知識、使用常用的Redis Java Client API框架Jedis來操作Redis伺服器的知識和技能。書中充實地介紹了常用Command命令的使用方法,介紹的命令的覆蓋率達到90%以上。當然最流行的Docker佈署方式也是Redis的最佳拍檔,本書也完全介紹。

▌本書重點

  • 完整解析Redis的5大資料類型String、Hash、List、Set和Sorted Set
  • Connection類型命令
  • Key類型命令
  • HyperLogLog、Redis Bloom布隆篩檢程式
  • 控制頻率的Redis-Cell模組
  • 高性能佇列的Pub/Sub命令
  • 資料排序統計的Streaming
  • 批次執行的Pipelining
  • 持久化、主從複製以及檢查點的故障發現/轉移
  • 使用ACL來對Key進行保護

▌目標讀者

  • 所有使用 Redis 和 Jedis 進行程式設計的開發人員。
  • 伺服器和資料儲存系統開發人員。
  • 分散式系統架構師。
  • 網際網路技術程式設計師。
  • 網際網路技術架構師。

 

作者簡介

高洪岩

某世界500強企業高級項目經理,10餘年項目管理與開發經驗,對多線程和並發,Android移動開發,智能報表,分佈式處理等企業級架構技術深耕多年,深諳Java技術開發難點與要點,擁有良好的技術素養和豐富的實踐經驗,一直在持續關注架構的優化和重構領域,喜歡技術與教育相結合的方式共享知識。

目錄

01 架設Redis 開發環境

1.1 什麼是NoSQL

1.2 為什麼使用NoSQL

1.3 NoSQL 的優勢

1.4 NoSQL 的劣勢

1.5 Redis 介紹及使用場景

1.6 Redis 沒有Windows 版本

1.7 架設Linux 環境

1.8 架設Redis 環境

1.9 啟動Redis 服務

1.10 停止服務

1.11 測試Redis 服務性能

1.12 更改Redis 服務通訊埠編號

1.13 對Redis 設定密碼

1.14 連接遠端Redis 伺服器

1.15 使用set 和get 命令存設定值與中文的處理

1.16 設定key 名稱的建議

1.17 使用Redis Desktop Manager圖形介面工具管理Redis

1.18 在Java 中操作Redis

1.19 使用--bigkeys 參數找到大key

1.20 在redis.conf 設定檔中使用include 匯入其他設定檔

 

02 Connection 類型命令

2.1 auth 命令

2.2 echo 命令

2.3 ping 命令

2.4 quit 命令

2.5 select 命令

2.6 swapdb 命令

2.7 驗證Pool 類別中的連接屬於長連接

2.8 增加Redis 最大連接數

 

03 String 類型命令

3.1 append 命令

3.2 incr 命令

3.3 incrby 命令

3.4 incrbyfloat 命令

3.5 decr 命令

3.6 decrby 命令

3.7 set 和get 命令

3.8 strlen 命令

3.9 setrange 命令

3.10 getrange 命令

3.11 setbit 和getbit 命令

3.12 bitcount 命令

3.13 bitop 命令

3.14 getset 命令

3.15 msetnx 命令

3.16 mset 命令

3.17 mget 命令

3.18 bitfield 命令

3.19 bitpos 命令

3.20 「秒殺」核心演算法實現

3.21 使用Redisson 框架實現分散式鎖

3.22 處理慢查詢

 

04 Hash 類型命令

4.1 hset 和hget 命令

4.2 hmset 和hmget 命令

4.3 hlen 命令

4.4 hdel 命令

4.5 hexists 命令

4.6 hincrby 和hincrbyfloat命令

4.7 hgetall 命令

4.8 hkeys 和hvals 命令

4.9 hsetnx 命令

4.10 hstrlen 命令

4.11 hscan 命令

4.12 使用sort 命令對雜湊進行排序

 

05 List 類型命令

5.1 rpush、llen 和lrange 命令

5.2 rpushx 命令

5.3 lpush 命令

5.4 lpushx 命令

5.5 rpop 命令

5.6 lpop 命令

5.7 rpoplpush 命令

5.8 lrem 命令

5.9 lset 命令

5.10 ltrim 命令

5.11 linsert 命令

5.12 lindex 命令

5.13 blpop 命令

5.14 brpop 命令

5.15 brpoplpush 命令

5.16 使用sort 命令對串列進行排序

5.17 List 類型命令的常見使用模式

 

06 Set 類型命令

6.1 sadd、smembers 和scard命令

6.2 sdiff 和sdiffstore 命令

6.3 sinter 和sinterstore 命令

6.4 sismember 命令

6.5 smove 命令

6.6 srandmember 命令

6.7 spop 命令

6.8 srem 命令

6.9 sunion 和sunionstore 命令

6.10 sscan 命令

 

07 Sorted Set 類型命令

7.1 zadd、zrange 和zrevrange命令

7.2 zcard 命令

7.3 zcount 命令

7.4 zincrby 命令

7.5 zunionstore 命令

7.6 zinterstore 命令

7.7 zrangebylex、zrevrangebylex和zremrangebylex 命令

7.8 zlexcount 命令

7.9 zrangebyscore、zrevrangebyscore 和zremrangebyscore 命令

7.10 zpopmax 和zpopmin 命令

7.11 bzpopmax 和bzpopmin命令

7.12 zrank、zrevrank 和zremrangebyrank 命令

7.13 zrem 命令

7.14 zscore 命令

7.15 zscan 命令

7.16 sort 命令

 

08 Key 類型命令

8.1 del 和exists 命令

8.2 unlink 命令

8.3 rename 命令

8.4 renamenx 命令

8.5 keys 命令

8.6 type 命令

8.7 randomkey 命令

8.8 dump 和restore 命令

8.9 expire 和ttl 命令

8.10 pexpire 和pttl 命令

8.11 expireat 命令

8.12 pexpireat 命令

8.13 persist 命令

8.14 move 命令

8.15 object 命令

8.16 migrate 命令

8.17 scan 命令

8.18 touch 命令

 

09 HyperLogLog、Bloom Filter 類型命令及Redis-Cell 模組

9.1 HyperLogLog 類型命令

9.2 Bloom Filter 類型命令

9.3 使用Redis-Cell 模組實現限流

 

10 GEO 類型命令

10.1 geoadd 和geopos 命令

10.2 geodist 命令

10.3 geohash 命令

10.4 georadius 命令

10.5 georadiusbymember 命令

10.6 刪除GEO 資料類型中的元素

 

11 Pub/Sub 類型命令

11.1 publish 和subscribe 命令

11.2 unsubscribe 命令

11.3 psubscribe 命令

11.4 punsubscribe 命令

11.5 pubsub 命令

 

12 Stream 類型命令

12.1 xadd 命令

12.2 xlen 命令

12.3 xdel 命令

12.4 xrange 命令

12.5 xrevrange 命令

12.6 xtrim 命令

12.7 xread 命令

12.8 消費者組的使用

 

13 Pipelining 和Transaction 類型命令

13.1 管線

13.2 交易

 

14 資料持久化

14.1 使用RDB 實現資料持久化

14.2 使用AOF 實現資料持久化

14.3 使用RDB 和AOF 混合實現資料持久化

14.4 使用shutdown 命令正確停止Redis 服務

 

15 複製

15.1 實現複製

15.2 取消複製

15.3 手動操作實現容錯移轉

 

16 哨兵

16.1 架設檢查點環境

16.2 監視多個Master 伺服器

16.3 檢查點常用命令

16.4 實現容錯移轉

16.5 強制實現容錯移轉

16.6 案例

 

17 叢集

17.1 使用虛擬槽實現資料分片

17.2 自動架設本地Redis 叢集環境

17.3 重新導向操作

17.4 使用readonly 和readwrite命令啟用和禁用Replica伺服器讀取

17.5 手動架設分散式Redis 叢集環境

17.6 使用cluster myid 命令獲得當前伺服器ID

17.7 使用cluster replicas 命令查看指定Master 伺服器下的Replica 伺服器資訊

17.8 使用cluster slots 命令查看槽與伺服器連結的資訊

17.9 使用cluster keyslot 命令查看key 所屬槽

17.10 案例

 

18 記憶體淘汰策略

18.1 記憶體淘汰策略簡介

18.2 記憶體淘汰策略:noeviction

18.3 記憶體淘汰策略:volatile-lru

18.4 記憶體淘汰策略:volatile-lfu

18.5 記憶體淘汰策略:volatile-random

18.6 使用淘汰策略:volatile-ttl

18.7 使用淘汰策略:allkeys-lru

18.8 記憶體淘汰策略:allkeys-lfu

18.9 使用淘汰策略:allkeys-random

 

19 使用Docker實現容器化

19.1 容器

19.2 使用Docker 的經典場景

19.3 Docker 的介紹

19.4 Docker 映像檔的介紹

19.5 Docker 由4 部分組成

19.6 Docker 具有跨平台特性

19.7 Docker 的優點

19.8 moby 和docker-ce 與docker-ee 之間的關係

19.9 在Ubuntu 中架設Docker環境

19.10 操作Docker 服務與容器

19.11 映像檔檔案操作

19.12 容器管理主控台portainer

19.13 Docker 元件

19.14 網路模式:橋接模式

19.15 網路模式:主機模式

19.16 透過網路別名實現容器之間通訊

19.17 常用軟體的Docker 映像檔檔案與容器

19.18 啟動Docker 服務後容器隨之啟動與取消

 

20 Docker 中架設Redis高可用環境

20.1 複製

20.2 檢查點

20.3 叢集

 

21 Docker 中實現資料持久化

21.1 使用RDB 實現資料持久化

21.2 使用AOF 實現資料持久化

21.3 使用RDB 和AOF 混合實現資料持久化

 

22 ACL 類型命令

22.1 acl list 命令

22.2 為預設使用者設定密碼並查看ACL 資訊

22.3 acl save 和acl load 命令

22.4 acl users 命令

22.5 acl getuser 命令

22.6 acl deluser 命令

22.7 acl cat 命令

22.8 acl cat <category> 命令

22.9 acl genpass 命令

22.10 acl whoami 命令

22.11 acl log 命令

22.12 驗證使用setuser 命令創建的使用者預設無任何許可權

22.13 使用setuser on/off 啟用或禁用使用者

22.14 使用+<command> 和–<command> 為使用者設定執行命令的許可權

22.15 使用+@<category> 為使用者設定能執行指定命令類型的許可權

22.16 使用- @<category> 為使用者設定能執行指定命令類型的許可權

22.17 使用+<command> |<subcommand> 為使用者增加能執行的子命令許可權

22.18 使用+@all 和- @all 為使用者增加或刪除全部命令的執行許可權

22.19 使用~pattern 限制能存取key 的模式

22.20 使用resetkeys 清除所有key的存取模式

22.21 使用><password> 和<<password> 為使用者設定或刪除純文字密碼

22.22 使用#<hash> 和!<hash> 為使用者設定或刪除SHA-256 密碼

22.23 使用nopass 和resetpass 為使用者設定無密碼或清除所有密碼

22.24 使用reset 命令重置使用者ACL 資訊

 

你是否一直在拿Redis 當Map 用?在單機環境上只會針對String 資料類型進行SET 和GET 操作?這絕對是大多數Redis 初學者正經歷的場景,但這並不是Redis 的全部。

 

我有幸參與了IT 企業的技術教育訓練,教育訓練中發現在開發階段,合作企業的Redis 伺服器一直是在單機環境下運行的,並且記憶體中包含大量的String 資料類型,而String 值有的高達10MB 左右,造成軟體系統的整體吞吐量急劇下降,業務經常出現逾時卡死的現象,在系統記錄檔中出現大量的警告資訊,而單台Redis 伺服器並沒有形成高可用的運行環境。

這些情況都屬於「能用就行,壞了再說」的「埋炸彈」場景,當軟體真正出現問題時需要耗費大量的人力物力,系統升級不但影響了專案正常的進度,而且還會影響客戶業務正常的運行。這些都屬於Redis 使用不當,對Redis 不了解的「錯誤使用方式」。因此,我認為非常有必要為Java 程式設計師提供一本實戰開發類的Redis 圖書,本書全面講解Redis 系統和基礎知識,包括高頻使用的Redis 運行維護知識、使用常用的Redis Java Client API 框架Jedis 來操作Redis 伺服器的知識和技能。書中充實地介紹了常用Command 命令的使用方法,介紹的命令的覆蓋率達到90% 以上。

▌內容結構

本書內容涵蓋以下主題。

(1) Redis 的五巨量資料類型:String、Hash、List、Set 和Sorted Set 是5種常見的基底資料型態。

(2) Connection 類型命令提供了連接功能,Key 類型命令提供了處理key鍵的功能。

(3) HyperLogLog、Redis Bloom 布隆篩檢程式,以及控制頻率的Redis-Cell 模組提供了針對巨量資料統計的相關功能。

(4) 基於地理位置的GEO 資料類型令Redis 開發基於地理位置的軟體系統更加得心應手。

(5) Pub/Sub 命令提供了簡單高性能的訊息佇列功能。

(6) Stream 命令提供了資料序列功能,能夠極佳地支援資料的排序統計。

(7) Pipelining 命令提供了命令的批次執行的功能,Transaction 命令提供了對交易的處理的功能。

(8) Redis 的資料持久化功能性能非常優秀,這也是運行維護工程師必備的技術。

(9) Redis 提供了主從複製功能,可實現高可用。

(10) 檢查點提供了故障發現與轉移,也可以實現高可用。

(11) 叢集是學習Redis 的高頻基礎知識,也是一個成熟Redis 架構必備的組織方案。

(12) 記憶體淘汰策略實現記憶體的高效利用,透過不同的處理策略清除不常用的資料。

(13) 針對Redis 的環境,結合Docker 技術,以實現在容器中進行Redis開發運行環境的部署。

(14) ACL 功能提供了對Key 的保護,實現了許可權驗證功能。

▌目標讀者

  • 所有使用 Redis 和 Jedis 進行程式設計的開發人員。
  • 伺服器和資料儲存系統開發人員。
  • 分散式系統架構師。
  • 網際網路技術程式設計師。
  • 網際網路技術架構師。

 

本書盡可能地全面覆蓋Redis 系統的基礎知識,選取的每個案例都經過了實操驗證,Jedis 的程式可無錯運行,力求大幅地幫助Java 程式設計師掌握Redis 這門重要的技術,為其職業生涯保駕護航。

本書的出版離不開公司主管的大力支持,另外也要感謝我的父母和我的妻子,在我寫作的過程中你們承擔了很多本該屬於我的責任,最後要感謝傅道坤和陳聰聰編輯,感謝你們為這本書所做的工作。

額外資訊

出版商

深智數位股份有限公司

出版日期

2021年07月19日

語言

繁體中文

頁數

868

ISBN

9789860776140

Close Bitnami banner
Bitnami