redis禁用keys、flushdb、flushall等命令

redis禁用keys、flushdb、flushall等命令

文档

  1. redis单机安装
  2. redis集群模式 -集群搭建
  3. redis大key问题-生成大key-生成100万条测试数据
  4. redis惰性删除与异步删除

官方文档

  1. 官网操作命令指南页面:https://redis.io/docs/latest/commands/?name=get&group=string
  2. Redis cluster specification

下载地址

  1. 官网:https://redis.io/
  2. 下载列表页面:https://download.redis.io/releases/

说明

  1. 版本选择:redis-7.0.0.tar.gz
  2. 下载地址:https://download.redis.io/releases/redis-7.0.0.tar.gz

redis禁用keys、flushdb、flushall等命令

安装redis
  1. 以单机版redis为例,安装redis参考文档:redis单机安装
keys、flushdb、flushall等命令的危害
  1. keys *会扫描所有key,如果有较多的key,可能会发生阻塞
  2. flushdb会删除当前数据库中的所有key
  3. flushall会删除所有数据库中的所有key
keys命令的替代方案
  1. keys *命令是获取所有key,可以用scan命令分批获取key,减少单次阻塞时间

  2. scan命令,https://redis.io/docs/latest/commands/SCAN/

    shell 复制代码
    SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
禁用keys、flushdb、flushall等命令
  1. redis.conf中,找到SECURITY相关的配置,找到命令重命名相关的说明

  2. 官方文档

    conf 复制代码
    ################################## SECURITY ###################################
    
    # 还有其它说明
    
    # Command renaming (DEPRECATED).
    #
    # ------------------------------------------------------------------------
    # WARNING: avoid using this option if possible. Instead use ACLs to remove
    # commands from the default user, and put them only in some admin user you
    # create for administrative purposes.
    # ------------------------------------------------------------------------
    #
    # It is possible to change the name of dangerous commands in a shared
    # environment. For instance the CONFIG command may be renamed into something
    # hard to guess so that it will still be available for internal-use tools
    # but not available for general clients.
    #
    # Example:
    #
    # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
    #
    # It is also possible to completely kill a command by renaming it into
    # an empty string:
    #
    # rename-command CONFIG ""
    #
    # Please note that changing the name of commands that are logged into the
    # AOF file or transmitted to replicas may cause problems.
  3. 中文翻译

    conf 复制代码
    ################################## SECURITY ###################################
    
    # 命令重命名(已弃用)。
    #
    # ------------------------------------------------------------------------
    # 警告:如有可能,请避免使用此选项。建议使用 ACL 从默认用户中移除命令,
    # 并将这些命令仅放在为管理目的创建的某个管理员用户中。
    # ------------------------------------------------------------------------
    #
    # 在共享环境中可以更改危险命令的名称。例如,可以将 CONFIG 命令重命名为
    # 难以猜测的名称,这样它仍然可供内部工具使用,但不会对普通客户端开放。
    #
    # 示例:
    #
    # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
    #
    # 也可以通过将命令重命名为空字符串来完全禁用该命令:
    #
    # rename-command CONFIG ""
    #
    # 请注意,更改记录到 AOF 文件或传输到副本的命令名称可能会导致问题。
  4. 文档中已说明,命令重命名的方式已弃用。这里还是采用命令重命名的方式来禁用keys、flushdb、flushall等命令

  5. 推荐配置

    conf 复制代码
    rename-command KEYS ""
    rename-command FLUSHDB ""
    rename-command FLUSHALL ""
  6. 客户端使用keys、flushdb、flushall等命令时,将提示不可用

    shell 复制代码
    127.0.0.1:6379> keys *
    (error) ERR unknown command 'keys', with args beginning with: '*' 
    127.0.0.1:6379> flushdb
    (error) ERR unknown command 'flushdb', with args beginning with: 
    127.0.0.1:6379> flushall
    (error) ERR unknown command 'flushall', with args beginning with:
  7. 如果aof文件中包含相关命令,可能会报错导致服务启动失败

    1. 查看日志报错信息

      verilog 复制代码
      Unknown command 'flushdb' reading the append only file appendonly.aof.1.incr.aof
    2. 解决方法:将aof中相关的命令删除就可以启动服务了。生产环境这样操作可能会有风险

参考资料

  1. https://www.bilibili.com/video/BV13R4y1v7sP

注意事项

  1. 部分内容由AI生成
  2. 如有不对,欢迎指正!!!
相关推荐
身如柳絮随风扬28 分钟前
Redis中的哈希槽怎么理解
redis·哈希算法
未秃头的程序猿1 小时前
🚀 从“单机崩盘”到“集群稳如狗”:Redis 高可用避坑指南(保姆级实战)
redis·后端·面试
见山是山-见水是水3 小时前
鸿蒙flutter第三方库适配 - 汇率换算器
redis·flutter·华为·harmonyos
014-code3 小时前
Redis 删除缓存失败怎么办?重试、死信、补偿的工程化方案
数据库·redis·缓存
rannn_1113 小时前
【Redis|高级篇1】分布式缓存|持久化(RDB、AOF)、主从集群、哨兵、分片集群
java·redis·分布式·后端·缓存
PD我是你的真爱粉3 小时前
Redis 持久化、过期删除、淘汰策略与内存碎片全解析
java·redis·bootstrap
斌味代码3 小时前
Redis 分库分表实战:从垂直拆分到水平扩容完整记录
数据库·redis·bootstrap
rchmin3 小时前
阿里Tair分布式锁与Redis分布式锁的实现区别
数据库·redis·分布式
win x13 小时前
Redis 使用~如何在Java中连接使用redis
java·数据库·redis
程序员萌萌17 小时前
Redis的缓存机制和淘汰策略详解
数据库·redis·缓存机制·淘汰策略