如何清空Redis数据?
注意数据清空功能为高危操作,请谨慎执行。
- Redis3.0实例
Redis3.0实例不支持在DCS控制台上执行“数据清空”功能。需要使用Redis-cli客户端连接实例,执行flushdb或者flushall命令进行清空。
flushall:清空整个实例的数据。
flushdb:清空当前DB中的数据。
如何在Redis中查找匹配的Key和遍历所有Key?
查找匹配Key
在大Key和热Key分析中,不支持按照指定格式分析,如果需要查找指定前缀或者后缀格式的Key,您可以使用scan命令,根据指定格式进行匹配查找。
例如,需要查找Redis实例中包含a关键字的Key,可以使用Redis-cli工具,执行以下命令:
./redis-cli -h ** {redis_address} ** -p ** {port} [-a ** password ] --scan --pattern ' a '
遍历所有Key
由于keys命令复杂度高,容易导致Redis无响应,所以禁止使用keys命令遍历实例所有的Key。如果需要在Redis实例中遍历所有的Key,可以使用Redis-cli工具,执行以下命令可以遍历Redis实例的所有key。
./redis-cli -h ** {redis_address} ** -p ** {port} [-a ** password ] --scan --pattern '*'
scan命令的使用方法,可以参考Redis官方网站。
在WebCli执行keys命令报错“permission denied”
WebCli已禁用keys命令,请使用Redis-cli执行。
高危命令如何禁用?
Redis4.0及以上版本的实例创建之后,支持重命名高危命令。当前支持重命名的高危命令有command、keys、flushdb、flushall、hgetall、scan、hscan、sscan、和zscan,Proxy集群实例还支持dbsize和dbstats命令重命名,其他命令暂时不支持。
您可以在创建实例时进行重命名以上高危命令,或在创建完成后,在缓存管理页面,选中实例,单击操作列的“更多 > 命令重命名”进行重命名以上高危命令。
说明
目前Redis不支持直接禁用命令,涉及到以上高危命令,可以使用命令重命名。关于DCS实例支持和禁用的命令请参考开源命令兼容性章节。
命令重命名提交后,系统会自动重启实例,实例完成重启后重命名生效。
因为涉及安全性,页面不会显示这些命令,请记住重命名后的命令。
是否支持pipeline命令?
支持。
注意:Redis Cluster版本集群实例使用pipeline时,要确保管道中的命令都能在同一分片执行。
Redis是否支持INCR/EXPIRE等命令?
支持。命令兼容性相关说明请参考“命令兼容性说明”章节。
Redis命令执行失败的可能原因
Redis命令执行失败,一般有以下可能原因:
- 命令拼写错误
如下图所示,命令拼写有误,Redis实例返回“ERR unknown command”,删除key的正确命令为 del 。
- 在低版本Redis实例运行高版本命令
如下图所示,在Redis 3.0版本运行Redis 5.0新增的Stream相关命令,Redis实例返回命令出错信息。
- DCS Redis不支持的部分命令
出于安全原因,DCS禁用了部分命令,具体参考Redis命令的兼容性,查看禁用命令与受限使用命令。
- 执行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命令超时分为客户端超时和服务端超时。
- 客户端超时时间一般由客户端代码自行控制,业务侧需要根据自己的业务特点选择合适的超时时间(例如Java的Lettuce客户端,该参数名为timeout)。
- Redis服务端Timeout默认配置为0,不会主动断开连接,如果需要修改配置,可以参考修改实例配置参数。
Redis的Key是否能设置为大小写不敏感?
DCS Redis和开源Redis保持一致,key对大小写敏感,且不支持设置大小写不敏感功能。
Redis是否支持查看使用次数最多的命令?
Redis不支持对历史命令的记录,也不支持查看使用次数最多的命令。
WebCli的常见报错
- ERR Wrong number of arguments for 'xxx' command
该报错代表执行的Redis命令存在参数错误(语法错误),可以参考开源Redis命令协议介绍进行命令构造。
- ERR unknown command 'xxx'
该报错代表此命令为未知命令或者非redis协议定义的合法命令,可以参考开源Redis命令协议介绍进行命令构造。
- ERR Unsupported command: 'xxx'
该报错代表命令在DCS的Redis实例场景下禁用,可以参考支持和禁用的Web CLI命令。