一、redis持久化

redis是内存数据库,一切的数据都是存储到内存中的,我们知道,当服务器意外关机,那么在内存中的数据都将丢失,但是redis为我们提供持久化功能,这样就能把数据保存到硬盘上。redis提供两种持久化方式,分别是RDB和AOF方式,各有特点。下面进行介绍这两种方式。

1、RDB方式

默认情况下,redis是开启RDB方式进行持久化的,主要由配置文件中几个参数指定:

save  1                      # after 900 sec (15 min) if at least 1 key changed
save 10 # after 300 sec (5 min) if at least 10 keys changed
save 10000 # after 60 sec if at least 10000 keys changed
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb # The filename where to dump the DB
dir /var/redis/6379 # the data file's directory.

save参数指定了快照条件,可以存在多个条件,条件之间是或关系,如上所说:save 900 1 的意思是在15分钟内有至少一个key被更改就进行快照。

快照执行的原理:

  • redis使用fork函数复制一份当前进程(父进程)的副本(子进程)
  • 父进程继续处理任务,而子进程开始将内存中的数据写入硬盘中的临时文件
  • 当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,到此一次快照完成

在执行fork函数时,操作系统使用写时复制策略,即fork函数发生的一刻父进程和子进程共享同一内存数据,当父进程需要修改某片数据时,会将该片数据复制一份以保证子进程不受影响,所以新的RDB数据文件是执行fork一刻的内存数据。通过上述过程可以知道,redis在快照过程中不会让数据改变,只有快照结束后才会将旧的文件替成新文件,也就是任何时候RDB文件都是完整的,故我们对redis数据备份可以采用定时备份RDB文件即可。

除了自动快照,还可以手工发送save和bgsave命令让redis执行快照,两个命令的区别在于,前者是由主进程进行快照操作,会阻塞其他请求,而后者是通过子进程执行快照。

redis启动后,会读取RDB快照文件,将数据从硬盘载入到内存。根据数据量、结构和服务器性能的不同,这个加载时间也不相同。

通过RDB方式实现持久化,一旦redis异常退出,就会丢失最后一次快照后修改的数据,如果不能承受任何数据的丢失,那么可以尝试用AOF方式。

2、AOF方式

默认情况下,AOF方式不是没有启用的,可以到配置文件中添加appendonly参数进行开启:

appendonly yes                        #开启AOF
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100 #当目前aof文件大小超过上一次重写时aof文件大小百分之多少时进行重写,如果之前没有重写过,则以启动大小为依据
auto-aof-rewrite-min-size 64mb #限制容许重写的最小aof文件大小

其中appendfsync参数有三个值:

  • everysec:默认值,每秒执行一次同步到硬盘。
  • always:每次数据改变就执行一次同步
  • no:不同步,完全由OS缓存决定同步

redis允许aof和rdb共存,此时重启redis会读取aof文件到内存中恢复数据。

二、redis复制

通过AOF和RDB持久化可以做到防止数据丢失,但是对于一台服务器,如果硬盘坏了,数据还是会丢失。为了避免单点故障,可以把一台服务器数据复制到另外几台服务器上,即使有一台故障了,其他还可以提供服务。redis提供复制功能可以自动实现数据的同步。

1、复制原理

了解复制原理对运维很有帮助。

当一个从数据库启动后,会主动主数据库发送sync命令,主接收到sync命令后开始在后台保存快照(RDB持久化过程),并将快照过程中的命令缓存起来。当快照完成后,会把快照和缓存的命令发送给从数据库。从数据库接收到后,载入快照和执行缓存命令。当主从数据库断开连接后,会从新执行上述步骤,不支持断点续传。

2、配置复制

环境说明:
IP 功能
192.168.245.129 master
192.168.245.131 slave

在redis中配置主从复制很简单,只需要在从数据库配置文件中添加slaveof <masterip> <masterport>参数即可实现,主数据库无需任何配置。
在192.168.245.131的配置文件中添加如下:

slaveof 192.168.245.129 

然后重启从服务器(必须要重启,否则参数没有效果

/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start

在主数据库执行个命令:

127.0.0.1:> set foo testmaster
OK

从数据库查看结果:

127.0.0.1:> get foo
"testmaster"

3、其他说明

redis的从数据库还可以作为主数据库。  

redis比较耗时的操作是数据的持久化,为了提高性能,我们可以统一在从库进行数据的持久化,也能保证数据安全。具体操作如下:

  • 通过复制建立一个或几个从数据库,并开启持久化功能
  • 关闭主数据库的持久化
  • 如果主数据库故障,则在从库执行slaveof no one命令将从数据库提升为主数据库
  • 如果原主数据库恢复了,可以再次设置成新主数据库的从数据库

Redis的管理的更多相关文章

  1. 几款开源的图形化Redis客户端管理软件

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/98.html?1455870209 Redis是一个超精简的基于内存的键值 ...

  2. Redis桌面管理工具 RedisDesktopManager

    下载链接地址:[官网地址:https://redisdesktop.com] redis-desktop-manager-0.8.8.384.exe Source code (zip) Source ...

  3. 几款开源的图形化Redis客户端管理软件推荐

    Redis是一个超精简的基于内存的键值对数据库(key-value),一般对并发有一定要求的应用都用其储存session,乃至整个数据库.不过它公自带一个最小化的命令行式的数据库管理工具,有时侯使用起 ...

  4. PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区

    PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具

  5. Redis 内存管理与事件处理

    1 Redis内存管理 Redis内存管理相关文件为zmalloc.c/zmalloc.h,其只是对C中内存管理函数做了简单的封装,屏蔽了底层平台的差异,并增加了内存使用情况统计的功能. void * ...

  6. Redis 桌面管理器

    使用Redis桌面管理器,可以方便开发人员进行开发测试,对Redis存储内容进行可视化管理. 下载安装:https://redisdesktop.com/download 1. 为了方便测试,打开re ...

  7. 安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目

    以下包括内容: 一.redis下载安装,启动 二.Redis可视化管理工具(Redis Desktop Manager)安装 三.实例化项目 一.redis下载安装,启动 1,redis官方下载地址: ...

  8. redis : 桌面管理工具 redis-desktop-manager使用指南

    概要:一款好用的Redis桌面管理工具,支持命令控制台操作,以及常用,查询key,rename,delete等操作. 下载软件,请点击下面链接,进入下载页,选择对应版本: https://redisd ...

  9. redis桌面管理工具 redis-desktop-manager使用指南(转)

    版权声明:转自 http://blog.csdn.net/li396864285/article/details/54629898     概要:一款好用的Redis桌面管理工具,支持命令控制台操作, ...

  10. Redis键管理

    Redis键管理 Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: redis > COMMAND KEY_NAME redis > SET w3c ...

随机推荐

  1. python 用win32修改注册表,修改打开IE浏览器的配置

    打开注册表:win+r, regedit,注册表的管理是按照文件夹的形式的. 注册表总共有五项: HKEY_CLASSES_ROOT 是HKEY_LOCAL_MACHINE\Software的子项,保 ...

  2. hibernate双向一对多映射

    双向多对一 :Customer类------------>一的一端   Order类----------->多的一端 Customer类:(省略set().get()和构造方法) priv ...

  3. MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析

    随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它 ...

  4. 第三篇: Ansible 配置节点认证

    应用场景:          有如下4台主机:               cpy01.dev.xjh.com              cpy02.dev.xjh.com              ...

  5. 【Mac + Python】苹果系统之安装Python3.6.x环境

    一.打开终端 输入:uname -a  ,查看电脑系统位数. 输入:python,查看mac系统python版本. 二.为了以后切换版本方便,安装pyenv进行版本切换以及升级. 参考文章:<M ...

  6. Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)

    本文介绍的是mysql中last_insert_id和mysql_insert_id的区别 1 mysql_insert_id 一.PHP获取MYSQL新插入数据的ID mysql_insert_id ...

  7. jq 获取页面中checkbox已经选中的checkbox

    var array={}; var arrChk=$("input[name='bike']:checked"); if(arrChk.length<=0){ alert(' ...

  8. PerconaXtraBackup-2.2.8手册翻译

    1.1.2 Percona Xtrabackup特性 * 不停机创建Innodb数据库热备 * 对Mysql数据库创建增量备份 * 压缩数据流方式备份到异地服务器 * 更加便捷创建新的mysql从库 ...

  9. hihoCoder#1037 : 数字三角形(DP)

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描写叙述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他 ...

  10. 洛谷P1073 最优贸易==codevs1173 最优贸易

    P1073 最优贸易 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一 ...