1. Redis 基础

最后更新于:2022-04-02 07:38:48

>[推荐站点](http://redisdoc.com/ "推荐站点"),感谢黄建宏老师 #### Reids和Memcache的区别 - Redis支持持久化 - Redis支持更丰富的数据类型 - 仅键值存储场景,Memcache性能优于Redis #### Redis注意 不同db中相同key值同 #### 基础命令 ```shell #选择DB select 5 #Redis统计信息 info #在线修改配置 192.168.0.238:6379> config get maxmemory 1) "maxmemory" 2) "1073741824" 192.168.0.238:6379> config set maxmemory 5000000 OK 192.168.0.238:6379> config get maxmemory 1) "maxmemory" 2) "5000000" ``` #### 必要配置 ##### 系统配置 ```shell #内核优化 vm.overcommit_memory = 1 #启动配置 echo never > /sys/kernel/mm/transparent_hugepage/enabled ``` ##### 必须修改参数配置 ```shell bind 192.168.0.238 daemonize yes logfile "/var/log/redis.log" requirepass ding dir /data/redis/6379/ ``` #### Redis安全 ##### 漏洞介绍 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。 ##### 入侵特征: - Redis 可能执行过 FLUSHALL 方法,整个 Redis 数据库被清空 - 在 Redis 数据库中新建了一个名为 crackit(网上流传的命令指令) 的键值对,内容为一个 SSH 公钥。 - 在 /root/.ssh 文件夹下新建或者修改了 authorized_keys 文件,内容为 Redis 生成的 db 文件,包含上述公钥 ##### 修复建议 - 禁止一些高危命令 修改 redis.conf 文件,添加 ```shell rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL "" ``` 来禁用远程修改 DB 文件地址 - 以低权限运行 Redis 服务 ```shell 为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆 ``` - 为 Redis 添加密码验证 ```shell 修改 redis.conf 文件,添加 requirepass mypassword ``` - 禁止外网访问 Redis ```shell 修改 redis.conf 文件,添加或修改 bind 127.0.0.1 使得 Redis 服务只在当前主机可用 ``` #### Redis持久化 ##### RDB(时间点快照) ##### 优点 RDB支持分析工具 性能好(fork一个子进程) 适用灾难恢复 恢复大数据集比AOF快 ##### 缺点 消耗IO 会丢失部分数据 大数据集下,会卡顿 #### AOF(写日志) 新命令追加到文件末尾,Redis会在后台进行重写,对相同Key的写入,去除重复日志 ##### 优点 每秒写一次硬盘 ##### 缺点 体积比较大 #### 混合RDB和AOF 优先使用AOF ###主不开持久化,从库开持久化 #### 坑? RDB运行后,开启AOF的正确方式 1.在线修改配置 config set appendonly=1 2.检查appendonly.aof 3.修改配置文件 注意:如果配置文件开启AOF,默认从AOF启动,里面并没有任何数据,
';