亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis集群模式搭建與原理詳解

發布時間:2020-07-16 19:47:18 來源:網絡 閱讀:340 作者:e小調888 欄目:軟件技術

1. Redis集群方案

Redis Cluster 集群模式通常具有高可用、可擴展性、分布式、容錯等特性。Redis 分布式方案一般有兩種:

1.1 客戶端分區方案

客戶端就已經決定數據會被存儲到哪個 redis 節點或者從哪個 redis 節點讀取數據。其主要思想是采用哈希算法將 Redis 數據的 key 進行散列,通過 hash 函數,特定的 key會映射到特定的 Redis 節點上。

深入剖析Redis-Redis集群模式搭建與原理詳解

客戶端分區方案的代表為 Redis Sharding,Redis Sharding 是 Redis Cluster 出來之前,業界普遍使用的 Redis多實例集群方法。Java?的 Redis 客戶端驅動庫 Jedis,支持 Redis Sharding 功能,即 ShardedJedis 以及結合緩存池的 ShardedJedisPool。

優點

不使用第三方中間件,分區邏輯可控,配置簡單,節點之間無關聯,容易線性擴展,靈活性強。

缺點

客戶端無法動態增刪服務節點,客戶端需要自行維護分發邏輯,客戶端之間無連接共享,會造成連接浪費。

1.2. 代理分區方案

客戶端發送請求到一個代理組件,代理解析客戶端的數據,并將請求轉發至正確的節點,最后將結果回復給客戶端。

優點:簡化客戶端的分布式邏輯,客戶端透明接入,切換成本低,代理的轉發和存儲分離。 缺點:多了一層代理層,加重了架構部署復雜度和性能損耗。

深入剖析Redis-Redis集群模式搭建與原理詳解

代理分區主流實現的有方案有 Twemproxy 和 Codis。

1.2.1. Twemproxy

Twemproxy 也叫 nutcraker,是 twitter 開源的一個 redis 和 memcache 的中間代理服務器程序。Twemproxy 作為代理,可接受來自多個程序的訪問,按照路由規則,轉發給后臺的各個 Redis 服務器,再原路返回。Twemproxy 存在單點故障問題,需要結合 Lvs 和 Keepalived 做高可用方案。

深入剖析Redis-Redis集群模式搭建與原理詳解

優點:應用范圍廣,穩定性較高,中間代理層高可用。 缺點:無法平滑地水平擴容/縮容,無可視化管理界面,運維不友好,出現故障,不能自動轉移。

1.2.2. Codis

Codis 是一個分布式Redis 解決方案,對于上層應用來說,連接 Codis-Proxy 和直接連接原生的Redis-Server 沒有的區別。Codis 底層會處理請求的轉發,不停機的進行數據遷移等工作。Codis 采用了無狀態的代理層,對于客戶端來說,一切都是透明的。

深入剖析Redis-Redis集群模式搭建與原理詳解

優點

實現了上層 Proxy 和底層 Redis 的高可用,數據分片和自動平衡,提供命令行接口和 RESTful API,提供監控和管理界面,可以動態添加和刪除Redis 節點。

缺點

部署架構和配置復雜,不支持跨機房和多租戶,不支持鑒權管理。

1.3. 查詢路由方案

客戶端隨機地請求任意一個 Redis 實例,然后由 Redis 將請求轉發給正確的 Redis 節點。Redis Cluster 實現了一種混合形式的查詢路由,但并不是直接將請求從一個 Redis 節點轉發到另一個 Redis 節點,而是在客戶端的幫助下直接重定向( redirected)到正確的 Redis 節點。

深入剖析Redis-Redis集群模式搭建與原理詳解

優點

無中心節點,數據按照槽存儲分布在多個 Redis 實例上,可以平滑的進行節點擴容/縮容,支持高可用和自動故障轉移,運維成本低。

缺點

嚴重依賴 Redis-trib 工具,缺乏監控管理,需要依賴 Smart Client (維護連接,緩存路由表,MultiOp 和 Pipeline 支持)。Failover 節點的檢測過慢,不如中心節點ZooKeeper 及時。Gossip 消息具有一定開銷。無法根據統計區分冷熱數據。

2. 數據分布

2.1. 數據分布理論

分布式數據庫首先要解決把整個數據集按照分區規則映射到多個節點的問題,即把數據集劃分到多個節點上,每個節點負責整體數據的一個子集。

深入剖析Redis-Redis集群模式搭建與原理詳解

數據分布通常有哈希分區和順序分區兩種方式,對比如下:

分區方式 特點 相關產品 哈希分區 離散程度好,數據分布與業務無關,無法順序訪問 Redis Cluster,Cassandra,Dynamo 順序分區 離散程度易傾斜,數據分布與業務相關,可以順序訪問 BigTable,HBase,Hypertable 由于 Redis Cluster 采用哈希分區規則,這里重點討論哈希分區。常見的哈希分區規則有幾種,下面分別介紹:

2.1.1. 節點取余分區

使用特定的數據,如 Redis 的鍵或用戶ID,再根據節點數量N 使用公式:hash(key)% N 計算出哈希值,用來決定數據映射到哪一個節點上。

深入剖析Redis-Redis集群模式搭建與原理詳解

優點

這種方式的突出優點是簡單性,常用于數據庫的分庫分表規則。一般采用預分區的方式,提前根據數據量規劃好分區數,比如劃分為 512 或 1024 張表,保證可支撐未來一段時間的數據容量,再根據負載情況將表遷移到其他數據庫中。擴容時通常采用翻倍擴容,避免數據映射全部被打亂,導致全量遷移的情況。

缺點

當節點數量變化時,如擴容或收縮節點,數據節點映射關系需要重新計算,會導致數據的重新遷移。

2.1.2. 一致性哈希分區

一致性哈希可以很好的解決穩定性問題,可以將所有的存儲節點排列在收尾相接的 Hash 環上,每個 key 在計算 Hash 后會順時針找到臨接的存儲節點存放。而當有節點加入或退出時,僅影響該節點在 Hash 環上順時針相鄰的后續節點。

深入剖析Redis-Redis集群模式搭建與原理詳解

優點

加入和刪除節點只影響哈希環中順時針方向的相鄰的節點,對其他節點無影響。

缺點

加減節點會造成哈希環中部分數據無法命中。當使用少量節點時,節點變化將大范圍影響哈希環中數據映射,不適合少量數據節點的分布式方案。普通的一致性哈希分區在增減節點時需要增加一倍或減去一半節點才能保證數據和負載的均衡。

注意:因為一致性哈希分區的這些缺點,一些分布式系統采用虛擬槽對一致性哈希進行改進,比如 Dynamo 系統。

2.1.3. 虛擬槽分區

虛擬槽分區巧妙地使用了哈希空間,使用分散度良好的哈希函數把所有數據映射到一個固定范圍的整數集合中,整數定義為槽(slot)。這個范圍一般遠遠大于節點數,比如 Redis Cluster 槽范圍是 0 ~ 16383。槽是集群內數據管理和遷移的基本單位。采用大范圍槽的主要目的是為了方便數據拆分和集群擴展。每個節點會負責一定數量的槽,如圖所示:

深入剖析Redis-Redis集群模式搭建與原理詳解

當前集群有 5 個節點,每個節點平均大約負責 3276 個槽。由于采用高質量的哈希算法,每個槽所映射的數據通常比較均勻,將數據平均劃分到 5 個節點進行數據分區。Redis Cluster 就是采用虛擬槽分區。

節點1: 包含 0 到 3276 號哈希槽。 節點2:包含 3277 到 6553 號哈希槽。 節點3:包含 6554 到 9830 號哈希槽。 節點4:包含 9831 到 13107 號哈希槽。 節點5:包含 13108 到 16383 號哈希槽。

這種結構很容易添加或者刪除節點。如果增加一個節點 6,就需要從節點 1 ~ 5 獲得部分槽分配到節點 6 上。如果想移除節點 1,需要將節點 1 中的槽移到節點 2 ~ 5 上,然后將沒有任何槽的節點 1 從集群中移除即可。

由于從一個節點將哈希槽移動到另一個節點并不會停止服務,所以無論添加刪除或者改變某個節點的哈希槽的數量都不會造成集群不可用的狀態.

2.2. Redis的數據分區

Redis Cluster 采用虛擬槽分區,所有的鍵根據哈希函數映射到 0~16383 整數槽內,計算公式:slot = CRC16(key)& 16383。每個節點負責維護一部分槽以及槽所映射的鍵值數據,如圖所示:

深入剖析Redis-Redis集群模式搭建與原理詳解

2.2.1. Redis虛擬槽分區的特點

解耦數據和節點之間的關系,簡化了節點擴容和收縮難度。 節點自身維護槽的映射關系,不需要客戶端或者代理服務維護槽分區元數據。 支持節點、槽、鍵之間的映射查詢,用于數據路由、在線伸縮等場景。

2.3. Redis集群的功能限制

Redis 集群相對單機在功能上存在一些限制,需要開發人員提前了解,在使用時做好規避。

key批量操作支持有限。

類似 mset、mget 操作,目前只支持對具有相同 slot 值的 key 執行批量操作。對于映射為不同slot 值的 key 由于執行 mget、mget 等操作可能存在于多個節點上,因此不被支持。

key事務操作支持有限。

只支持多key 在同一節點上的事務操作,當多個 key 分布在不同的節點上時無法使用事務功能。

key 作為數據分區的最小粒度

不能將一個大的鍵值對象如 hash、list 等映射到不同的節點。

不支持多數據庫空間

單機下的 Redis 可以支持 16 個數據庫(db0 ~ db15),集群模式下只能使用一個數據庫空間,即 db0。

復制結構只支持一層

從節點只能復制主節點,不支持嵌套樹狀復制結構。

3. Redis集群搭建

Redis-Cluster 是 Redis 官方的一個高可用解決方案,Cluster 中的 Redis 共有 2^14(16384) 個 slot槽。創建 Cluster 后,槽會平均分配到每個 Redis 節點上。

下面介紹一下本機啟動 6 個 Redis 的集群服務,并使用 redis-trib.rb 創建3主3從的集群。搭建集群工作需要以下三個步驟:

3.1. 準備節點

Redis 集群一般由多個節點組成,節點數量至少為 6 個,才能保證組成完整高可用的集群。每個節點需要開啟配置cluster-enabled yes,讓 Redis 運行在集群模式下。

Redis 集群的節點規劃如下:

節點名稱 端口號 是主是從 所屬主節點 redis-6379 6379 主節點 --- redis-6389 6389 從節點 redis-6379 redis-6380 6380 主節點 --- redis-6390 6390 從節點 redis-6380 redis-6381 6381 主節點 --- redis-6391 6391 從節點 redis-6381注意:建議為集群內所有節點統一目錄,一般劃分三個目錄:conf、data、log,分別存放配置、數據和日志相關文件。把 6 個節點配置統一放在 conf 目錄下。

3.1.1. 創建redis各實例目錄

$ sudo mkdir -p /usr/local/redis-cluster

$ cd /usr/local/redis-cluster

$ sudo mkdir conf data log

$ sudo mkdir -p data/redis-6379 data/redis-6389 data/redis-6380 data/redis-6390 data/redis-6381 data/redis-6391

復制代碼

3.1.2. redis配置文件管理

根據以下模板配置各個實例的 redis.conf,以下只是搭建集群需要的基本配置,可能需要根據實際情況做修改。

# redis后臺運行

daemonize yes

# 綁定的主機端口

bind 127.0.0.1

# 數據存放目錄

dir /usr/local/redis-cluster/data/redis-6379

# 進程文件

pidfile /var/run/redis-cluster/${自定義}.pid

# 日志文件

logfile /usr/local/redis-cluster/log/${自定義}.log

# 端口號

port 6379

# 開啟集群模式,把注釋#去掉

cluster-enabled yes

# 集群的配置,配置文件首次啟動自動生成

cluster-config-file /usr/local/redis-cluster/conf/${自定義}.conf

# 請求超時,設置10秒

cluster-node-timeout 10000

# aof日志開啟,有需要就開啟,它會每次寫操作都記錄一條日志

appendonly yes

復制代碼

redis-6379.conf

daemonize yes

bind 127.0.0.1

dir /usr/local/redis-cluster/data/redis-6379

pidfile /var/run/redis-cluster/redis-6379.pid

logfile /usr/local/redis-cluster/log/redis-6379.log

port 6379

cluster-enabled yes

cluster-config-file /usr/local/redis-cluster/conf/node-6379.conf

cluster-node-timeout 10000

appendonly yes

復制代碼

redis-6389.conf

daemonize yes

bind 127.0.0.1

dir /usr/local/redis-cluster/data/redis-6389

pidfile /var/run/redis-cluster/redis-6389.pid

logfile /usr/local/redis-cluster/log/redis-6389.log

port 6389

cluster-enabled yes

cluster-config-file /usr/local/redis-cluster/conf/node-6389.conf

cluster-node-timeout 10000

appendonly yes

復制代碼

redis-6380.conf

daemonize yes

bind 127.0.0.1

dir /usr/local/redis-cluster/data/redis-6380

pidfile /var/run/redis-cluster/redis-6380.pid

logfile /usr/local/redis-cluster/log/redis-6380.log

port 6380

cluster-enabled yes

cluster-config-file /usr/local/redis-cluster/conf/node-6380.conf

cluster-node-timeout 10000

appendonly yes

復制代碼

redis-6390.conf

daemonize yes

bind 127.0.0.1

dir /usr/local/redis-cluster/data/redis-6390

pidfile /var/run/redis-cluster/redis-6390.pid

logfile /usr/local/redis-cluster/log/redis-6390.log

port 6390

cluster-enabled yes

cluster-config-file /usr/local/redis-cluster/conf/node-6390.conf

cluster-node-timeout 10000

appendonly yes

復制代碼

redis-6381.conf

daemonize yes

bind 127.0.0.1

dir /usr/local/redis-cluster/data/redis-6381

pidfile /var/run/redis-cluster/redis-6381.pid

logfile /usr/local/redis-cluster/log/redis-6381.log

port 6381

cluster-enabled yes

cluster-config-file /usr/local/redis-cluster/conf/node-6381.conf

cluster-node-timeout 10000

appendonly yes

復制代碼

redis-6391.conf

daemonize yes

bind 127.0.0.1

dir /usr/local/redis-cluster/data/redis-6391

pidfile /var/run/redis-cluster/redis-6391.pid

logfile /usr/local/redis-cluster/log/redis-6391.log

port 6391

cluster-enabled yes

cluster-config-file /usr/local/redis-cluster/conf/node-6391.conf

cluster-node-timeout 10000

appendonly yes

復制代碼

3.2. 環境準備

3.2.1. 安裝Ruby環境

$ sudo brew install ruby

復制代碼

3.2.2. 準備rubygem redis依賴

$ sudo gem install redis

Password:

Fetching: redis-4.0.2.gem (100%)

Successfully installed redis-4.0.2

Parsing documentation for redis-4.0.2

Installing ri documentation for redis-4.0.2

Done installing documentation for redis after 1 seconds

1 gem installed

復制代碼

3.2.3. 拷貝redis-trib.rb到集群根目錄

redis-trib.rb 是 redis 官方推出的管理 redis集群的工具,集成在 redis 的源碼?src 目錄下,將基于 redis 提供的集群命令封裝成簡單、便捷、實用的操作工具。

$ sudo cp /usr/local/redis-4.0.11/src/redis-trib.rb /usr/local/redis-cluster

復制代碼

查看 redis-trib.rb 命令環境是否正確,輸出如下:

$ ./redis-trib.rb

Usage: redis-trib

create host1:port1 ... hostN:portN --replicas check host:port info host:port fix host:port --timeout reshard host:port --from --to --slots --yes --timeout --pipeline rebalance host:port --weight --auto-weights --use-empty-masters --timeout --simulate --pipeline --threshold add-node new_host:new_port existing_host:existing_port --slave --master-id del-node host:port node_id set-timeout host:port milliseconds call host:port command arg arg .. arg import host:port --from --copy --replace help (show this help) For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster. 復制代碼

redis-trib.rb 是 redis 作者用 ruby 完成的。redis-trib.rb命令行工具的具體功能如下:

命令 作用 create 創建集群 check 檢查集群 info 查看集群信息 fix 修復集群 reshard 在線遷移slot rebalance 平衡集群節點slot數量 add-node 將新節點加入集群 del-node 從集群中刪除節點 set-timeout 設置集群節點間心跳連接的超時時間 call 在集群全部節點上執行命令 import 將外部redis數據導入集群 3.3. 安裝集群

3.3.1. 啟動redis服務節點

運行如下命令啟動 6 臺 redis 節點:

sudo redis-server conf/redis-6379.conf

sudo redis-server conf/redis-6389.conf

sudo redis-server conf/redis-6380.conf

sudo redis-server conf/redis-6390.conf

sudo redis-server conf/redis-6381.conf

sudo redis-server conf/redis-6391.conf

復制代碼

啟動完成后,redis 以集群模式啟動,查看各個 redis 節點的進程狀態:

$ ps -ef | grep redis-server

0 1908 1 0 4:59下午 0:00.01 redis-server *:6379 [cluster]

0 1911 1 0 4:59下午 0:00.01 redis-server *:6389 [cluster]

0 1914 1 0 4:59下午 0:00.01 redis-server *:6380 [cluster]

0 1917 1 0 4:59下午 0:00.01 redis-server *:6390 [cluster]

0 1920 1 0 4:59下午 0:00.01 redis-server *:6381 [cluster]

0 1923 1 0 4:59下午 0:00.01 redis-server *:6391 [cluster]

復制代碼

在每個 redis 節點的 redis.conf 文件中,我們都配置了 cluster-config-file 的文件路徑,集群啟動時,conf 目錄會新生成集群節點配置文件。查看文件列表如下:

$ tree -L 3 .

.

├── appendonly.aof

├── conf

│ ├── node-6379.conf

│ ├── node-6380.conf

│ ├── node-6381.conf

│ ├── node-6389.conf

│ ├── node-6390.conf

│ ├── node-6391.conf

│ ├── redis-6379.conf

│ ├── redis-6380.conf

│ ├── redis-6381.conf

│ ├── redis-6389.conf

│ ├── redis-6390.conf

│ └── redis-6391.conf

├── data

│ ├── redis-6379

│ ├── redis-6380

│ ├── redis-6381

│ ├── redis-6389

│ ├── redis-6390

│ └── redis-6391

├── log

│ ├── redis-6379.log

│ ├── redis-6380.log

│ ├── redis-6381.log

│ ├── redis-6389.log

│ ├── redis-6390.log

│ └── redis-6391.log

└── redis-trib.rb

9 directories, 20 files

復制代碼

3.3.2. redis-trib關聯集群節點

按照從主到從的方式從左到右依次排列 6 個 redis 節點。

$ sudo ./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6389 127.0.0.1:6390 127.0.0.1:6391

復制代碼

集群創建后,redis-trib 會先將 16384 個哈希槽分配到 3 個主節點,即 redis-6379,redis-6380 和 redis-6381。然后將各個從節點指向主節點,進行數據同步。

>>> Creating cluster

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

127.0.0.1:6379

127.0.0.1:6380

127.0.0.1:6381

Adding replica 127.0.0.1:6390 to 127.0.0.1:6379

Adding replica 127.0.0.1:6391 to 127.0.0.1:6380

Adding replica 127.0.0.1:6389 to 127.0.0.1:6381

>>> Trying to optimize slaves allocation for anti-affinity

[WARNING] Some slaves are in the same host as their master

M: ad4b9ffceba062492ed67ab336657426f55874b7 127.0.0.1:6379

slots:0-5460 (5461 slots) master

M: df23c6cad0654ba83f0422e352a81ecee822702e 127.0.0.1:6380

slots:5461-10922 (5462 slots) master

M: ab9da92d37125f24fe60f1f33688b4f8644612ee 127.0.0.1:6381

slots:10923-16383 (5461 slots) master

S: 25cfa11a2b4666021da5380ff332b80dbda97208 127.0.0.1:6389

replicates ad4b9ffceba062492ed67ab336657426f55874b7

S: 48e0a4b539867e01c66172415d94d748933be173 127.0.0.1:6390

replicates df23c6cad0654ba83f0422e352a81ecee822702e

S: d881142a8307f89ba51835734b27cb309a0fe855 127.0.0.1:6391

replicates ab9da92d37125f24fe60f1f33688b4f8644612ee

復制代碼

然后輸入 yes,redis-trib.rb 開始執行節點握手和槽分配操作,輸出如下:

Can I set the above configuration (type 'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join....

>>> Performing Cluster Check (using node 127.0.0.1:6379)

M: ad4b9ffceba062492ed67ab336657426f55874b7 127.0.0.1:6379

slots:0-5460 (5461 slots) master

1 additional replica(s)

M: ab9da92d37125f24fe60f1f33688b4f8644612ee 127.0.0.1:6381

slots:10923-16383 (5461 slots) master

1 additional replica(s)

S: 48e0a4b539867e01c66172415d94d748933be173 127.0.0.1:6390

slots: (0 slots) slave

replicates df23c6cad0654ba83f0422e352a81ecee822702e

S: d881142a8307f89ba51835734b27cb309a0fe855 127.0.0.1:6391

slots: (0 slots) slave

replicates ab9da92d37125f24fe60f1f33688b4f8644612ee

M: df23c6cad0654ba83f0422e352a81ecee822702e 127.0.0.1:6380

slots:5461-10922 (5462 slots) master

1 additional replica(s)

S: 25cfa11a2b4666021da5380ff332b80dbda97208 127.0.0.1:6389

slots: (0 slots) slave

replicates ad4b9ffceba062492ed67ab336657426f55874b7

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

復制代碼

執行集群檢查,檢查各個 redis 節點占用的哈希槽(slot)的個數以及 slot覆蓋率。16384 個槽位中,主節點redis-6379、redis-6380 和 redis-6381 分別占用了 5461、5461 和 5462 個槽位。

3.3.3. redis主節點的日志

可以發現,通過 BGSAVE 命令,從節點redis-6389 在后臺異步地從主節點redis-6379 同步數據。

$ cat log/redis-6379.log

1907:C 05 Sep 16:59:52.960 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

1907:C 05 Sep 16:59:52.961 # Redis version=4.0.11, bits=64, commit=00000000, modified=0, pid=1907, just started

1907:C 05 Sep 16:59:52.961 # Configuration loaded

1908:M 05 Sep 16:59:52.964 * Increased maximum number of open files to 10032 (it was originally set to 256).

1908:M 05 Sep 16:59:52.965 * No cluster configuration found, I'm ad4b9ffceba062492ed67ab336657426f55874b7

1908:M 05 Sep 16:59:52.967 * Running mode=cluster, port=6379.

1908:M 05 Sep 16:59:52.967 # Server initialized

1908:M 05 Sep 16:59:52.967 * Ready to accept connections

1908:M 05 Sep 17:01:17.782 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH

1908:M 05 Sep 17:01:17.812 # IP address for this node updated to 127.0.0.1

1908:M 05 Sep 17:01:22.740 # Cluster state changed: ok

1908:M 05 Sep 17:01:23.681 * Slave 127.0.0.1:6389 asks for synchronization

1908:M 05 Sep 17:01:23.681 * Partial resynchronization not accepted: Replication ID mismatch (Slave asked for '4c5afe96cac51cde56039f96383ea7217ef2af41', my replication IDs are '037b661bf48c80c577d1fa937ba55367a3692921' and '0000000000000000000000000000000000000000')

1908:M 05 Sep 17:01:23.681 * Starting BGSAVE for SYNC with target: disk

1908:M 05 Sep 17:01:23.682 * Background saving started by pid 1952

1952:C 05 Sep 17:01:23.683 * DB saved on disk

1908:M 05 Sep 17:01:23.749 * Background saving terminated with success

1908:M 05 Sep 17:01:23.752 * Synchronization with slave 127.0.0.1:6389 succeeded

復制代碼

參考

《Redis 開發與運維》

另外送福利了,關于Redis的學習腦圖


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清流县| 恩平市| 神池县| 盐津县| 红原县| 石楼县| 蓬莱市| 佛教| 龙海市| 榆林市| 石河子市| 石狮市| 博兴县| 廉江市| 枝江市| 尼木县| 喀什市| 儋州市| 化州市| 青岛市| 怀宁县| 彰化市| 大英县| 南昌市| 苏尼特右旗| 泰安市| 静宁县| 江安县| 左权县| 长寿区| 大连市| 晴隆县| 满洲里市| 自治县| 广东省| 长子县| 泌阳县| 湄潭县| 昌吉市| 辽宁省| 德清县|