還在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 DeskManager圖形介面工具管理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 bi命令
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 命
序/導讀
序
你是否一直在拿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 這門重要的技術,為其職業生涯保駕護航。
本書的出版離不開公司主管的大力支持,另外也要感謝我的父母和我的妻子,在我寫作的過程中你們承擔了很多本該屬於我的責任,最後要感謝傅道坤和陳聰聰編輯,感謝你們為這本書所做的工作。
高洪岩