鱼喃

听!布鲁布鲁,大鱼又在那叨叨了

redis入门(7)---管理与维护

涉及 持久化_、_主从服务_、_安全_、_监控 等设置或管理。

持久化

redis虽然是基于内存的,但是作为一个比较成熟的数据库,仍然提供了持久化的功能,并且默认是开启的。

redis有两种持久化的方式:RDB 与 AOF

RDB(默认)

在一定时间内改动的键的数量超过则写回到磁盘

配置

默认写到 dump.rdb 文件,可以在配置文件中通过参数 dbfilename 修改
可以在配置文件 redis.conf 中按照如下格式添加自定义规则(默认已有三条规则)

1
2
3
# save time count
save 90 1
save 300 10
文件格式

RDB文件是以二进制形式存储的。

适用场景

由于需要达到一定的改动次数,如果中间出现异常崩溃,最后的那些改动会丢失。如果对可靠性要求不是很高,可以采用。

关闭RDB持久化

删除原有规则,并添加规则:

1
save ""

AOF (append only file)

每出现一个改动就写回到文件

开启AOF持久化

修改配置文件参数, appendonly yes
默认写到 appendonly.aof 文件中,可以在配置文件中修改 appendfilename 参数
数据格式采用文本文件格式,存储的是每一步的操作,形式如下:

1
2
3
4
5
6
7
*3 #行数
$3 #字符串长度
set
$3 #字符串长度
foo
$3 #字符串长度
bar

表示的是命令 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
2
3
4
5
6
7
git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git
cd phpRedisAdmin
//下载predis依赖
git clone https://github.com/nrk/predis.git vendor

cp includes/config.sample.inc.php includes/config.inc.php
//在 config.inc.php 中修改redis服务器连接参数
rdbtools

地址 rdbtools
快照文件解析器,根据快照文件导出json文件,分析redis中每个键的占用空间情况等。python开发