Redis开启持久化且自启动

前面在我本地虚拟机上测试了一下Redis。Vmware启动Centos,wget redis,然后tar解压并make。

$ wget http://download.redis.io/releases/redis-5.0.7.tar.gz
$ tar xzf redis-5.0.7.tar.gz
$ cd redis-5.0.7
$ make

src/redis-server启动redis,但不应该这样。这样启动没有指定配置文件,而且我们要事先配置好配置文件。vi redis.conf,更改成可以后台进程运行redis:

# daemonize no 
daemonize yes

在跟redis进行命令交互时,退出不应该Ctrl+Z直接退出,这样会导致进程被挂起,需要停止再重启了。而daemonize改成yes允许其后台运行,否则只能在当前终端上跟redis交互了。

redis默认监听6379 port,更改其他port也需要在conf里修改,不过不建议。否则redis_init_script这个脚本文件也要更改port参数。然后防火墙开放6379。

然后注释掉bind 127.0.0.1这一行,否则redis拒绝外网任何ip的访问。当然,开启bind ip ip …会很安全,仅允许指定地址的远程操作。

# bind 127.0.0.1
protected-mode no

redis持久化有RDB和AOF,两者均有各自的优缺点,redis未来打算将其有效的合二为一。以下是官网对AOF的评价(已中文翻译):


使用AOF Redis更加持久:您可以有不同的fsync策略:完全没有fsync,每秒fsync,每个查询fsync。使用默认策略fsync时,每秒的写入性能仍然很(fsync是使用后台线程执行的,并且在没有进行fsync的情况下,主线程将尽力执行写入操作。)但是您只能损失一秒钟的写入时间。AOF日志仅是一个追加日志,因此,如果断电,也不会出现寻道或损坏问题。即使由于某种原因(磁盘已满或其他原因)以半写命令结束日志,redis-check-aof工具也可以轻松修复它。Redis太大时,Redis可以在后台自动重写AOF。重写是完全安全的,因为Redis继续追加到旧文件时,会生成一个全新的文件,其中包含创建当前数据集所需的最少操作集,一旦准备好第二个文件,Redis会切换这两个文件并开始追加到新的那一个。AOF以易于理解和解析的格式包含所有操作的日志。您甚至可以轻松导出AOF文件。例如,即使您使用FLUSHALL命令刷新了所有错误文件,如果在此期间未执行任何日志重写操作,您仍然可以保存数据集,只是停止服务器,删除最新命令并重新启动Redis。

AOF的优势

通常情况下我们可以两种方式都开启,开启AOF当有修改操作时redis会以追加方式更新数据:

$ vi redis.conf
appendonly yes

通常还要设置密码,默认是没有密码的,设置了密码就要指定密码来与redis交互,如:

redis-cli -a password

可以将redis_init_script添加至init.d,方便随时重启动redis服务。注意,脚本中的路径参数需要设置正确。

若重启redis后数据仍丢失,可能需要:

$ vi /etc/sysctl.config
vm.overcommit_memory = 1
$ sysctl -p

关于overcommit可参考链接的说明https://www.kernel.org/doc/Documentation/vm/overcommit-accountingsysctl,该目录中的文件可用于调整操作 Linux内核的虚拟内存(VM)子系统将脏数据写到磁盘。具体可参考https://www.kernel.org/doc/Documentation/sysctl/vm.txt