上回學(xué)習(xí)的到內(nèi)容大家自己試了沒?搭建起來應(yīng)該難度不大的,今天我們就繼續(xù)學(xué)習(xí)。分布式開發(fā)中,最常見的一個(gè)問題就是怎么擴(kuò)展。本身我們做分布式,就是因?yàn)閱螜C(jī)處理性能不夠,通過多機(jī)來并行處理,就你是單線程和多線程的區(qū)別。
對(duì)于應(yīng)用實(shí)例還好說,畢竟業(yè)務(wù)處理將流量分走就好了,大家干的是一樣的事,但是對(duì)于存儲(chǔ)系統(tǒng)來說,就有一個(gè)很大的問題:數(shù)據(jù)應(yīng)該落在哪里?
就拿 MySQL 的分表來說,本來分的 8 張表,隨著時(shí)間的推移和數(shù)據(jù)量的積累,現(xiàn)在要擴(kuò)充到 16 或者 32 張表了,天啊,想想都頭大,這一堆數(shù)據(jù)怎么遷移?之前的數(shù)據(jù)中,分表主鍵的 Hash 從 %8 變成了 %16 %32 ,很多數(shù)據(jù)都要重新遷移啊。
目前市面上,要么一開始就干它 100 張表,要么就是一致性哈希,其實(shí) Redis 中的 Solt 就是一致性哈希的概念,新加入的節(jié)點(diǎn),我們只需要向它分配槽就行了,畢竟槽的數(shù)量是有限的。這樣,在節(jié)點(diǎn)之間的數(shù)據(jù)遷移就只需要將新節(jié)點(diǎn)分配到的槽中的數(shù)據(jù)遷移過去就好了。
因此,整個(gè) Cluster 的節(jié)點(diǎn)操作,其實(shí)就要分成兩步,一個(gè)是節(jié)點(diǎn)的添加刪除,另一個(gè)就是添加后和刪除前要進(jìn)行槽的分配,從而實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)移以及定位。
先來看怎么添加節(jié)點(diǎn),我們直接看一下 --cluster
命令參數(shù)還有哪些子參數(shù)可以用。
? redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN
--cluster-replicas <arg>
check host:port
--cluster-search-multiple-owners
info host:port
fix host:port
--cluster-search-multiple-owners
--cluster-fix-with-unreachable-masters
reshard host:port
--cluster-from <arg>
--cluster-to <arg>
--cluster-slots <arg>
--cluster-yes
--cluster-timeout <arg>
--cluster-pipeline <arg>
--cluster-replace
rebalance host:port
--cluster-weight <node1=w1...nodeN=wN>
--cluster-use-empty-masters
--cluster-timeout <arg>
--cluster-simulate
--cluster-pipeline <arg>
--cluster-threshold <arg>
--cluster-replace
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id <arg>
del-node host:port node_id
call host:port command arg arg .. arg
--cluster-only-masters
--cluster-only-replicas
set-timeout host:port milliseconds
import host:port
--cluster-from <arg>
--cluster-from-user <arg>
--cluster-from-pass <arg>
--cluster-from-askpass
--cluster-copy
--cluster-replace
backup host:port backup_directory
help
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
Cluster Manager Options:
--cluster-yes Automatic yes to cluster commands prompts
是不是感覺又發(fā)現(xiàn)新大陸了,上次我們只是用了一個(gè) create
命令而已,還有這一大堆命令呢。別的不說,從名字就發(fā)現(xiàn)了 add-node
是添加節(jié)點(diǎn),del-node
是刪除節(jié)點(diǎn)。
首先還是先建立配置文件和啟動(dòng)普通實(shí)例,這一塊就不多說了,直接配置和啟動(dòng) 6382 以及 7382 實(shí)例。然后我們先添加主節(jié)點(diǎn)。
? redis-cli --cluster add-node 127.0.0.1:6382 127.0.0.1:6379
>>> Adding node 127.0.0.1:6382 to cluster 127.0.0.1:6379
>>> Performing Cluster Check (using node 127.0.0.1:6379)
M: 1d48fc74ac96354c19a454bddbbf9b1dac62ac21 127.0.0.1:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 0bef7a24915f5e3c69cc70e7e51443f5a214cf7b 127.0.0.1:7380
slots: (0 slots) slave
replicates 1d48fc74ac96354c19a454bddbbf9b1dac62ac21
S: 47cf0ad16ddb3b80d8055334434dffd7f74229cc 127.0.0.1:6381
slots: (0 slots) slave
replicates 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed
M: 1adc88d15f82dc793e122cb274a1ba312c62d9c4 127.0.0.1:6380
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 127.0.0.1:7379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: e39a71d3484308bcc1fda21d5f919b9e707e21f0 127.0.0.1:7381
slots: (0 slots) slave
replicates 1adc88d15f82dc793e122cb274a1ba312c62d9c4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:6382 to make it join the cluster.
[OK] New node added correctly.
命令很簡單,add-node 后面跟著兩個(gè)參數(shù),第一個(gè)是新節(jié)點(diǎn),第二是已有集群中隨便一個(gè)節(jié)點(diǎn)就可以了。這就添加完成了,我們看一下當(dāng)前集群的信息。
? redis-cli -p 6382
127.0.0.1:6382> CLUSTER NODES
47cf0ad16ddb3b80d8055334434dffd7f74229cc 127.0.0.1:6381@16381 slave 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 0 1656470300000 7 connected
0bef7a24915f5e3c69cc70e7e51443f5a214cf7b 127.0.0.1:7380@17380 slave 1d48fc74ac96354c19a454bddbbf9b1dac62ac21 0 1656470300620 1 connected
# 6382
19fbf50b3536d2ab18a116bfa1e15f424df9af25 127.0.0.1:6382@16382 myself,master - 0 1656470299000 0 connected
1d48fc74ac96354c19a454bddbbf9b1dac62ac21 127.0.0.1:6379@16379 master - 0 1656470300116 1 connected 0-5460
8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 127.0.0.1:7379@17379 master - 0 1656470301000 7 connected 10923-16383
1adc88d15f82dc793e122cb274a1ba312c62d9c4 127.0.0.1:6380@16380 master - 0 1656470300620 2 connected 5461-10922
e39a71d3484308bcc1fda21d5f919b9e707e21f0 127.0.0.1:7381@17381 slave 1adc88d15f82dc793e122cb274a1ba312c62d9c4 0 1656470301632 2 connected
可以看到,當(dāng)前的節(jié)點(diǎn)已經(jīng)連接上了,啥都正常,但是,它沒有槽的信息。如果沒有槽信息,Key 也就不會(huì)分配到這個(gè)節(jié)點(diǎn)上,目前這個(gè)節(jié)點(diǎn)還是廢物階段,那么我們就來配置它的 Solt 。
為節(jié)點(diǎn)分配槽信息,使用的是 --cluster reshard
命令參數(shù)。
? redis-cli --cluster reshard 127.0.0.1:6382
## 當(dāng)前集群信息
>>> Performing Cluster Check (using node 127.0.0.1:6382)
M: 19fbf50b3536d2ab18a116bfa1e15f424df9af25 127.0.0.1:6382
slots: (0 slots) master
S: 47cf0ad16ddb3b80d8055334434dffd7f74229cc 127.0.0.1:6381
slots: (0 slots) slave
replicates 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed
S: 0bef7a24915f5e3c69cc70e7e51443f5a214cf7b 127.0.0.1:7380
slots: (0 slots) slave
replicates 1d48fc74ac96354c19a454bddbbf9b1dac62ac21
M: 1d48fc74ac96354c19a454bddbbf9b1dac62ac21 127.0.0.1:6379
slots:[333-5460] (5128 slots) master
1 additional replica(s)
M: 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 127.0.0.1:7379
slots:[11256-16383] (5128 slots) master
1 additional replica(s)
M: 1adc88d15f82dc793e122cb274a1ba312c62d9c4 127.0.0.1:6380
slots:[5795-10922] (5128 slots) master
1 additional replica(s)
S: e39a71d3484308bcc1fda21d5f919b9e707e21f0 127.0.0.1:7381
slots: (0 slots) slave
replicates 1adc88d15f82dc793e122cb274a1ba312c62d9c4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
## 想要移動(dòng)多少到新的節(jié)點(diǎn)?
How many slots do you want to move (from 1 to 16384)? 1000
## 接收的 ID 是多少?就是新添加節(jié)點(diǎn)的 ID
What is the receiving node ID? 19fbf50b3536d2ab18a116bfa1e15f424df9af25
## 確認(rèn)槽點(diǎn)的來源,all 表示所有節(jié)點(diǎn)平均搞 1000 個(gè)過來
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: all
## 開始檢查
……………………
Moving slot 6119 from 1adc88d15f82dc793e122cb274a1ba312c62d9c4
Moving slot 6120 from 1adc88d15f82dc793e122cb274a1ba312c62d9c4
Moving slot 6121 from 1adc88d15f82dc793e122cb274a1ba312c62d9c4
Moving slot 6122 from 1adc88d15f82dc793e122cb274a1ba312c62d9c4
Moving slot 6123 from 1adc88d15f82dc793e122cb274a1ba312c62d9c4
Moving slot 6124 from 1adc88d15f82dc793e122cb274a1ba312c62d9c4
……………………
## 確定按這個(gè)分槽計(jì)劃來?
Do you want to proceed with the proposed reshard plan (yes/no)? yes
……………………
Moving slot 11253 from 127.0.0.1:7379 to 127.0.0.1:6382:
Moving slot 11254 from 127.0.0.1:7379 to 127.0.0.1:6382:
……………………
內(nèi)容比較長,所以我也添加了注釋,不過咱們還是來一條一條的看一下。
How many slots do you want to move (from 1 to 16384)? 1000
表示要給它多少槽,這里我給了 1000 個(gè)槽過來What is the receiving node ID?
誰來接收這 1000 個(gè)槽,當(dāng)然是新添加的這個(gè)節(jié)點(diǎn)的 IDPlease enter all the source node IDs
從哪些節(jié)點(diǎn)分配槽過來?all 就是其它所有節(jié)點(diǎn)平均分配,也可以填 ID 最后再加個(gè) done 完成這一塊的配置Do you want to proceed with the proposed reshard plan (yes/no)? yes
確定這么分?yes 之后就開始正式分槽了,數(shù)據(jù)也就跟著槽帶過來了好了,現(xiàn)在看下 6382 上是不是有數(shù)據(jù)了。
? redis-cli -c -p 6382
127.0.0.1:6382> keys *
1) "{user:1:}bb"
2) "{user:1:}aa"
3) "{user:2:}aa"
4) "{user:2:}bb"
127.0.0.1:6382> CLUSTER NODES
47cf0ad16ddb3b80d8055334434dffd7f74229cc 127.0.0.1:6381@16381 slave 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 0 1656471120293 7 connected
0bef7a24915f5e3c69cc70e7e51443f5a214cf7b 127.0.0.1:7380@17380 slave 1d48fc74ac96354c19a454bddbbf9b1dac62ac21 0 1656471121811 1 connected
19fbf50b3536d2ab18a116bfa1e15f424df9af25 127.0.0.1:6382@16382 myself,master - 0 1656471120000 8 connected 0-332 5461-5794 10923-11255
1d48fc74ac96354c19a454bddbbf9b1dac62ac21 127.0.0.1:6379@16379 master - 0 1656471120000 1 connected 333-5460
8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 127.0.0.1:7379@17379 master - 0 1656471119788 7 connected 11256-16383
1adc88d15f82dc793e122cb274a1ba312c62d9c4 127.0.0.1:6380@16380 master - 0 1656471121304 2 connected 5795-10922
e39a71d3484308bcc1fda21d5f919b9e707e21f0 127.0.0.1:7381@17381 slave 1adc88d15f82dc793e122cb274a1ba312c62d9c4 0 1656471121000 2 connected
再看一下 NODES 信息,四臺(tái)主庫,新添加的主庫槽信息有點(diǎn)亂,是啊,畢竟是其它三臺(tái)平均分過來的,所以新主庫的槽信息是 0-332 5461-5794 10923-11255
這個(gè)樣子的。
新來的兄弟有點(diǎn)孤單啊,咱們給它把從庫加上怎么樣?讓 7382 成為它的從庫,非常簡單。
? redis-cli --cluster add-node 127.0.0.1:7382 127.0.0.1:6382 --cluster-slave --cluster-master-id 19fbf50b3536d2ab18a116bfa1e15f424df9af25
再來看 NODES 的信息。嗯,完美,數(shù)據(jù)也同步復(fù)制到從庫了。
? redis-cli -c -p 7382
127.0.0.1:7382> CLUSTER NODES
47cf0ad16ddb3b80d8055334434dffd7f74229cc 127.0.0.1:6381@16381 slave 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 0 1656471293998 7 connected
8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 127.0.0.1:7379@17379 master - 0 1656471294000 7 connected 11256-16383
19fbf50b3536d2ab18a116bfa1e15f424df9af25 127.0.0.1:6382@16382 master - 0 1656471294000 8 connected 0-332 5461-5794 10923-11255
e39a71d3484308bcc1fda21d5f919b9e707e21f0 127.0.0.1:7381@17381 slave 1adc88d15f82dc793e122cb274a1ba312c62d9c4 0 1656471292583 2 connected
0bef7a24915f5e3c69cc70e7e51443f5a214cf7b 127.0.0.1:7380@17380 slave 1d48fc74ac96354c19a454bddbbf9b1dac62ac21 0 1656471293593 1 connected
b09db43f11a3cd0b3e994d8780bca6b7faf4eb85 127.0.0.1:7382@17382 myself,slave 19fbf50b3536d2ab18a116bfa1e15f424df9af25 0 1656471293000 8 connected
1adc88d15f82dc793e122cb274a1ba312c62d9c4 127.0.0.1:6380@16380 master - 0 1656471294099 2 connected 5795-10922
1d48fc74ac96354c19a454bddbbf9b1dac62ac21 127.0.0.1:6379@16379 master - 0 1656471292583 1 connected 333-5460
127.0.0.1:7382> keys *
1) "{user:2:}aa"
2) "{user:2:}bb"
3) "{user:1:}aa"
4) "{user:1:}bb"
好了,接下來咱們就再試試怎么刪除剛剛新添加的節(jié)點(diǎn)。使用的是 --cluster del-node
命令參數(shù)。
? redis-cli --cluster del-node 127.0.0.1:7382 b09db43f11a3cd0b3e994d8780bca6b7faf4eb85
>>> Removing node b09db43f11a3cd0b3e994d8780bca6b7faf4eb85 from cluster 127.0.0.1:7382
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
? redis-cli -c -p 7382
127.0.0.1:7382> CLUSTER NODES
b09db43f11a3cd0b3e994d8780bca6b7faf4eb85 127.0.0.1:7382@17382 myself,master - 0 1656471407000 0 connected
刪除從庫沒壓力,直接就刪了,再登進(jìn) 7382 看的話,它現(xiàn)在就是自己一個(gè)孤家寡人了。當(dāng)然,原來的集群中也沒有它的信息了。
? redis-cli -c -p 6382
127.0.0.1:6382> CLUSTER NODES
47cf0ad16ddb3b80d8055334434dffd7f74229cc 127.0.0.1:6381@16381 slave 8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 0 1656471472540 7 connected
0bef7a24915f5e3c69cc70e7e51443f5a214cf7b 127.0.0.1:7380@17380 slave 1d48fc74ac96354c19a454bddbbf9b1dac62ac21 0 1656471472642 1 connected
19fbf50b3536d2ab18a116bfa1e15f424df9af25 127.0.0.1:6382@16382 myself,master - 0 1656471471000 8 connected 0-332 5461-5794 10923-11255
1d48fc74ac96354c19a454bddbbf9b1dac62ac21 127.0.0.1:6379@16379 master - 0 1656471472000 1 connected 333-5460
8d0be91ca6c5e809f3915e23a2ab26d8b14fe5ed 127.0.0.1:7379@17379 master - 0 1656471472000 7 connected 11256-16383
1adc88d15f82dc793e122cb274a1ba312c62d9c4 127.0.0.1:6380@16380 master - 0 1656471471126 2 connected 5795-10922
e39a71d3484308bcc1fda21d5f919b9e707e21f0 127.0.0.1:7381@17381 slave 1adc88d15f82dc793e122cb274a1ba312c62d9c4 0 1656471472136 2 connected
好了,我們?cè)賮韯h 6382 這臺(tái)主庫。
? redis-cli --cluster del-node 127.0.0.1:6382 19fbf50b3536d2ab18a116bfa1e15f424df9af25
>>> Removing node 19fbf50b3536d2ab18a116bfa1e15f424df9af25 from cluster 127.0.0.1:6382
[ERR] Node 127.0.0.1:6382 is not empty! Reshard data away and try again.
踫到問題了吧,現(xiàn)在的 6382 上是有槽數(shù)據(jù)的,如果已經(jīng)分配了槽,那么這個(gè)節(jié)點(diǎn)是不能直接被刪除的。首先,數(shù)據(jù)會(huì)丟,其次,這些槽也不知道該跟誰了。因此,我們需要先把槽轉(zhuǎn)給別人。還是使用 --cluster reshard
來操作。
………………
# 要移動(dòng)多少槽?
How many slots do you want to move (from 1 to 16384)? 16384
# 給誰?注意,這里不能給 6382 了,要把它的給別人
What is the receiving node ID? 1d48fc74ac96354c19a454bddbbf9b1dac62ac21
# 從 6382 上把槽拿出來
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: 19fbf50b3536d2ab18a116bfa1e15f424df9af25
Source node #2: done
………………
這里就沒有貼那么多代碼了,只是貼上來關(guān)鍵部分。
How many slots do you want to move (from 1 to 16384)?
這里要填的只要比 6382 的大就行了,意思就是要把 6382 的槽清空What is the receiving node ID?
這里也不能再填 6382 的 ID 了,我們要把它的槽給別人Please enter all the source node IDs
現(xiàn)在這里填的 6382 的其它的選項(xiàng)就和之前添加新節(jié)點(diǎn)時(shí)一樣了,這樣原來 6382 的槽就轉(zhuǎn)給了 1d48fc74ac96354c19a454bddbbf9b1dac62ac21 也就是 6379 。好了,現(xiàn)在你可以用 --cluster nodes
查看一下集群信息,確認(rèn)沒問題的話再刪除節(jié)點(diǎn)就沒問題了。
? redis-cli --cluster del-node 127.0.0.1:6382 90ac7cdc531bdbb88d47a1980cdf9535cede0b7f
>>> Removing node 90ac7cdc531bdbb88d47a1980cdf9535cede0b7f from cluster 127.0.0.1:6382
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
上面的分槽方式,會(huì)將之前我們分配的 1000 個(gè)槽全部轉(zhuǎn)給 6379 ,這樣其實(shí) 6379 就比另外兩個(gè)槽的數(shù)據(jù)多了。其實(shí)正常轉(zhuǎn)的話,我們應(yīng)該多次去分槽,然后 How many slots do you want to move (from 1 to 16384)?
時(shí)指定大小,比如要給 6379 的就只分配 334 個(gè),因?yàn)橹?6379 也是分了 0-333
這些槽過來。另外兩臺(tái)也是類似的操作,相當(dāng)于就是把之前拿過來的再平均還回去了。不僅限于 3 個(gè)節(jié)點(diǎn),N 個(gè)節(jié)點(diǎn)直接就操作 N 次,然后還 槽數(shù)/N 的數(shù)量回去就好了。
Cluster 分布式集群的學(xué)習(xí)就完成了,最后再說一點(diǎn)就是在 PHP 這種客戶端上如何連接或者使用 Cluster 呢?非常簡單,phpredis 擴(kuò)展或者 predis 擴(kuò)展都有類似的對(duì)象可以直接使用,我們直接看 phpredis 的使用。不清楚 phpredis 和 predis 的小伙伴自己百度下,之前我也在 Laravel 系列的文章課程中講過 【Laravel系列4.7】連接redis以及緩存應(yīng)用https://mp.weixin.qq.com/s/DF3oo3c4RTfU_WvBSKXrpA 。
$c = new \RedisCluster(null, ['127.0.0.1:6379','127.0.0.1:6380','127.0.0.1:6381',
'127.0.0.1:7379','127.0.0.1:7380','127.0.0.1:7381']);
var_dump($c);
// object(RedisCluster)#1 (0) {
// }
RedisCluster 對(duì)象就是連接 Cluster 集群的,它的參數(shù)第一個(gè) null 是一個(gè)名稱的意思,啥意思?就是其實(shí)我們可以在 .ini 的配置文件中配置 redis 的一些相關(guān)信息。然后在這里可以直接通過這個(gè)名稱找到相關(guān)的配置,這樣就不用第二個(gè)參數(shù)了。
# 在 redis.ini or php.ini 文件中
redis.clusters.seeds = "mycluster[]=localhost:6379&test[]=localhost:6380"
redis.clusters.timeout = "mycluster=5"
redis.clusters.read_timeout = "mycluster=10"
# 在代碼中
$redisClusterPro = new RedisCluster('mycluster');
$redisClusterDev = new RedisCluster('test');
從 RedisCluster 對(duì)象輸出的結(jié)果來看,它里面直接就顯示了當(dāng)前主庫的信息。另外還有一點(diǎn)就是,其實(shí)我們第二個(gè)參數(shù)不用寫那么多,只要隨便寫一個(gè)當(dāng)前集群中的節(jié)點(diǎn)信息就可以了。
$c = new \RedisCluster("aaa", ['127.0.0.1:6379']);
然后試試吧,和普通的 Redis 對(duì)象一樣的操作就行了。
$c->set("a1", "111");
$c->set("b1", "111");
$c->incr("b1");
$c->lPush("c1", 1, 2, 3);
print_r($c->get("a1")); echo PHP_EOL;
print_r($c->get("b1")); echo PHP_EOL;
print_r($c->lRange("c1", 0, -1));
// 111
// 112
// Array
// (
// [0] => 3
// [1] => 2
// [2] => 1
// )
去命令行看看,數(shù)據(jù)肯定是存在的啦!
127.0.0.1:6379> get a1
-> Redirected to slot [7785] located at 127.0.0.1:6380
"111"
學(xué)習(xí)完了 Reids Cluster ,我們關(guān)于 Redis 的正課部分也就全部完成了,后面還有一些擴(kuò)展方面的知識(shí)。說實(shí)話,別提 Cluster 了,就是哨兵,甚至是主從,我在日常的真實(shí)項(xiàng)目開發(fā)中都沒接觸過。為啥?Redis 官方給的數(shù)據(jù),理想狀態(tài)下單機(jī)寫和讀分別能達(dá)到每秒 8 萬和 11 萬次。中小型公司大部分情況下單獨(dú)一臺(tái) Redis 的性能都很難發(fā)揮到極致,更別說做主從或者分布式了。不過,機(jī)會(huì)總是留給有準(zhǔn)備的人的,知識(shí)的學(xué)習(xí)和應(yīng)用要分開來看,要是能學(xué)為所用當(dāng)然是最好的,如果用不到,至少還要有一定的儲(chǔ)備,免得真正需要你發(fā)揮的時(shí)候手忙腳亂了。
參考文檔:
https://redis.io/docs/manual/scaling/
聯(lián)系客服