分布式缓存

Redis命令

2022-09-05 09:00:00

如何清空Redis数据?

注意数据清空功能为高危操作,请谨慎执行。

Redis3.0实例

Redis3.0实例不支持在DCS控制台上执行“数据清空”功能。需要使用Redis-cli客户端连接实例,执行flushdb或者flushall命令进行清空。

flushall:清空整个实例的数据。

flushdb:清空当前DB中的数据。

Redis4.0和Redis5.0实例

Redis4.0/5.0实例数据清空,可以使用Redis-cli客户端连接实例,执行flushdb或者flushall命令清空,也可以使用DCS控制台上的“数据清空”功能,一次全量清空Redis数据,还可以通过管理控制台的Web CLI功能连接Redis实例,使用flushdb命令进行清空。

如果是Cluster集群实例,集群实例不支持多DB,由分片组成,如果使用命令清空,需要对集群每个分片都执行flushdb或者flushall命令,否则容易出现数据清空不彻底的问题。

说明:

  • 目前只有Redis 4.0和Redis 5.0实例支持在DCS控制台上执行“数据清空”功能及通过管理控制台的Web CLI功能连接Redis实例执行flushdb命令清空数据。

  • 在web cli界面使用flushdb命令,一次只会清理一个分片,如果有多个分片,需要用命令行连接到每个主节点上,挨个执行flushdb。

  • Web CLI方式不支持清空Cluster集群的数据。


高危命令如何重命名?

当前支持重命名Redis4.0和Redis5.0实例高危命令command、keys、flushdb、flushall和hgetall,其他命令,暂不支持重命名。

您可以在创建实例时进行重命名以上高危命令。

是否支持pipeline命令?

支持。注意:Redis 4.0&5.0 Cluster版本集群实例使用pipeline时,要确保管道中的命令都能在同一分片执行。

Redis是否支持INCR/EXPIRE等命令

支持。命令兼容性相关说明请参考“ 开源命令兼容性”章节。

Redis命令执行失败的可能原因

Redis命令执行失败,一般有以下可能原因:

命令拼写错误

DCS Redis不支持的部分命令

出于安全原因,DCS禁用了部分命令,具体参考1.5 开源命令兼容性,查看禁用命令与受限使用命令。

执行lua脚本失败

例如报错:ERR unknown command 'EVAL' ,说明您的Redis实例属早期创建的低版本Redis实例,不支持lua脚本,这种情况请联系管理员,升级您的Redis实例。

执行setname和getname失败

说明您的Redis实例属早期创建的低版本Redis实例,不支持这两个命令,这种情况请联系管理员,升级您的Redis实例。

Redis命令执行不生效

如果客户端代码业务异常,怀疑是Redis命令不生效,则可以通过Redis-cli命令进行命令执行和数据查看,判断Redis命令执行是否异常。

以下列举两个场景:

场景一:通过设置key值和查看key值,即可判断该命令是否生效。

Redis通过set命令写String类型数据,但是数据未变化,则可以使用Redis-cli命令访问Redis实例,执行如下命令:

场景二:通过expire命令设置过期事件,但是怀疑过期时间不对,则可以执行如下操作:

设置10秒过期时间,然后执行ttl命令查看过期时间,如下图表示,执行ttl命令时,过期时间剩下7秒。

说明:

Redis客户端和服务端通过二进制协议进行通信,使用Redis-cli、Jedis、Python客户端并没有差异。

因此如果怀疑Redis有问题,但是使用Redis-cli排查没问题,那就很可能是业务代码存在问题,如果日志没有明显错误信息,则建议在代码添加日志支撑进一步分析。

Redis命令执行是否有超时时间?超时了会出现什么结果?

单个Redis命令处理时长限制为1分钟,目前Redis命令超时时间暂不支持配置。命令处理超时,服务端将会自动断开与客户端的连接。