简介
Codis3.x有如下特点:
- 最新 release 版本为 codis-3.2,codis-server 基于 redis-3.2.8
- 支持 slot 同步迁移、异步迁移和并发迁移,对 key 大小无任何限制,迁移性能大幅度提升
- 相比 2.0:重构了整个集群组件通信方式,codis-proxy 与 zookeeper 实现了解耦,废弃了codis-config 等
- 元数据存储支持 etcd/zookeeper/filesystem 等,可自行扩展支持新的存储,集群正常运行期间,即便元存储故障也不再影响 codis 集群,大大提升 codis-proxy 稳定性
- 对 codis-proxy 进行了大量性能优化,通过控制GC频率、减少对象创建、内存预分配、引入 cgo、jemalloc 等,使其吞吐还是延迟,都已达到 codis 项目中最佳
- proxy 实现 select 命令,支持多 DB
- proxy 支持读写分离、优先读同 IP/同 DC 下副本功能
- 基于 redis-sentinel 实现主备自动切换
- 实现动态 pipeline 缓存区(减少内存分配以及所引起的 GC 问题)
- proxy 支持通过 HTTP 请求实时获取 runtime metrics,便于监控、运维
- 支持通过 influxdb 和 statsd 采集 proxy metrics
- slot auto rebalance 算法从 2.0 的基于 max memory policy 变更成基于 group 下 slot 数量
- 提供了更加友好的 dashboard 和 fe 界面,新增了很多按钮、跳转链接、错误状态等,有利于快速发现、处理集群故障
- 新增 SLOTSSCAN 指令,便于获取集群各个 slot 下的所有 key
- codis-proxy 与 codis-dashbaord 支持 docker 部署
1.1 总体架构
1.2 Codis组件介绍
- Codis Server:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。
- Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。
- 对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;
- 不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
- Redis sentinel:Redis官方推荐的高可用性(HA)解决方案。它可以实现对Redis的监控、通知、自动故障转移。如果Master不能工作,则会自动启动故障转移进程,将其中的一个Slave提升为Master,其他的Slave重新设置新的Master服务。
- Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。
- 对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
- 所有对集群的修改都必须通过 codis-dashboard 完成。
- Codis Admin:集群管理的命令行工具。
- 可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。
- Codis FE:集群管理界面。
- 多个集群实例共享可以共享同一个前端展示页面;
- 通过配置文件管理后端codis-dashboard列表,配置文件可自动更新。
- Storage:为集群状态提供外部存储。
- 提供namespace概念,不同集群的会按照不同product name进行组织;
- 目前仅提供了zookeeper、etcd、filesystem三种实现,但是提供了抽象的 interface 可自行扩展。
2 安装步骤
通过rpm -qa|grep yum检查包是否安装
配置本地yum源,安装过程中可能需要安装一些依赖组件。
检查点:
gcc
2.1 机器列表
IP 配置 机器名 安装服务
192.168.113.131 处理器1CPU
内存2G
硬盘20G redis1 Zookeeper,codis-server, codis-dashboard, codis-fe,codis-proxy, redis-sentinel
192.168.113.132 处理器1CPU
内存1G
硬盘20G redis2 Zookeeper,codis-server, redis-sentinel
192.168.113.133 处理器1CPU
内存1G
硬盘20G redis3 Zookeeper,codis-server, redis-sentinel
本地虚拟机安装
2.2 安装JDK
-
卸载自带OPENJDK
rpm -qa|grep java
#卸载搜索出来的openjdk组件,使用以下命令(以下命令仅供参考,具体版本信息可能不一致,请根据搜索结果调整)
rpm -e java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 --nodeps
rpm -e java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64 –nodeps -
解压JDK安装包
新建目录:mkdir /usr/local/java
进入自己上传的JDK目录,解压到上述新建的目录
命令:tar –zxvf jdk-8u161-linux-x64.tar.gz –C /usr/local/java -
配置环境变量
修改/etc/profile文件,在文件最后增加如下语句(供参考实际jdk版本文件夹可能略有不同):
java
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export JRE_HOME=/usr/local/java/jdk1.8.0_161/jre
export CLASSPATH=.:JAVA_HOME/lib/tools.jar:JAVA_HOME/bin:PATH
PS:此种修改方式是系统级对所有用户生效,请在专属服务器上采用这种配置。
- 刷新配置,验证生效
执行命令刷新环境变量配置信息:source /etc/profile
验证JDK是否安装成功:java –version
如果能正常打印版本信息说明安装正常,恭喜你完成了第一步。
2.3 安装ZK
下载地址https://www.apache.org/dyn/closer.cgi/zookeeper/
- 选取奇数服务器,解压ZK文件
选用zookeeper-3.4.10.tar.gz版本
将zookeeper安装包拷贝至:/home/zookeeper
使用远程拷贝命令scp ./zookeeper-3.4.10.tar.gz [email protected]:/home/zookeeper
以下命令需要在全部ZK节点执行
解压zookeeper至/usr/local
执行命令:tar -zxvf /home/zookeeper/zookeeper-3.4.10.tar.gz -C /usr/local/
- 配置ZK环境变量(可选)
此步骤的目的是:每次启动服务就不需要定位到Zookeeper的bin目录了
vi /etc/profile
讲以下语句写入全局配置文件
zookeeper
export ZK_HOME=/usr/local/zookeeper-3.4.11
export PATH=PATH
- 修改ZK配置文件
修改HOSTS文件,增加:
192.168.113.131 redis1
192.168.113.132 redis2
192.168.113.133 redis3
配置文件路径:$ZK_HOME/conf,进入配置文件路径
拷贝安装包里面的示例配置:cp zoo_sample.cfg zoo.cfg
编辑zoo.cfg文件,具体配置如下:
dataDir=/usr/local/zookeeper-3.4.10/data
clientPort=2181
server.0=192.168.113.131:2888:3888
server.1=192.168.113.132:2888:3888
server.2=192.168.113.133:2888:3888
标红部分为需要修改的地方,如图:
-
创建临时文件夹
在$ZK_HOME下创建data目录,并创建myid文件写入对应server的ID。
拿192.168.113.131举例来说,执行以下步骤: -
进入目录cd $ZK_HOME
-
创建文件夹mkdir data
-
创建myid文件,vim myid
然后写入0保存退出即可(其他服务器重复以上步骤,填入对应的serverid即可) -
启动ZK
确认防火墙已经关闭
命令:service iptables status,
输出:iptables: Firewall is not running.
表示防火墙关闭,如果防火墙处于安全上的考量不能关闭,请配置ZK相关端口可以通过防火墙(以下命令供参考)
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp –permanent
systemctl restart firewalld
确认防火墙关闭后,
可以在任意目录运行:zkServer.sh start,三台机器启动完成以后,运行zkServer.sh status,检查ZK服务是否正常。
2.4 安装GO
判断服务器平台,下载对应的GO语言包,本地使用X86平台,下载“go1.9.2.linux-amd64.tar.gz”包,将压缩包上传至/home/go/go1.9.2.linux-amd64.tar.gz
在/usr/local/路径下创建go目录,mkdir /usr/local/go
执行解压命令tar -zxvf /home/go/go1.9.2.linux-amd64.tar.gz -C /usr/local/go
创建GO工作目录:mkdir $HOME/godir
配置环境变量,修改/etc/profile,添加如下语句:
GO相关环境变量
export GOROOT=/usr/local/go
export GOPATH=PATH:GOROOT/bin
注意检查/usr/local/go路径下是否嵌套一层go目录,将文件转移到上一层目录。
检查GO是否安装成功,执行命令: go version
如果出现如下所示:
原因是安装错了二进制编译包,64位系统不能安装32位编译包。
如下结果表示安装正确
GO语言环境需要安装到全部的Codis集群节点。
2.5 安装Codis3.2
2.5.1 编译Codis源码
只需要在一台机器上编译,将编译完的文件拷贝至其他节点即可。
下载地址:https://github.com/CodisLabs/codis/releases
上传至:/home/go
执行解压命令:unzip -o codis-release3.2.zip -d ./codis-release3.2
进入解压后的目录,执行make
执行失败
没有安装git,下载地址https://mirrors.edge.kernel.org/pub/software/scm/git/
$ tar -zxvf git-1.7.2.2.tar.gz
$ cd git-1.7.2.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install
如果配置了本地yum源可直接使用:yum install git 安装,自动解析依赖关系,避免了很多莫名其妙的问题。
下载Codis源码,执行:
Git命令:git clone https://github.com/CodisLabs/codis.git
或者go get github.com/CodisLabs/codis,
会将文件下载至GOPATH/src/github.com/CodisLabs/,不然会编译失败。
附件中:codis-release-src-fromgit.zip是我本地下载并编译完成的文件。基于x86_64平台。
编译完成后,将源码目录下bin和config文件夹拷贝至/usr/local/codis下的bin和config文件夹。
2.5.2 配置Codis-Server
作用:基于 redis-3.2.8 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。
序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-server:(6379&6380)
02 192.168.113.132 redis2 codis-server:(6379&6380)
03 192.168.113.133 redis3 codis-server:(6379&6380)
- 修改主配置
#cd /usr/local/codis/config/
#cp redis.conf redis-6379.conf # 主配置
#vim redis-6379.conf # 修改配置
以下为修改项,配置文件较长,请看仔细。
#bind 127.0.0.1 #一定要注释掉这行,表示redis只接受本地访问无法远程访问
protected-mode no
port 6379 # 绑定端口
pidfile /usr/local/codis/proc/redis_6379.pid # 进程ID文件路径
loglevel warning#可选修改只打印warn及以上的日志
logfile “/usr/local/codis/log/redis_6379.log” # 日志文件路径
dbfilename dump_6379.rdb # dump文件
dir /usr/local/codis/data/redis_data_6379 # dump路径
masterauth “123456” #可选配置 Master密码(从主同步密码)
requirepass “123456” # 可选配置,鉴权密码(客户端连接密码) - 修改从配置
#cd /usr/local/codis/config/
#cp redis.conf redis-6380.conf # 主配置
#vim redis-6380.conf # 修改配置
以下为修改项,配置文件较长,请看仔细。
#bind 127.0.0.1 #一定要注释掉这行,表示redis只接受本地访问无法远程访问protected-mode no#关闭保护模式
port 6380 # 绑定端口
pidfile /usr/local/codis/proc/redis_6380.pid # 进程ID文件路径
loglevel warning#可选配置,只打印warning及以上的日志
logfile “/usr/local/codis/log/redis_6380.log” # 日志文件路径
dbfilename dump_6380.rdb # dump文件
dir /usr/local/codis/data/redis_data_6380 # dump路径
masterauth “123456” #可选配置 Master密码(从主同步密码)
requirepass “123456” # 可选配置,鉴权密码(客户端连接密码)
PS: logfile和dir对应文件夹需要自行创建
mkdir /usr/local/codis/proc
mkdir /usr/local/codis/log
mkdir /usr/local/codis/data
mkdir /usr/local/codis/data/redis_data_6379
mkdir /usr/local/codis/data/redis_data_6380
配置完成后,将codis文件夹拷贝至其他两台机器。
然后启动
cd /usr/local/codis
./bin/codis-server ./config/redis-6379.conf
./bin/codis-server ./config/redis-6380.conf
cd /usr/local/codis/log目录查看启动日志,是否正常启动。
ps –ef|grep codis
可以看到有两个codis进程
#启动 Codis-Server 以后需要使用 Codis-fe 或者 Codis-admin 添加到集群
2.6 安装Codis-dashboard
作用:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。
1.对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
2.所有对集群的修改都必须通过 codis-dashboard 完成。
序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-dashborad:18080、codis-fe:18090
步骤:
- 修改配置
生成配置
#cd /usr/local/codis/bin/
#./codis-dashboard --default-conifg | tee …/config/dashboard.conf #生成配置
修改配置
#vim …/conf/dashboard.conf # 修改配置
coordinator_name = “zookeeper” # 外部存储类型
coordinator_addr = “redis1:2181, redis2:2181, redis3:2181” # 外部存储IP列表
product_name = “mot-codis” # 项目名称
#product_auth = “123456” # 集群密码(注意:需要与redis配置中的requirepass保持一致)
admin_addr = “0.0.0.0:18080” # RESTful API 端口
为了防止出现dashboard监控页面中OPS始终为0的现象,需要将各proxy的IP和主机名写到hosts文件中。
#vim /etc/hosts # 添加域名,根据具体的部署图自行添加
192.168.113.131 WebSocket-21
192.168.1.22 WebSocket-22
部署codis-dashboard机器需要配置proxy机器的IP映射
2. 启动程序
#cd ./bin/
#nohup ./codis-dashboard --ncpu=24 --config=/usr/local/codis/config/dashboard.conf --log=/usr/local/codis/log/dashboard.log --log-level=WARN & #启动程序(注意:使用绝对路径)
验证一下
ss -ntplu |grep codis-dashboard
参数描述如下:
序号 参数 描述 备注
01 --ncpu 最大使用CPU个数 给当前服务器最大CPU数量
02 --config 指定配置路径和文件 使用绝对路径
03 --log 指定日志输出路径和文件 使用绝对路径
02 --log-level 指定日志级别 取值:INFO、WARN、DEBUG、ERROR,推荐使用WRAN.
完成以上2个步骤后,便完成了对codis-config的安装。
3. 关闭程序
如果想关闭dashboard服务,可执行:
#./codis-admin --dashboard=192.168.113.131:18080 --shutdown
2.7 安装Codis-proxy
作用:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。
1.对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;
2.不同 codis-proxy 之间由 codis-dashboard 保证状态同步。
部署:按照2.1中的用途规划,将在如下几台机器上部署该程序。
序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-proxy
- 修改配置
#cd /usr/local/codis/bin/
#./codis-proxy --default-config | tee …/config/proxy.conf #生成配置
生成如下配置:
修改配置
#vim …/proxy.conf #修改配置
product_name = “mot-codis” # 设置项目名
product_auth = “” # 设置登录dashboard的密码(注意:与redis中requirepass一致)
session_auth = “” # Redis客户端的登录密码(注意:与redis中requirepass不一致)
Set bind address for admin(rpc), tcp only.
admin_addr = “0.0.0.0:11080”
Set bind address for proxy, proto_type can be “tcp”,”tcp4”, “tcp6”, “unix”
or “unixpacket”.
proto_type = “tcp4”
proxy_addr = “0.0.0.0:19000” #绑定端口(Redis客户端连接此端口)
外部存储
jodis_name = “zookeeper” # 外部存储类型
jodis_addr = “192.168.1.51:2181,192.168.1.52:2181,192.168.1.53:2181” # 外部存储列表
jodis_timeout = “20s”
#会话设置
session_recv_timeout = “0s” #如果不为0可能导致应用程序出现”write: broken pipe”的问题
备注:其他参数使用默认配置….
2.启动程序
#nohup ./codis-proxy --ncpu=24 --config=…/config/proxy.conf --log=…/log/proxy.log --log-level=WARN &
程序codis-proxy启动后,仍然处于waiting状态,虽然侦听了proxy_addr端口,但是不会accept连接请求。只有将codis-proxy加入到集群并完成集群状态的同步,才能将状态改为online。最终才能accept连接请求。
proxy waiting online
2.8 安装Redis-sentinel
作用:Redis官方推荐的高可用性(HA)解决方案。它可以实现对Redis的监控、通知、自动故障转移。如果Master不能工作,则会自动启动故障转移进程,将其中的一个Slave提升为Master,其他的Slave重新设置新的Master服务。
部署:按照2.1中的部署规划,将在如下机器上部署该程序。
序号 IP 主机名 部署程序
01 192.168.113.131 redis1 redis-sentinel:26379
02 192.168.113.132 redis2 redis-sentinel:26379
03 192.168.113.133 redis3 redis-sentinel:26379
步骤:
- 修改配置
#cd /usr/local/codis/
#vim ./config/sentinel.conf
bind 0.0.0.0
protected-mode no
port 26379
dir /usr/local/codis/data
备注:其他结点的配置与此一致。 - 启动程序
cd /usr/local/codis/bin/
nohup ./redis-sentinel …/config/sentinel.conf &
2.9 安装Codis-fe
作用:集群管理界面。
1.多个集群实例共享可以共享同一个前端展示页面;
2.通过配置文件管理后端codis-dashboard列表,配置文件可自动更新。
部署:按照2.1中的用途规划,将在如下机器上部署该程序。
序号 IP 主机名 部署程序
01 192.168.113.131 redis1 codis-fe:18090
安装:
- 生成配置
#./codis-admin --dashboard-list --zookeeper=redis1:2181 | tee …/config/codis.json
[
{
“name”: “mot-codis”,
“dashboard”: “redis1:18080”
}
] - 启动程序
#nohup ./codis-fe --ncpu=4 --log=…/log/fe.log --log-level=WARN --dashboard-list=…/config/codis.json --listen=0.0.0.0:18090 &
打开浏览器,输入192.168.113.131:18090便可看到codis集群的监控界面
2.9.1 使用WEB配置集群
2.9.1.1 添加proxy
输入代理proxy服务器的IP和admin_addr端口,配置路径:/usr/local/codis/proxy.conf。
2.9.1.2 添加codis-server
1,先创建一个组,准备把相关的一组主从放进去
2,点击按钮生成这个分组
3,添加真实redis-server地址,并选定一个分组,例如刚才创建的分组1
4,点击按钮生成配置
5,可以看到配置已经登记好,注意sync状态.
6,点击重新平衡所有slots数据块(任何添加和删除新旧节点都需要点击这个)
2.9.1.3 配置sentinel
1,添加真实的sentinel地址和端口
2,点击按钮添加
3,查看状态,这里有点不一样,他会自动添加当前主从组架构由多少台,控制切换
也正如我之前说的,他们自动去改配置文件,可以去看看sentinel的配置文件证实一下
2.9.1.4 测试
执行usr/local/bin/redis-cli -h 192.168.113.131 -p 19000
进入Codis客户端,执行info
Server
redis_version:3.2.11
redis_git_sha1:7191a280
redis_git_dirty:0
redis_build_id:fc848ed525d4f8ff
redis_mode:standalone
os:Linux 2.6.32-696.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:7453
run_id:606985fc0b57673f45b64d8b51cc8981ab0f4c91
tcp_port:6379
uptime_in_seconds:2797
uptime_in_days:0
hz:10
lru_clock:6751495
executable:/usr/local/codis/bin/./codis-server
config_file:/usr/local/codis/config/redis-6379.conf
Clients
connected_clients:23
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
Memory
used_memory:4224208
used_memory_human:4.03M
used_memory_rss:16338944
used_memory_rss_human:15.58M
used_memory_peak:4919344
used_memory_peak_human:4.69M
total_system_memory:1028214784
total_system_memory_human:980.58M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:3.87
mem_allocator:jemalloc-4.0.3
Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1533477784
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
Stats
total_connections_received:67
total_commands_processed:1390981
instantaneous_ops_per_sec:6
total_net_input_bytes:63407284
total_net_output_bytes:74666125
instantaneous_input_kbps:0.30
instantaneous_output_kbps:3.59
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:100000
keyspace_misses:1
pubsub_channels:1
pubsub_patterns:0
latest_fork_usec:945
migrate_cached_sockets:0
Replication
role:master
connected_slaves:1
slave0:ip=192.168.113.132,port=6380,state=online,offset=58456605,lag=0
master_repl_offset:58456753
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:57408178
repl_backlog_histlen:1048576
CPU
used_cpu_sys:9.57
used_cpu_user:3.92
used_cpu_sys_children:0.01
used_cpu_user_children:0.00
Cluster
cluster_enabled:0
Keyspace
db0:keys=2,expires=0,avg_ttl=0
2.10 配置TCP代理(可选)
在codis-proxy之上部署HAProxy,可以做到codis-proxy高可用。
需安装HAProxy或者Nginx等可以支持tcp协议负载工具。
HAProxy配置示例:
配置完成后即可使用代理服务器访问Codis集群。苏州虚拟机服务器测试性能大概提升30%。
3 注意事项
1.密码配置
为了提高存储集群的安全性,就需要为集群配置数据存取密码和集群管理密码。
序号 密码类型 描述
01 数据存取密码 可通过修改proxy配置中session_auth调整数据存取密码。当使用redis-cli存取数据时,auth密码需要与session_auth一致。
02 集群管理密码 在proxy配置中的product_auth、codis-dashbroad配置中的product_auth需要与codis-server配置中的requirepass保持一致。
修复异常退出的Codis-dashboard
修复异常退出的 Codis-dashboard
dashboard 非正常退出,或者 kill -9 时使用
/usr/local/bin/codis-admin --remove-lock --product=mot-codis --zookeeper=redis1:2181
修复异常退出的 Codis-proxy
修复异常退出的 Codis-proxy
proxy 非正常退出,或者 kill -9 时使用
/usr/local/bin/codis-admin --dashboard=dashboard_serverip:18080 --remove-proxy --addr=127.0.0.1:11080 –force
4 性能测试
1.性能测试
先用自带的redis-benchmark来压测性能,模拟500个并发和100万个请求.注意区分好登录的地址和端口,还有密码
先压测codis-proxy的性能
/usr/local/codis/bin/redis-benchmark -h redis1 -p 19000 -a 123456 -c 500 -n 1000000 -q
再压测单节点的性能
/usr/local/codis/bin/redis-benchmark -h 10.0.2.5 -p 6379 -a 123 -c 500 -n 1000000 -q
redis-benchmark参数解析:
-h ip地址
-p redis端口
-a 认证密码
-c 设定多少个并发连接
-n 总共多少个请求
-q 显示模式:简要模式
本地测试结果
5 CODIS不支持的命令
codis不支持命令列表:
Command Type Command Name
Keys KEYS
MIGRATE
MOVE
OBJECT
RANDOMKEY
RENAME
RENAMENX
SCAN
Strings BITOP
MSETNX
Lists BLPOP
BRPOP
BRPOPLPUSH
Pub/Sub PSUBSCRIBE
PUBLISH
PUNSUBSCRIBE
SUBSCRIBE
UNSUBSCRIBE
Transactions DISCARD
EXEC
MULTI
UNWATCH
WATCH
Scripting SCRIPT
Server BGREWRITEAOF
BGSAVE
CLIENT
CONFIG
DBSIZE
DEBUG
FLUSHALL
FLUSHDB
LASTSAVE
MONITOR
RESTORE
SAVE
SHUTDOWN
SLAVEOF
SLOWLOG
SYNC
TIME
Codis Slot SLOTSCHECK
SLOTSDEL
SLOTSINFO
SLOTSMGRTONE
SLOTSMGRTSLOT
SLOTSMGRTTAGONE
SLOTSMGRTTAGSLOT
以下属于半支持命令, Codis不支持跨节点操作,因此您必须使用散列标签将可能显示在一个请求中的所有**放入同一个插槽中,然后您可以使用这些命令。 Codis不检查**是否有相同的标签,所以如果你不使用标签,你的程序会得到错误的回应。
Command Type Command Name
Lists RPOPLPUSH
Sets SDIFF
SINTER
SINTERSTORE
SMOVE
SUNION
SUNIONSTORE
Sorted Sets ZINTERSTORE
ZUNIONSTORE
HyperLogLog PFMERGE
Scripting EVAL
EVALSHA