涉及 持久化_、_主从服务_、_安全_、_监控 等设置或管理。
持久化
redis虽然是基于内存的,但是作为一个比较成熟的数据库,仍然提供了持久化的功能,并且默认是开启的。
redis有两种持久化的方式:RDB 与 AOF
RDB(默认)
在一定时间内改动的键的数量超过则写回到磁盘
配置
默认写到 dump.rdb 文件,可以在配置文件中通过参数 dbfilename 修改
可以在配置文件 redis.conf 中按照如下格式添加自定义规则(默认已有三条规则)
1 | # save time count |
文件格式
RDB文件是以二进制形式存储的。
适用场景
由于需要达到一定的改动次数,如果中间出现异常崩溃,最后的那些改动会丢失。如果对可靠性要求不是很高,可以采用。
关闭RDB持久化
删除原有规则,并添加规则:
1 | save "" |
AOF (append only file)
每出现一个改动就写回到文件
开启AOF持久化
修改配置文件参数, appendonly yes
默认写到 appendonly.aof 文件中,可以在配置文件中修改 appendfilename 参数
数据格式采用文本文件格式,存储的是每一步的操作,形式如下:
1 | *3 #行数 |
表示的是命令 set foo bar
由于系统默认的写机制存在缓存,延迟回写(30s),如果掉电,缓存中内容会丢失。可以设置自动同步到磁盘,参数 appendfsync,默认时每秒回写一次
适用场景
AOF可靠性更高,但是也更影响性能(好在redis占用资源则不多),适用于对数据可靠性要求很高,对丢失0容忍的应用
注意
可以同时使用RDB和AOF两种持久化方式,不会存在冲突
设置主从服务器
1 | redis-server --port 6380 --slaveof 127.0.0.1 6379 |
开启6380端口的redis服务器实例A,作为6379实例B的从服务器,随后A会自动向B 报告 ,请求镜像,此后每次B变动,都会通知A更改。A与B的数据交换格式类似于AOF文件,从服务器的数据默认是 只读(readonly),可以通过参数 slave-read-only 参数进行修改,但是从服务器的变化不会影响到主服务器,并且会被下一次的同步覆盖
安全
关闭外部网络访问权限
修改配置文件参数
1 | bind 127.0.0.1 |
最新版3.2.0 已经默认如此配置了
设置密码
配置文件添加参数
1 | requirepass <password> |
以后连接服务器时,都要先输入
1 | AUTH <password> |
命令验证,才能正常使用
个人认为没有必要,redis不提供输入次数限制,暴力破解的难度不大,除非是非常高强度的密码。况且已经关闭外部访问,能连上主机的直接看程序代码就知道密码了。
重命名/禁止命令
重命名
1 | rename-command command newCommandName |
禁止
禁用某些命令
1 | rename-command command "" |
通信协议
redis提供了两种通信协议支持:简单协议 和 统一请求协议
简单协议(SET foo bar)
输入跟在redis-cli 中输入的命令一致
二进制安全的统一请求协议
输入的格式与输出一致,跟AOF文件格式相似
例如 SET foo bar
写为 *3\r\n$3\r\nSET\r\n$3foo\r\n$3bar\r\n
两种协议的输出格式对比
类型 | 示例数据 |
---|---|
错误 | -ERR blabla\r\n |
状态 | +OK\r\n |
整数 | :3\r\n |
字符串 | $3\r\nbar\r\n |
多行回复 | *3\r\n$3\r\nSET\r\n$3foo\r\n$3bar\r\n |
管理工具
redis自带工具
在 redis-cli 中输入
slowlog get 慢日志查询,时间阈值在配置文件中修改,默认为10000
monitor 实时显示服务器的每一个请求(所有客户端)
phpRedisAdmin
跟phpmyadmin相似,用网页方式管理 (查看演示)
1 | git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git |
rdbtools
地址 rdbtools
快照文件解析器,根据快照文件导出json文件,分析redis中每个键的占用空间情况等。python开发