ITPub博客

首页 > 数据库 > NoSQL > redis持久化

redis持久化

原创 NoSQL 作者:小亮520cl 时间:2015-09-08 14:31:32 0 删除 编辑

redis的持久化分为aof和rdb两种


1.rdb持久化

  1. 在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb 的二进制文件中。

  2. 你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。

  3. 你也可以通过调用 SAVE 或者 BGSAVE , 手动让 Redis 进行数据集保存操作。

  4. 比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:

  5. save 60 1000
  6. 这种持久化方式被称为快照(snapshot)

2.aof持久化

  1. 快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。

  2. 尽管对于某些程序来说, 数据的耐久性并不是最重要的考虑因素, 但是对于那些追求完全耐久能力(full durability)的程序来说, 快照功能就不太适用了。

  3. 从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化。

  4. 你可以通过修改配置文件来打开 AOF 功能:

  5. appendonly yes
  6. 从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。

  7. 这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。 ---相当于mysql的binlog日志啊
  8. Redis 2.2 需要自己手动执行 BGREWRITEAOF 命令; Redis 2.4 则可以自动触发 AOF 重写,
配置文件:
  1. [root@HaoDai_App_Weight01 18300]# more redis.conf
  2. daemonize yes
  3. pidfile "./run/redis.pid"
  4. port 18300
  5. timeout 0
  6. loglevel verbose
  7. logfile "./log/redis.log"
  8. dir "./data"
  9. databases 16
  10. #save 900 1
  11. #save 300 10
  12. #save 60 10000
  13. #rdbcompression yes
  14. #dbfilename "dump.rdb"

  15. ################################### LIMITS ####################################

  16. maxclients 655350
  17. # maxmemory <bytes>

  18. ############################## APPEND ONLY MODE ###############################

  19. appendonly yes                            ###aof持久化
  20. appendfilename "appendonly_18300.aof"     ####保存的文件名称
  21. appendfsync everysec                      ###持久化方式
  22. aof-rewrite-incremental-fsync yes
  23. #no-appendfsync-on-rewrite yes
  24. ################################## SLOW LOG ###################################
  25. list-max-ziplist-entries 512
  26. list-max-ziplist-value 64
  27. set-max-intset-entries 512
  28. activerehashing yes
  29. #################################
  30. slowlog-log-slower-than 500000
  31. slowlog-max-len 655350
  32. ############master - slave ##########################
  33. #slave-priority 20
  34. #slave-serve-stale-data yes
  35. #slave-read-only no
  36. #slaveof 192.168.1.156 17300
  37. #################################################



附上两个持久化 备份脚本:
aof备份脚本
  1. #!/bin/bash
  2. #/root/sh/redis_aof.sh 18100
  3. ##################################
  4. #auther@F.W
  5. ##################################
  6. if [ ! -n "$1" ]; then
  7.   echo "Port IS NULL"
  8.   exit
  9. fi


  10. BACK_DIR=/home/backup
  11. REDIS_BIN=/usr/local/bin/redis-cli
  12. REDIS_IP=127.0.0.1
  13. REDIS_PORT=$1

  14. DATE=`date +%Y%m%d%H%M`

  15. ##################################
  16. #backup redis
  17. ##################################
  18. REDIS_BACK_DIR="$BACK_DIR"/redis/$1/"$DATE"

  19. if [ ! -d $REDIS_BACK_DIR ];then
  20.    mkdir -p $REDIS_BACK_DIR
  21. fi
  22. $REDIS_BIN -h $REDIS_IP -p $REDIS_PORT -a pwd bgrewriteaof
  23. echo "waiting"
  24. sleep 600
  25. cp /home/redis/$1/data/appendonly.aof $REDIS_BACK_DIR
  26. if [[ ! -f $BACK_DIR/redis_back.log ]];then
  27.     touch $BACK_DIR/redis_back.log
  28. fi
  29. echo "redis $1 backup seccuss,$DATE " >>$BACK_DIR/redis_back.log
  30. find $BACK_DIR/redis/ -mtime +7 -exec rm -rf {} \

rdb备份脚本
  1. #!/bin/bash
  2. #/root/sh/back_redis.sh 16100
  3. ##################################
  4. #auther@F.W
  5. ##################################
  6. BACK_DIR=/home/backup
  7. REDIS_BIN=/usr/local/bin/redis-cli
  8. REDIS_IP=127.0.0.1
  9. REDIS_PORT=$1

  10. DATE=`date +%Y%m%d%H%M`

  11. ##################################
  12. #backup redis
  13. ##################################
  14. REDIS_BACK_DIR="$BACK_DIR"/redis/"$DATE"

  15. if [ ! -d $REDIS_BACK_DIR ];then
  16.    mkdir -p $REDIS_BACK_DIR
  17. fi
  18. ROLE=`$REDIS_BIN -p $1 info|grep role|awk -F: '{print $2}'|tr -d '\r'`
  19. case $ROLE in
  20.     master)
  21.         $REDIS_BIN -h $REDIS_IP -p $REDIS_PORT -a pwd bgsave
  22.         
  23.     ;;
  24.     slave)
  25.     #    $REDIS_BIN -h $REDIS_IP -p $REDIS_PORT -a pwd bgsave
  26.     #    $REDIS_BIN -h $REDIS_IP -p $REDIS_PORT -a pwd bgrewriteaof
  27.     ;;
  28.     *)
  29.         exit 1
  30.         ;;
  31. esac
  32. echo "waiting"
  33. sleep 60
  34. case $ROLE in
  35.     slave)
  36.     echo "back slave"
  37.     ;;
  38.     master)
  39.     echo "backup master"
  40.     cp /home/redis/$1/data/dump.rdb $REDIS_BACK_DIR
  41.     ;;
  42. esac
  43. if [[ ! -f $BACK_DIR/redis_back.log ]];then
  44.     touch $BACK_DIR/redis_back.log
  45. fi
  46. echo "redis $ROLE backup seccuss,$DATE " >>$BACK_DIR/redis_back.log

关于这两种持久化方法的详细对比查看:
http://redisdoc.com/topic/persistence.html#redis

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-1794315/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
毕业以后专业任职数据库工程师职位,itpub一直作为自己的笔记记录的地方,blog写的不详细,仅供参考!

注册时间:2013-09-12

  • 博文量
    531
  • 访问量
    970208