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启动,里面并没有任何数据,
';