您的位置:首页 > 数据库 > Redis

Redis的数据管理持久化

2016-06-25 09:13 267 查看

一、持久化

因为Redis的数据都在内存中,为了使得Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式同步到硬盘中,这一过程就是持久化。

Redis支持两种方式的持久化:RDB方式、AOF方式

1、RDB方式

RDB持久化方式是通过快照完成的,当符合一定条件时Redis会自动将内存的所有数据进行快照并存储在硬盘上。

进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定时间内,被更改的键的个数大于指定的数值时就会进行快照。

RDB是Redis默认的持久化方式。

快照的过程

Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)

父进程继续接受并处理客户端发来的命令,而子进程开始讲内存中的数据写入硬盘的临时文件中

当子进程写入完所有的数据后,会用该临时文件替换旧的RDB文件,至此,一次快照操作完成

2、AOF方式

开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。

二、复制

一台服务器上的数据库更新后,自动将更新的数据同步到其他服务器上。

redis-server –port 6380 –slaveof 127.0.0.1 6379

此时在数据库中的任何变化都会同步到从数据库

或者SLAVEOF 127.0.0.1 6379 命令同样可以设置哪一个主数据库

通过复制的功能可以实现读写分离以提高服务器的负载能力,主数据库负责写入,而从数据库负责读取。

从数据库的数据持久化

另一个相对耗时的操作是持久化,为了提高性能,可以通过复制功能建立一个(或若干个)从数据库,并在从数据库中启用持久化,同时在主数据库禁用持久化。当从数据库崩溃时,重启主数据库会自动将数据同步过来,所以无需担心数据的丢失。而当主数据库崩溃时,需要在从数据库中使用slaveof no one 命令将从数据库提升为主数据库继续服务,并在原来的主数据库启动后,使用slaveof 命令,将其设置为新的主数据库的从数据库,即可将数据同步回来。

三、安全性

1、Redis默认配置会接受来自任何地址发送过来的请求,要修改这一配置,在配置文件中修改bind参数

bind 127.0.0.1

2、配置文件中的requierpass参数,为Redis设置密码,发送密码需要 AUTH password

3、重命名Redis的命令

Redis支持在配置文件中将命令重命名,比如将flushall命令重命名为一个比较复杂的名字,以保证只有自己的应用可以使用该命令,如下示例:

rename -command FLUSHALL iqoejduedncjde

如果希望直接禁用某个命令可以将命令重写为空字符串

rename -command FLUSHALL “”

注意,无论设置密码还是重命名命令,都需要保证配置文件的安全性,否则就没有任何意义了。

四、通信协议

Redis支持两种协议:一种是二进制安全的统一协议,一种是比较直观的便于在telnet程序中输入的简单协议。

telnet host port

Redis的AOF文件和主从复制时,主数据库向从数据库发送的内容都使用了统一请求协议。如果要开发一个和Redis直接通信的客户端,推荐使用此协议。

五、管理工具

1、耗时命令日志

配置文件slowlog-log-slower-than参数设置时长限制

SLOWLOG GET 查看耗时的命令信息

2、命令监控

MONITOR 监控打印所有的命令操作,非常耗费性能

3、phpRedisAdmin

支持以树形结构查看键列表,编辑键值,导入/导出数据库,查看数据库信息和查看键信息功能

4、Rdbtools

Redis快照文件解析器,根据快照文件导出JSON数据文件、分析Redis中每个键的占用空间情况等

rdb –command json /path/to/dump.rdb > output_filename.json
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息