本章节主要介绍部分Redis命令使用时的限制。
产品介绍 5 开源命令兼容性
Key 相关命令使用限制
使用KEYS命令时,若缓存数据量较大,可能会较长时间阻塞其它业务命令操作,甚至 可能过高地占用额外内存。因此使用KEYS命令时请尽量描述精确的pattern、不要使用
“keys *”进行全通配。建议尽量避免在生产环境使用,否则会影响服务的健康运行。
Server 相关命令使用限制
● 当用户执行比较耗时的命令(如flushall)时,可能会导致缓存实例在命令执行期 间对外不响应用户的其它命令,造成状态监控失效,此时Console上缓存实例的状 态会变成异常,命令执行结束后,实例状态会恢复正常。
● 使用FLUSHDB、FLUSHALL命令时,若缓存数据量较大,可能会较长时间阻塞其 它业务命令操作。
EVAL 和 EVALSHA 相关命令使用限制
● 使用EVAL和EVALSHA命令时,命令参数中必须带有至少1个key。否则客户端会提 示“ERR eval/evalsha numkeys must be bigger than zero in redis cluster mode”的错误。
● 使用EVAL和EVALSHA命令时,DCS Redis集群实例使用第一个key来计算slot,用 户代码需要保证操作的key是在同一个slot,具体请参考Redis命令。
● 使用EVAL命令时:
– 建议使用前先了解Redis的lua脚本特性,具体可参考Lua脚本。
– lua脚本的执行超时时间为5秒钟,建议不要在lua脚本中使用比较耗时的代 码,比如长时间的sleep、大的循环等语句。
– 调用lua脚本时,建议不要使用随机函数去指定key,否则在主备节点上执行 结果不一致,从而导致主备节点数据不一致。
其他限制
● 单个Redis命令处理时长限制为15秒左右,超过15秒未处理完,会导致客户的其它 业务失败,因此内部会触发主从倒换。
● 2018年7月10日前创建的Redis集群实例需要升级才支持以下命令:
SINTER、 SDIFF、SUNION、PFCOUNT、PFMERGE、SINTERSTORE、
SUNIONSTORE、SDIFFSTORE、SMOVE、ZUNIONSTORE、ZINTERSTORE、
EVAL、EVALSHA、BITOP、RENAME、RENAMENX、RPOPLPUSH、MSETNX、
SCRIPT LOAD、SCRIPT KILL、SCRIPT EXISTS、SCRIPT FLUSH。
产品介绍 5 开源命令兼容性
6 容灾和多活策略
DCS缓存实例都存储着大量关键数据,不论是作为数据库前端缓存,还是作为数据存 储引擎,数据的可靠性与服务的连续可用性是DCS服务设计上为客户考虑的核心因 素,下图展示了DCS在数据和服务方面的容灾架构设计演进。
图6-1 DCS 容灾架构演进
根据对数据与服务的不同可靠性要求,您可以选择将缓存实例部署在单可用区内(单 机房),或者跨可用区(同城灾备)。
实例单
Region 单可用区高可用同一机房即单可用区。单可用区灾备策略主要包括进程/服务高可用,数据持久化到磁 盘,以及实例节点间热备三种不同层次。
在单可用区内,单机实例通过进程守护的方式确保服务高可用,当DCS监测到缓存实 例进程故障,马上拉起一个新的进程继续提供服务。
产品介绍 6 容灾和多活策略
图6-2 单可用区内单机实例高可用
主备实例配置了数据持久化,数据不仅会持久化到主节点磁盘,还会增量同步到备节 点,同时备节点也会持久化一份数据。因此,主备实例实现了节点热备和持久化文件 多个备份。
图6-3 单可用区内主备实例高可用
集群版实例类似主备实例,每个条带(实例进程)有持久化文件,也都有对应的副本
(备进程及其持久化文件。)
产品介绍 6 容灾和多活策略
图6-4 单可用区内集群版实例高可用
实例单
Region 跨可用区灾备主备与集群版本的缓存实例支持将主备副本部署在不同的可用区内(即不同的物理机 房)。不同可用区的电力、网络相互隔离,当主节点所在的机房因为电力或者网络出 现故障,备节点将接管服务,客户端与备节点正常建立连接以及读写数据。
图6-5 实例跨可用区示意图
说明
上图为主备实例跨可用区部署示意,集群版实例与主备实例类似,每一个条带(进程)都跨可用 区部署。
对于同城容灾,只需要在创建主备/集群实例时,选择与主可用区不同的备可用区。如 下图所示:
产品介绍 6 容灾和多活策略
图6-6 购买实例选择不同可用区部署
说明
您的应用也可以部署为跨可用区的HA模式,这样不仅能保证数据高可靠,还能在机房遇到断电 或网络故障时,服务继续可用。
实例跨
Region 多活当前Redis没有成熟的双活(Active-Active,注意不同于灾备或者主备高可用)方案,
华为云DCS不支持跨Region多活功能。
这是由于私有定制Redis通信协议(RESP协议)的标准无法统一等原因无法实现跨云/
Region的Redis侧双活,因此,如果需要双活,可以通过应用侧进行双写改造实现。
图6-7 应用侧双写实现多活
说明:
1. 双写方案无法保证缓存的一致性(网络出现问题),需要应用侧可以容忍对应的 缓存不一致场景(通过设置过期时间等达到最终一致性),应用如果依赖缓存强 一致性,则不合适该方案,跨Region缓存强一致性当前业界没有方案可以实现。
2. 建议操作跨Region的二级缓存采用异步的方式。
产品介绍 6 容灾和多活策略
7 Redis 版本差异
DCS在创建实例时,Redis可选择“版本号”、“实例类型”。
说明
DCS Redis 3.0已下线,暂停售卖,建议使用Redis 4.0/5.0。
● 版本号
版本号共有3.0,4.0,5.0,6.0版本可以选择,它们的区别如表7-1。更多Redis 4.0和Redis 5.0的特性,请参考Redis4.0新特性介绍和Redis5.0新特性介绍。
表7-1 不同版本支持的特性、性能差异说明
比较项 Redis 3.0 Redis 4.0 & Redis 5.0 Redis 6.0 兼容开源
版本 Redis 3.0兼容开源
3.0.7版本 Redis 4.0兼容开源4.0.14版 本,Redis 5.0兼容开源5.0.9 版本
Redis 6.0兼容 开源KeyDB 6.0.16版本 实例部署
模式
采用虚机部署 在物理机上容器化部署 在物理机上容
器化部署
CPU架构 支持x86 支持x86和Arm 支持X86
创建实例
耗时 3~15分钟,集群约
10~30分钟 约8秒 约8秒
QPS 单节点约10万QPS 单节点约10万QPS 单节点约30万 QPS
公网访问 支持 暂不支持 暂不支持
域名连接 支持VPC内使用域
名连接 支持VPC内使用域名连接 支持VPC内使
用域名连接 可视化数
据管理
不支持 提供Web CLI访问Redis,管
理数据 提供Web CLI
访问Redis,
管理数据 实例类型 支持单机、主备、
Proxy集群 支持单机、主备、Proxy集
群、Cluster集群 暂只支持主备
产品介绍 7 Redis 版本差异
比较项 Redis 3.0 Redis 4.0 & Redis 5.0 Redis 6.0 实例规格 提供2G、4G、8G
直至1024G多种规 格
提供2G、4G、8G直至1024G 多种规格,同时单机主备还 支持128MB、256MB、
512MB、1GB四种小规格实 例
提供4G、
8G、16G、
32G、64G多 种规格
扩容/缩 容
支持在线扩容和缩 容
支持在线扩容和缩容 支持在线扩容
和缩容 备份恢复 主备和Proxy集群
实例支持 主备、Proxy集群和Cluster集 群实例支持
主备
说明
由于Redis不同版本的底层架构不一样,在创建Redis实例时,确定Redis版本后,将不能修 改,如Redis 3.0暂不支持升级到Redis 4.0或者Redis 5.0。如果需要由低版本升级到高版 本,建议重新购买高版本实例,然后进行数据迁移。
● 实例类型
Redis实例类型分为单机、主备、Proxy集群、Cluster集群,它们的架构与应用场 景,请参考实例类型章节。
产品介绍 7 Redis 版本差异
8 Redis 与 Memcached 差异
Redis和Memcached都是非常受欢迎的开源内存数据库,相对关系型数据库,Redis和 Memcached使用都简单,且具备高性能。
同为Key-Value数据库,该如何选择?
Memcached适用于数据结构模型简单的场景。Redis适用于数据结构复杂、需要持久 化存储数据、存储大key的场景。
具体细节比较,请参考下表。
表8-1 Redis 与 Memcached 的对比概览
对比项 Redis Memcached
延时 内存数据库,亚毫秒级延时。 内存数据库,亚毫秒级延时。
易用性 语法简单,易用性强。 语法简单,易用性强。
分布式存储 支持集群方式水平扩展。 支持分布式存储。
多语言客户 端
支持Java、C、Python等三十几 种语言的客户端连接。
支持Java、C、Python等十几种语 言的客户端连接。
线程/进程 单核单线程。
单线程通信,避免不必要的上下 文切换与竞争。
采用非阻塞IO(IO多路复用),
减少多客户端连接时的资源消 耗。
支持多线程,可扩展。
可通过增加CPU数量,提升 Memcached性能。
在key的value较大的场景中,性能 优势较明显。
持久化存储 支持。
可将每一次写入操作(数据的增 加、删除、修改)记录到磁盘文 件(AOF文件)中。
支持。
说明开源Memcached不支持持久化存储,
华为云Memcached支持持久化存储。
数据结构 支持哈希、列表、集合、有序集 合等复杂的数据结构。有更多的 应用场景
支持简单的字符串。
产品介绍 8 Redis 与 Memcached 差异
对比项 Redis Memcached Lua脚本支
持
支持。 不支持。
快照备份 支持。
快照定期产生,因此不能保证数 据100%不丢失。
Redis会fork一个子进程用于生成 快照,当数据较多时,可能产生 Redis服务短暂中断。
不支持。
数据迁移 支持。
可通过RDB快照恢复,或者AOF 文件回放的方式,将数据备份并 迁移到新的Redis实例上。
不支持。
Key的Value 限制
Key的值最大可以有1G。 1M
多数据库 Redis单机和主备支持多个数据 库,默认256个DB。
Proxy集群和Cluster集群只支持 一个数据库,为DB0。
不支持
由以上对比可知,Redis与Memcached都具有简单易用,性能优越的特点。但在数据 结构存储、持久化、备份与迁移、脚本支持等方面有所差异,建议您结合实际应用场 景,选择最合适的缓存引擎。
说明
Memcached比较合适小型静态数据的缓存场景,只需要直接读取,不做进一步运算和处理,如 html代码片段。
Redis有丰富的数据结构,应用场景更为广泛。
产品介绍 8 Redis 与 Memcached 差异
9 图解华为云 Redis 与开源服务的差异
产品介绍 9 图解华为云 Redis 与开源服务的差异
10 与开源服务的差异
DCS提供单机、主备、集群等丰富的实例类型,满足用户高读写性能及快速数据访问 的业务诉求。支持丰富的实例管理操作,帮助用户省去运维烦恼。用户可以聚焦于业 务逻辑本身,而无需过多考虑部署、监控、扩容、安全、故障恢复等方面的问题。
DCS基于开源Redis、Memcached向用户提供一定程度定制化的缓存服务,因此,除了
DCS基于开源Redis、Memcached向用户提供一定程度定制化的缓存服务,因此,除了