(转)淘淘商城系列——Redis持久化方案
http://blog.csdn.net/yerenyuan_pku/article/details/72858975
Redis中设置key的过期时间
Redis中的expire命令用于设置key的过期时间,以毫秒计。key过期后将不再可用。Redis中的expire命令基本语法如下:
expire key second
设置成功返回1。当key不存在或者不能为key设置过期时间时返回0。
设置key的过期时间成功后,我们还可使用ttl key
命令查看key的有效期,如若返回正数,则说明正在倒计时;返回-1,则说明这个key是持久化的;返回-2,则说明这个key是不存在的。
最后,我们可使用persist key
命令来清除key的过期时间,使其持久化,如若返回0,则说明持久化没成功;返回1,则说明持久化成功。
Redis持久化方案
Redis的所有数据都是保存到内存中的,但Redis可以实现数据的持久化存储,即将数据保存到磁盘上。Redis的持久化存储提供两种方式:快照(RDB文件)和追加式文件(AOF文件):
- RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照,它是Redis默认支持的持久化方案。
- AOF持久化方式则会记录每一个服务器收到的写操作。在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令记录的格式跟Redis协议一致,以追加的方式进行保存。说得通俗一点,就是把所有对Redis数据库操作的命令,即增删改操作的命令,保存到一个文件中。数据库恢复时把所有的命令执行一遍即可。
- Redis的持久化是可以禁用的,就是说你可以让数据的生命周期只存在于服务器的运行时间里。
- 两种方式的持久化是可以同时存在的,但是当Redis重启时,AOF文件会被优先用于重建数据。
快照(RDB文件)是Redis默认支持的持久化方案,我们可以通过修改redis.conf配置文件设置自动快照方式,rdb形式的默认配置如下:
从上图可以看到Redis的配置文件默认设置了3个保存点,即使Redis如果在每N秒后数据发生了M次改变就保存快照文件。例如下面这个保存点配置表示每60秒,如果数据发生了1000次以上的变动,Redis就会自动保存快照文件:
save 60 1000
我们要知道保存点是可以设置多个的,Redis的redis.conf配置文件就是这么干的,下面对这些保存点做一点小小的阐述。
save 900 1
:900秒内如果发生超过一个key被修改,则发起快照保存。save 300 10
:300秒内如果发生超过10个key被修改,则发起快照保存。save 60 10000
:60秒内如果发生超过10000个key被修改,则发起快照保存。
此方式是将内存中的数据以快照的方式写入到二进制文件中,默认文件名为dump.rdb,如下图所示。
如果你需要备份数据库的话,只须复制一份该文件即可。
快照并不是很可靠。如果你的电脑突然宕机了,或者电源断了,又或者不小心杀掉了进程,那么最新的数据就会丢失。而AOF文件则提供了一种更为可靠的持久化方式。每当Redis接受到会修改数据集的命令时,就会把命令追加到AOF文件里,当你重启Redis时,AOF里的命令会被重新执行一次,重建数据。
我们可以通过修改redis.conf配置文件来开启AOF配置,即把配置项appendonly设为yes,如下图所示。
关于AOF的配置,redis.conf配置文件中有几项配置需要我们重点关注,如下。
appendonly yes
:启用AOF持久化方式。appendfilename appendonly.aof
:AOF文件的名称,默认为appendonly.aof。appendfsync everysec
:每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
保存以上修改之后,需要重启redis才能生效。这时我们/redis/bin目录中发现多了一个appendonly.aof文件,但该文件中是没有任何数据的。
这时,两种持久化方案同时开启了,那么当Redis重启时,AOF文件会被优先用于重建数据。如果大家不信,可使用./redis-cli
命令连接上redis服务,然后再使用keys *
命令查看一下当前redis数据库这里面有多少个key,我们忽然发现一个key都没有了,要知道当前redis数据库是有key的啊!只不过是它们存放到了dump.rdb文件当中了,这足以说明当Redis重启时,AOF文件会被优先用于重建数据。
现在我们使用set命令向当前redis数据库中添加几个key,接着按Ctrl+C
组合键退出该连接,最后使用ll
命令查看一下bin目录,可发现appendonly.aof文件有数据了,如下图所示。
如果要一探appendonly.aof文件中的内容,可使用vim appendonly.aof
命令查看,如下图所示。
Redis的持久化方案,我就讲到这里为止了!
(转)淘淘商城系列——Redis持久化方案的更多相关文章
- (转) 淘淘商城系列——Redis集群的搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72860432 本文我将带领大家如何搭建Redis集群.首先说一下,为何要搭建Redis集群.R ...
- Redis 持久化方案
目录 持久化简介 什么是持久化? Redis 持久化方案 RDB RDB 简介 save 指令 操作与配置 工作原理 bgsave 指令 操作与配置 工作原理 bgsave 配置执行 相关配置 工作原 ...
- (转) 淘淘商城系列——Redis的安装
http://blog.csdn.net/yerenyuan_pku/article/details/72849612 通过上文的学习,我相信大家已经将首页的轮播图展示出来了,接下来我们将进入一个新的 ...
- redis持久化方案(十)
方案分为两种方式: 1>Rdb方式 介绍:redis默认的方式,redis通过快照来将数据持久化到磁盘中 a.设置持久化快照的条件 在redis.conf中修改持久化快照的条件,如下: 比如:如 ...
- redis学习系列——redis持久化
1.写操作的流程 2.RDB快照-redis的第一个持久化策略 第一种是以快照的形式持久化到本地磁盘(RDB文件). 持久化策略是: 1.配置(save N M)在N秒内,redis至少发生M次修改, ...
- (转) 淘淘商城系列——Redis五种数据类型介绍
http://blog.csdn.net/yerenyuan_pku/article/details/72855562 Redis支持五种数据类型:string(字符串),hash(哈希),list( ...
- Redis持久化方案
Redis可以实现数据的持久化存储,即将数据保存到磁盘上. Redis的持久化存储提供两种方式:RDB与AOF.RDB是默认配置.AOF需要手动开启. 默认redis是会以快照的形式将数据持久化到磁盘 ...
- 4.Redis持久化方案
1.1 RDB持久化 RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘. RDB是Redis默认采用的持久化方式. ...
- 配置方案:Redis持久化RDB和AOF
Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...
随机推荐
- osg提前定义几何体设置颜色
注意尽管osg::shape不能够设置颜色,可是osg::shapedrawable能够.
- hdu 1565 方格取数(1)(状态压缩dp)
方格取数(1) Time Limit: 10000/5000 MS (J ...
- Memento - 备忘录模式
定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 案例 比方如今有一个画图系统,我们在Viewer里面画了一些图形,可是在绘 ...
- 浅谈MySQL load data local infile细节 -- 从源码层面
相信大伙对mysql的load data local infile并不陌生,今天来巩固一下这里面隐藏的一些细节,对于想自己动手开发一个mysql客户端有哪些点需要注意的呢? 首先,了解一下流程: 3个 ...
- VS2012 ASP.NET 母版页的创建与使用
在做牛腩新闻公布系统的过程中,须要使用ASP.NET的母版页来抽出全部网页的公共部分,以便更好的复用自己的网页布局和设计. 首先我们来看怎样创建一个新的母版页,例如以下图所看到的: 加入之后,例如以下 ...
- hdu 1711 KMP算法模板题
题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...
- UGUI 实现Button长按效果(RepeatButton)
Tag:加入了一个延迟,在button按下状态一段时间后再開始 repeate using UnityEngine; using UnityEngine.Events; using UnityEngi ...
- 2016/1/6 输出菱形 while语句计算阶乘分数之和
public class LingXing { public static void main(String[] args) { //打印菱形 for (int x=1;x<6;x++){ fo ...
- jar包和动态链接库
1 jar包更接近于动态链接库 java在编译的时候,尽管import了其它的jar包,但是它并没有将其它jar包中的源码拷贝到自己的class文件中,它只是使用了jar包中的名字. 而在执行的时候, ...
- java多线程面试题(来自转载)
在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问 ...