Redis 6.0 redis-cluster-proxy 说明

背景

       Redis3.0版本以后开始支持了Redis Cluster,Redis也开始有了分布式缓存的概念。关于Redis Cluster的相关说明,能够看以前的几篇文章:Redis Cluster 原理相关说明redis-cli --cluster help说明。其架构以下:html

由于 Redis Cluster 内部使用的是P2P中的Gossip协议,每一个节点既能够从其余节点获得服务,也能够向其余节点提供服务,没有中心的概念,经过一个节点能够获取到整个集群的全部信息。因此若是应用链接Redis Cluster能够配置一个节点地址,也能够配置多个节点地址。但须要注意若是集群进行了上下节点的的操做,其应用也须要进行修改,这样会致使须要重启应用,很是的不友好。从Redis 6.0开始支持了Prxoy,能够直接用Proxy来管理各个集群节点。本文来介绍下如何使用官方自带的proxy:redis-cluster-proxynode

说明

       经过使用 redis-cluster-proxy 能够与组成Redis集群的一组实例进行通信,就像是单个实例同样。Redis群集代理是多线程的,使用多路复用通讯模型,所以每一个线程都有本身的与群集的链接,该链接由属于该线程自己的全部客户端共享。git

  在某些特殊状况下(例如MULTI事务或阻塞命令),多路复用将被禁用;而且客户端将拥有本身的集群链接。这样客户端仅发送诸如GET和SET之类的简单命令就不须要Redis集群的专有链接。github

redis-cluster-proxy的主要功能:
redis

  • 路由:每一个查询都会自动路由到集群的正确节点
  • 多线程
  • 支持多路复用和专用链接模型
  • 在多路复用上下文中,能够确保查询执行和答复顺序
  • 发生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,即:
    api

    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

相关文章
相关标签/搜索