Redis 6.0 redis-cluster-proxy 說明


背景

       Redis3.0版本之后開始支持了Redis Cluster,Redis也開始有了分布式緩存的概念。關於Redis Cluster的相關說明,可以看之前的幾篇文章:Redis Cluster 原理相關說明redis-cli --cluster help說明。其架構如下:

因為 Redis Cluster 內部使用的是P2P中的Gossip協議,每個節點既可以從其他節點得到服務,也可以向其他節點提供服務,沒有中心的概念,通過一個節點可以獲取到整個集群的所有信息。所以如果應用連接Redis Cluster可以配置一個節點地址,也可以配置多個節點地址。但需要注意如果集群進行了上下節點的的操作,其應用也需要進行修改,這樣會導致需要重啟應用,非常的不友好。從Redis 6.0開始支持了Prxoy,可以直接用Proxy來管理各個集群節點。本文來介紹下如何使用官方自帶的proxy:redis-cluster-proxy

說明

       通過使用 redis-cluster-proxy 可以與組成Redis集群的一組實例進行通訊,就像是單個實例一樣。Redis群集代理是多線程的,使用多路復用通信模型,因此每個線程都有自己的與群集的連接,該連接由屬於該線程本身的所有客戶端共享。

  在某些特殊情況下(例如MULTI事務或阻塞命令),多路復用將被禁用;並且客戶端將擁有自己的集群連接。這樣客戶端僅發送諸如GET和SET之類的簡單命令就不需要Redis集群的專有連接。

redis-cluster-proxy的主要功能:

  • 路由:每個查詢都會自動路由到集群的正確節點
  • 多線程
  • 支持多路復用和專用連接模型
  • 在多路復用上下文中,可以確保查詢執行和答復順序
  • 發生ASK | MOVED錯誤后自動更新集群的配置:當答復中發生此類錯誤時,代理通過獲取集群的更新配置並重新映射所有插槽來自動更新集群。 更新完成后所有查詢將重新執行,因此,從客戶端的角度來看,一切正常進行(客戶端將不會收到ASK | MOVED錯誤:他們將在收到請求后直接收到預期的回復) 群集配置已更新)。
  • 跨槽/跨節點查詢:支持許多命令,這些命令涉及屬於不同插槽(甚至不同集群節點)的多個鍵。這些命令會將查詢分為多個查詢,這些查詢將被路由到不同的插槽/節點。 這些命令的回復處理是特定於命令的。 某些命令(例如MGET)將合並所有答復,就好像它們是單個答復一樣。 其他命令(例如MSET或DEL)將匯總所有答復的結果。 由於這些查詢實際上破壞了命令的原子性,因此它們的用法是可選的(默認情況下禁用)。 
  • 一些沒有特定節點/插槽的命令(例如DBSIZE)將傳遞到所有節點,並且將對映射的回復進行映射縮減,以便得出所有回復中包含的所有值的總和。
  • 可用於執行某些特定於代理的操作的附加PROXY命令

安裝

  1.  下載

    git clone https://github.com/RedisLabs/redis-cluster-proxy.git
  2. 安裝

    -- 安裝
    make
    
    -- 32位二進制文​​件
    make 32bit
    
    -- 安裝詳細信息,請使用V選項
    make V=1
    
    -- 重建依賴關系
    make distclean
    
    -- 啟動測試
    make test

    注意:默認情況下,安裝redis-cluster-proxy,需要配置環境變量REDIS_HOME(/etc/profile),gcc版本必須大於4.9,即:

    REDIS_HOME=/usr/local/redis6.0/
    export PATH=$PATH:$REDIS_HOME/bin

    使用make安裝,安裝成功之后,執行文件proxy目錄的在src下,如果使用 make install,則安裝成功之后,執行文件在/usr/local/bin目錄中

使用說明

基本用法:

./redis-cluster-proxy CLUSTER_ADDRESS

說明:CLUSTER_ADDRESS是任何群集實例的主機地址(入口點),通過IP:PORT的形式表示TCP連接,或者通過指定文件名將其表示為UNIX套接字。如:

./redis-cluster-proxy 127.0.0.1:6379
./redis-cluster-proxy /path/to/entry-point.socket

help說明:

redis-cluster-proxy -h
Usage: redis-cluster-proxy [OPTIONS] [node1_host:node1_port,node2_host:node2_port,...]
  -c <file>            指定配置文件
  -p, --port <port>    Proxy端口,默認7777;使用0禁止TCP連接Proxy
  --maxclients <n>     最大客戶端連接,默認10000
  --threads <n>        線程數配置,默認8,最大500
  --tcpkeepalive       TCP活躍連接時間,默認300秒
  --tcp-backlog        TCP連接中已完成隊列(完成三次握手之后)的長度,默認511
  --daemonize          是否后台執行
  --pidfile <path>     指定pid文件,如/var/run/redis-cluster-proxy.pid
  --logfile <path>     定日志文件,默認情使用STDOUT。如果daemonize開啟,並未指定日志文件,則該代理完全不會記錄日志。
  --unixsocket <sock_file>   套接字路徑,默認空
  --unixsocketperm <mode>    套接字權限,默認0
  --bind <address>           綁定一個地址(可以多次使用綁定多個地址)
  --connections-pool-size <size>        連接池的大小,0禁用連接池。默認值:10,最大值:50
  --connections-pool-min-size <size>    連接池中的最小連接數。 低於此值,線程將以定義的速率開始重新生成連接,直到池再次變滿。 默認值:10   
  --connections-pool-spawn-every <ms>   重新生成連接池中連接的時間間隔(以毫秒為單位)。 默認值:50
  --connections-pool-spawn-rate <num>   每個周期在連接池中重新產生的連接數。 默認值:2
  --disable-multiplexing <opt>          何時應禁用多路復用值:(auto|always)(默認值:auto)
  --enable-cross-slot       啟用跨槽查詢(注意:路由到多個節點的跨槽查詢不能是原子的)
  -a, --auth <passw>        連接密碼
  --auth-user <name>        連接用戶
  --disable-colors          禁止彩色輸出
  --log-level <level>       日志級別:debug|info|success|warning|error,默認info
  --dump-queries        轉儲查詢參數(僅適用於日志級別的debug)
  --dump-buffer         轉儲查詢緩沖區(僅用於日志級別的debug)
  --dump-queues         轉儲請求隊列(僅適用於日志級別的debug) 
  -h, --help            打印幫助

說明:默認情況下,redis-cluster-proxy端口是7777,使用-p或--port選項對其進行更改。 此外,默認情況下,Redis群集端口將綁定所有可用的網絡接口以偵聽傳入的連接。使用--bind選項綁定到特定接口。 可以綁定一個接口,也可以通過多次使用--bind選項來綁定多個接口。

還可以通過使用--unixsocket選項指定套接字文件名,或者使用--unixsocketperm設置套接字文件權限,來告訴Redis集群端口偵聽UNIX套接字。如果只想在UNIX套接字上偵聽,請將--port設置為0,以使代理完全不在TCP套接字上偵聽。

例子

① 監聽7888端口

./redis-cluster-proxy --port 7888 127.0.0.1:7000

② 綁定地址:127.0.0.1

./redis-cluster-proxy --bind 127.0.0.1 127.0.0.1:7000

③ 綁定多個接口

./redis-cluster-proxy --port 7888 --bind 192.168.0.10 --bind 10.0.0.10 127.0.0.1:7000

④ 在UNIX套接字上偵聽並禁用TCP連接

./redis-cluster-proxy --unixsocket /path/to/proxy.socket --port 0 127.0.0.1:7000

⑤ 更改線程數

./redis-cluster-proxy --port 7888 127.0.0.1:7000 --threads 16

⑥ 使用配置文件:在Redis Cluster Proxy的主目錄內找到一個示例proxy.conf文件

redis-cluster-proxy -c /path/to/my/proxy.conf 127.0.0.1:7000

啟動后,連接到代理,就好像是普通的Redis服務器一樣(但是請確保了解當前的限制)。

專用連接池 

每個線程都有自己的連接池,其中包含到集群的隨時可用的專用連接,該集群的套接字在創建時即已預先連接。這允許需要專用連接(即在執行諸如MULTI之類的命令或阻塞命令之后)的客戶端立即使用可能已經連接到群集的連接,而不是從頭開始重新連接到群集(這種情況可能會減慢順序的速度)從客戶端本身的角度執行查詢)。

每個連接池都有預定義的大小,並且不允許創建超出其大小允許的連接數的連接。可以通過--connections-pool-size選項配置連接池的大小(默認為10)。當池中的連接用完時,每個需要專用連接的新客戶端都將從頭開始創建一個新的專用連接,它必須連接到集群並等待連接建立。在這種情況下,連接模型將是“惰性的”,這意味着僅當查詢需要與該節點的連接時,新連接的套接字才會連接到群集的特定節點。

如果連接數降至指定的最小值以下后,每個線程將重新填充其自己的池,默認情況下,該數量與池本身的大小相同,並且可以通過--connections-pool-min-大小選項。填充速率和間隔可以由--connections-pool-spawn-every(間隔以毫秒為單位)和--connections-pool-spawn-rate(每個間隔的新連接數)定義。如:

redis-cluster-proxy --connections-pool-size 20 connections-pool-min-size 15 --connections-pool-spawn-rate 2 --connections-pool-spawn-every 500 127.0.0.1:7000

說明:創建一個包含20個連接(最大)的連接池,並在連接數降至15以下時重新填充它,方法是每500毫秒創建2個新連接。記住,代理啟動時,每個池都將完全填充。 同樣重要的是要注意,當擁有專用連接的客戶端斷開連接時,如果池本身尚未滿,則他們的線程將嘗試回收其專用連接,以便再次將其添加到池中。

受密碼保護的群集和Redis ACL

如果集群節點受密碼保護,則可以使用-a,-auth命令行選項或auth配置文件選項,以指定身份驗證密碼。此外,如果集群使用ACL,並且有多個用戶,則可以使用--auth-user命令行選項(或配置文件中的auth-user)向特定用戶進行身份驗證。如:

redis-cluster-proxy -a MYPASSWORD 127.0.0.1:7000

redis-cluster-proxy --auth MYPASSWORD 127.0.0.1:7000

redis-cluster-proxy --auth-user MYUSER --auth MYPASSWORD 127.0.0.1:7000

proxy將使用這些憑據對集群進行身份驗證並獲取群集的內部配置,它還將對所有客戶端進行身份驗證。因此使用--auth-user指定的用戶或默認用戶(如果未指定用戶)對將要連接到proxy的所有客戶端進行身份驗證,而無需自己調用AUTH命令:在這種情況下,客戶端將使用專用連接而不是共享的多路復用連接。

啟用跨槽查詢

跨槽查詢使用屬於不同槽甚至不同節點的多個鍵。 不能保證執行是原子的(它們實際上可以破壞許多Redis命令的原子設計),因此默認情況下將其禁用。 如果想要此功能,則可以在啟動時通過使用--enable-cross-slot或通過在配置文件中設置enable-cross-slot yes來啟用它。 您還可以在代理運行時通過使用特殊的PROXY命令激活此功能。

注意:即使啟用了此功能,也不是所有命令都支持跨槽查詢(即,不能將其與EVAL或ZUNIONSTORE以及許多其他命令一起使用)。 在這種情況下,將收到特定的錯誤回復。 可以使用PROXY命令來獲取在跨槽查詢中無法使用的命令列表

PROXY命令

PROXY命令允許獲取特定的信息或執行特定的操作。該命令具有各種子命令,下面是一些清單:

  • PROXY CONFIG GET|SET option [value]
    用於獲取或設置Proxy特定選項,其中選項與命令行參數(不帶-前綴)中使用的選項相同,或在配置文件中指定。並非所有選項都可以更改(其中某些選項(即線程)是只讀的)
    PROXY CONFIG GET threads
    PROXY CONFIG SET log-level debug
    PROXY CONFIG SET enable-cross-slot 1
    PROXY MULTIPLEXING STATUS|OFF
  • PROXY MULTIPLEXING STATUS|OFF
    獲取客戶端多路復用連接模型的狀態,或通過禁用多路復用
    -> PROXY MULTIPLEXING STATUS
    -> Reply: "on"
    -> PROXY MULTIPLEXING off
  • PROXY INFO
    返回特定集群的信息,類似於Redis中的INFO命令。

  • PROXY COMMAND [UNSUPPORTED|CROSSSLOTS-UNSUPPORTED]
    返回由Redis Cluster Proxy處理(已知)的所有Redis命令的列表,UNSUPPORTED:不支持的命令;CROSSSLOTS-UNSUPPORTED:不能與跨槽查詢一起使用的命令,即使配置中啟用了跨槽查詢。
  • PROXY CLIENT
    執行特定客戶的操作
    PROXY CLIENT ID: -- 獲取當前客戶的內部ID
    PROXY CLIENT THREAD: -- 獲取當前客戶端的線程
  • PROXY CLUSTER [subcmd]
    執行與調用客戶端關聯的集群有關的操作。
      PROXY CLUSTER或PROXY CLUSTER INFO獲取有關群集的信息。 信息是一個數組,其元素采用名稱/值對的形式,其中名稱是特定的功能,例如狀態,連接等。 也可以檢索單個特定功能的信息,即通過調用代理群集狀態。 以下是可以檢索的常見信息列表:
    status:集群的當前狀態,可以更新,更新或破壞
    connection:連接類型,如果客戶端在多路復用上下文中(因此連接與線程的所有客戶端共享),則可以共享;如果客戶端使用其自己的專用連接,則可以共享。
    nodes:一個嵌套數組,其中包含集群的所有主節點的列表。 每個節點都是另一個嵌套的數組,其中包含名稱/值對。

      PROXY CLUSTER UPDATE:請求更新當前集群的配置。
    如:

    -> PROXY CLUSTER
    
    1) status
    2) updated
    3) connection
    4) shared
    5) nodes
    6) 1)  1) name
           2) 8d829c8b66f67dd9c4adad16e5c0a4c82aadd810
           3) ip
           4) 127.0.0.1
           5) port
           6) (integer) 7002
           7) slots
           8) (integer) 5462
           9) replicas
          10) (integer) 1
          11) connected
          12) (integer) 1
      ...
  • PROXY LOG [level] MESSAGE
    將MESSAGE記錄到代理的日志中,以進行調試。可選級別可用於定義日志級別:debuginfosuccesswarningerror(默認為debug)

  • PROXY DEBUG

    為調試目的執行不同的操作,其中子命令可以是:SEGFAULT:使用sigsegv使代理崩潰;ASSERT:由於斷言失敗而使代理崩潰。

  • PROXY SHUTDOWN [ASAP]
    關閉代理。 可選的ASAP選項使代理立即退出(不安全退出)。

  • PROXY HELP
    PROXY命令的幫助

特殊行為的命令

  1. PING:PONG由Proxy直接答復
  2. MULTI:通過在客戶端本身中創建專用連接來禁用多路復用。 注意:由於必須是原子的,因此跨槽查詢無法在多事務內運行。
  3. DBSIZE:將查詢發送到集群中的所有節點並對它們的答復求和,以便結果將是整個集群中的鍵總數。
  4. SCAN:在群集的所有主節點上執行掃描。 答復中包含的光標將有一個特殊的四位數字后綴,指示必須掃描的節點的索引。 注意:有時光標可能類似於“ 00001”,因此當客戶端必須使用它來執行下一次掃描時,不必將其轉換為整數。

當前狀態

目前,該項目是alpha代碼,旨在由社區評估以獲取建議和貢獻。 不建議在任何生產環境中使用它。

測試說明

配置文件說明

# Redis Cluster Proxy configuration file example.
# 通過配置文件啟動方式
# ./redis-cluster-proxy -c /path/to/proxy.conf

################################## INCLUDES ###################################
# include /path/to/local.conf
# include /path/to/other.conf

######################## CLUSTER ENTRY POINT ADDRESS ##########################
#與在redis-cluster-proxy命令行參數中指示的方式相同的方式指示入口點地址,可以被命令行參數本身覆蓋。 可以通過添加更多行來指定多個入口點
cluster 192.168.163.134:8379
cluster 192.168.163.134:8380
cluster 192.168.163.134:8381

################################### MAIN ######################################
#設置Redis集群代理端口
port 7777

#綁定地址,通過聲明多行綁定來綁定多個接口
bind 192.168.163.134
bind 127.0.0.1

# Unix套接字的路徑
unixsocket /usr/local/redis-cluster-proxy/proxy.socket

# 設置Unix套接字權限
unixsocketperm 760

# 設置線程數
threads 8

#TCP活躍連接時間,默認300秒
tcpkeepalive 300

#TCP連接中已完成隊列(完成三次握手之后)的長度
tcp-backlog 511


#連接池的大小,使用0完全禁用連接池,每個線程都有其隨時可用的連接池。 當代理啟動時,每個線程將填充一個池,該池包含與集群所有節點的連接。 每當客戶端需要專用連接時,它都可以從池中建立連接(如果有)。 這將加速客戶端從線程的共享連接到其自己的專用連接的轉換,因為來自線程池的連接應該已經連接並且可以使用。 否則,具有優先連接的客戶端必須重新連接群集的節點(這種重新連接將以“惰性”方式進行)
connections-pool-size 10

#連接池中最小連接數。 低於此值,線程將以定義的速率開始重新生成連接,直到池再次變滿。
connections-pool-min-size 10

#用於重新生成池中連接的時間間隔(以毫秒為單位),當池中的連接數下降到最小值以下(connections-pool-min-size)時,線程將開始重新分配池中的連接,直到池再次充滿。 新連接將按此指定間隔添加。
connections-pool-spawn-every 50

#在每個周期中重新生成的連接數,每個周期的間隔由connections-pool-spawn-every定義
connections-pool-spawn-rate 50

# 后台運行
daemonize yes

#pid文件路徑
pidfile /usr/local/redis-cluster-proxy/redis-cluster-proxy.pid

#指定日志文件名,空字符串還可用於強制Redis Cluster Porxy登錄標准輸出。 如果使用標准輸出進行日志記錄但進行守護進程,則日志將發送到/dev/null
logfile /usr/local/redis-cluster-proxy/proxy.log

# 啟用使用不同插槽甚至不同節點的多個鍵的跨插槽查詢。 警告:這些查詢將破壞許多Redis命令的原子性設計。 注意:即使啟用了此功能,也不是所有命令都支持跨槽查詢
enable-cross-slot yes

# 最大客戶端連接數
maxclients 10000

#如果集群的節點受密碼保護,則用於在集群上進行認證的認證密碼, 還用於獲取集群的配置以及自動驗證代理與集群本身的內部連接。
auth dba

# 用戶認證,支持Redis 6.0 ACL
auth-user dba

################################# LOGGING #####################################

# 日志等級: debug, info, success, warning o error.
log-level error

# 轉儲從客戶端收到的查詢到日志中(log-level debug)
# dump-queries no

# 轉儲緩沖區到日志中(log-level debug)
# dump-buffer no

# 轉儲請求的隊列到日志中(log-level debug)
# dump-queues no

測試說明

條件:

Host:192.168.163.134
Port:837983808381
# ACL
User:dba
Pwd:dba

啟動:

redis-cluster-proxy -c /usr/local/redis-cluster-proxy/proxy.conf 

登陸:

redis-cli -h 127.0.0.1 -p 7777
127.0.0.1:7777>  

管理:

> proxy help
 1) PROXY <subcommand> arg arg ... arg
 2) INFO   [section]           -- 查看Proxy信息
 3) CONFIG GET <param>         -- 查看Proxy參數
 4) CONFIG SET <param> <value> -- 設置Proxy參數
 5) MULTIPLEXING STATUS|OFF    -- 獲取當前客戶端的多路復用狀態或將其關閉
 6) COMMAND [type]             -- 當前已知的列表命令可用於過濾(unsupported|crosslots-unsupported)
 7) CLIENT <subcmd>            -- 執行特定於客戶的操作(有關詳細信息,請鍵入“PROXY CLIENT HELP”: PROXY CLIENT ID(獲取當前客戶端id),PROXY CLIENT THREAD(獲取當前線程))
 8) CLUSTER [subcmd]           -- 執行特定於群集的操作(有關詳細信息,請鍵入“PROXY CLUSTER HELP”:INFO、STATUS、CONNECTION、NODES、UPDATE)
 9) DEBUG <subcmd>             -- 用於調試代理的實用程序(更多信息,請鍵入“PROXY DEBUG HELP”)
10) SHUTDOWN [ASAP]            -- 關閉代理。 如果使用`ASAP`,請立即執行(不安全退出),否則發送SIGINT。
11) LOG [level] <message>      -- 將消息記錄到日志中,以進行調試

> PROXY CLIENT HELP
1) PROXY CLIENT <subcommand> [arg arg ... arg]
2) ID     -- 獲取客戶端內部ID
3) THREAD -- 獲取當前客戶端的線程ID

> PROXY CLUSTER HELP
1) PROXY CLUSTER [subcommand]
2) -,INFO     -- 獲取與調用客戶端關聯的集群的信息
3) STATUS     -- 獲取與呼叫客戶端關聯的群集的狀態。 狀態可以是:更新(updated)|更新(updating)|中斷(broken)
4) CONNECTION -- 獲取與調用客戶端關聯的群集的連接類型。 類型可以是:公有(shared)|私有(private)
5) NODES      -- 獲取與調用客戶端關聯的群集的主節點列表。 類型可以是:公有(shared)|私有(private)
6) UPDATE     -- 請求更新與當前客戶端關聯的群集的配置。

> PROXY DEBUG HELP
1) PROXY DEBUG <subcommand> [ARGS...]
2) SEGFAULT            -- Cause a SEGFAULT on the proxy
3) ASSERT              -- Cause an assertion failure  on the proxy
4) KILL <thread> [sig] -- Send signal to thread (can be MAIN,SELF or the thread ID). Signal can be TERM,INT,KILL or a signal number.

測試:

①:管理命令測試

-- 設置參數
> proxy config get connections-pool-size
1) connections-pool-size
2) (integer) 10
> proxy config get enable-cross-slot
1) enable-cross-slot
2) (integer) 0
> proxy config set enable-cross-slot 1
OK
> proxy config set connections-pool-size 5
OK


-- 查看Proxy信息
> proxy info
# Proxy
proxy_version:999.999.999
proxy_git_sha1:ac83840d
proxy_git_dirty:0
proxy_git_branch:unstable
os:Linux 4.15.0-99-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:7.5.0
process_id:64512
threads:8
tcp_port:7777
uptime_in_seconds:1262
uptime_in_days:0
config_file:/usr/local/redis-cluster-proxy/proxy.conf
acl_user:dba
unix_socket:/usr/local/redis-cluster-proxy/proxy.socket
unix_socket_permissions:760

# Memory
used_memory:6736984
used_memory_human:6.42M
total_system_memory:2065895424
total_system_memory_human:1.92G

# Clients
connected_clients:1
max_clients:10000
thread_0_clinets:1
thread_1_clinets:0
thread_2_clinets:0
thread_3_clinets:0
thread_4_clinets:0
thread_5_clinets:0
thread_6_clinets:0
thread_7_clinets:0

# Cluster
address:192.168.163.134:8379
entry_node:192.168.163.134:8379


-- 查看集群信息
> proxy cluster info
1) status
2) updated
3) connection
4) shared
5) nodes
6) 1)  1) name
       2) 91463f2fbb73cbbda4203fe88de465cafa0423fb
       3) ip
       4) 192.168.163.134
       5) port
       6) (integer) 8380
       7) slots
       8) (integer) 5462
       9) replicas
      10) (integer) 0
      11) connected
      12) (integer) 1
   2)  1) name
       2) afec09788ceeacad2b9c4d5cd92aa986e161d93e
       3) ip
       4) 192.168.163.134
       5) port
       6) (integer) 8379
       7) slots
       8) (integer) 5461
       9) replicas
      10) (integer) 1
      11) connected
      12) (integer) 1
   3)  1) name
       2) ff7a6f8ba650540cee8355f8042854b4131d49da
       3) ip
       4) 192.168.163.134
       5) port
       6) (integer) 8381
       7) slots
       8) (integer) 5461
       9) replicas
      10) (integer) 0
      11) connected
      12) (integer) 1
View Code

②:應用命令測試

127.0.0.1:7777> get a
"a"
127.0.0.1:7777> 
127.0.0.1:7777> get b
"b"
127.0.0.1:7777> get c
"c"
127.0.0.1:7777> get d
"d"
127.0.0.1:7777> mget a b c d
(error) ERR Cross-slot queries are disabled. They can be enabled by using the --enable-cross-slot option, or by calling `PROXY CONFIG SET enable-cross-slot 1`. WARN: cross-slot queries can break the atomicity of the query itself.
127.0.0.1:7777> PROXY CONFIG SET enable-cross-slot 1
OK
127.0.0.1:7777> mget a b c d
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:7777> mset a abc b cbd c cba d dba
OK
127.0.0.1:7777> dbsize  --支持所有節點key的匯總統計
(integer) 18
127.0.0.1:7777> SDIFF a b
(error) ERR Cross-slot queries are not supported for this command
127.0.0.1:7777> SINTER a b
(error) ERR Cross-slot queries are not supported for this command
127.0.0.1:7777> SMOVE a b
(error) ERR Cross-slot queries are not supported for this command
127.0.0.1:7777> SUNION a b
(error) ERR Cross-slot queries are not supported for this command
127.0.0.1:7777> hmget hd
(error) ERR wrong number of arguments for 'hmget' command
127.0.0.1:7777> rename a aaaaa
(error) ERR Cross-slot queries are not supported for this command
View Code

說明:通過測試發現,redis-cluster-proxy可以使用mset、mget、dbsize等跨節點和slot的操作,還有一些操作都不支持。

③:更多測試

目前沒有使用redis-cluster-proxy,等需要的時候再做測試。如果正打算用的同學需要做更多的功能和性能測試。

④:更多的問題

比如如何避免Proxy的單點,Proxy的配置優化等等。

總結

目前Redis之父在自己博客里聲明:退出開源項目維護,將 Redis 交給 Redis 社區。個人感覺后面Redis 社區會穩定和逐步完善自己的Proxy。拭目以待吧!

參考文檔

https://github.com/RedisLabs/redis-cluster-proxy

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM