启动脚本 redis_init_script 位于位于Redis的 /utils/ 目录下,redis_init_script脚本代码如下:
#!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. # chkconfig: 2345 90 10 ### BEGIN INIT INFO # Provides: redis_6379 # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Redis data structure server # Description: Redis data structure server. See https://redis.io ### END INIT INFO #redis服务器监听的端口 REDISPORT=6379 #服务端所处位置 EXEC=http://www.likecs.com/usr/local/bin/redis-server #客户端位置 CLIEXEC=http://www.likecs.com/usr/local/bin/redis-cli #redis的PID文件位置,根据实际情况修改 PIDFILE=http://www.likecs.com/var/run/redis_${REDISPORT}.pid #redis的配置文件位置,需将${REDISPORT}修改为文件名 CONF="/etc/redis/${REDISPORT}.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac将启动脚本复制到/etc/init.d目录下,本例将启动脚本命名为redisd(通常都以d结尾表示是后台自启动服务)
cd cp redis_init_script /etc/init.d/redisd chkconfig redisd on service redisd start|stop 1.5 redis关闭第一种关闭方式
# 断电,非正常关闭,容易导致数据丢失 ps -ef | grep redis kill -9 PID第二种关闭方式
# 正常关闭,数据保存 redis-cli shutdown # 关闭redis服务,通过客户端进行shutdown # 如果redis设置了密码,则需要先用客户端登录,然后再进行shutdown redis-cli -a password 127.0.0.1:6379> shutdown # 重新启动redis服务,使用客户端连接,会发现数据还在 三、持久化Redis持久化,就是将内存中的数据,永久保存到磁盘上。
Redis持久化有两种方式:RDB(Redis DB)、AOF(AppendOnlyFile)
Redis 可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
3.1 RDB(快照模式)在默认情况下,Redis 将数据库快照保存在名字为dump.rdb的二进制文件中,可以在redis.conf配置文件中修改持久化信息。
save 900 1 表示在900秒内,至少更新了1条数据。Redis就将数据持久化到硬盘 save 300 10 表示在300内,至少更新了10条数据,Redis就会触发将数据持久化到硬盘 save 60 10000 表示60秒内,至少更新了10000条数据,Redis就会触发将数据持久化到硬盘 3.1.1 策略自动:BGSAVE
按照配置文件中的条件满足就执行BGSAVE;
非阻塞,Redis服务正常接收处理客户端请求;
Redis会folk()一个新的子进程来创建RDB文件,子进程处理完后会向父进程发送一个信号,通知它处理完毕;
父进程用新的dump.rdb替代旧文件。
手动:SAVE
客户端(redis-cli)发起SAVE命令;
阻塞Redis服务,无法响应客户端请求;
创建新的dump.rdb替代旧文件。
3.1.2 优点
执行效率高;
恢复大数据集速度较AOF快。
3.1.3 缺点
会丢失最近写入、修改的而未能持久化的数据;
folk过程非常耗时,会造成毫秒级不能响应客户端请求。
3.2 AOF(追加模式、文本重演)AOF默认关闭,需要在配置文件中手动开启。
记录所有的写操作命令,在服务启动的时候使用这些命令就可以还原数据库。
Append only file,采用追加的方式保存,默认文件appendonly.aof。
3.2.1 写入机制AOF机制,添加了一个内存缓冲区(buffer):
将内容写入缓冲区
当缓冲区被填满、或者用户手动执行fsync、或者系统根据指定的写入磁盘策略自动调用fdatasync命令,才将缓冲区里的内容真正写入磁盘里
在缓冲区里的内容未写入磁盘之前,可能会丢失
3.2.2 写入磁盘的策略appendfsync选项,这个选项的值可以是always、everysec或者no