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配置文件就是这么干的,下面对这些保存点做一点小小的阐述。

  1. save 900 1:900秒内如果发生超过一个key被修改,则发起快照保存。
  2. save 300 10:300秒内如果发生超过10个key被修改,则发起快照保存。
  3. save 60 10000:60秒内如果发生超过10000个key被修改,则发起快照保存。

此方式是将内存中的数据以快照的方式写入到二进制文件中,默认文件名为dump.rdb,如下图所示。 

如果你需要备份数据库的话,只须复制一份该文件即可。 
快照并不是很可靠。如果你的电脑突然宕机了,或者电源断了,又或者不小心杀掉了进程,那么最新的数据就会丢失。而AOF文件则提供了一种更为可靠的持久化方式。每当Redis接受到会修改数据集的命令时,就会把命令追加到AOF文件里,当你重启Redis时,AOF里的命令会被重新执行一次,重建数据。 
我们可以通过修改redis.conf配置文件来开启AOF配置,即把配置项appendonly设为yes,如下图所示。 

关于AOF的配置,redis.conf配置文件中有几项配置需要我们重点关注,如下。

  1. appendonly yes:启用AOF持久化方式。
  2. appendfilename appendonly.aof:AOF文件的名称,默认为appendonly.aof。
  3. 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持久化方案的更多相关文章

  1. (转) 淘淘商城系列——Redis集群的搭建

    http://blog.csdn.net/yerenyuan_pku/article/details/72860432 本文我将带领大家如何搭建Redis集群.首先说一下,为何要搭建Redis集群.R ...

  2. Redis 持久化方案

    目录 持久化简介 什么是持久化? Redis 持久化方案 RDB RDB 简介 save 指令 操作与配置 工作原理 bgsave 指令 操作与配置 工作原理 bgsave 配置执行 相关配置 工作原 ...

  3. (转) 淘淘商城系列——Redis的安装

    http://blog.csdn.net/yerenyuan_pku/article/details/72849612 通过上文的学习,我相信大家已经将首页的轮播图展示出来了,接下来我们将进入一个新的 ...

  4. redis持久化方案(十)

    方案分为两种方式: 1>Rdb方式 介绍:redis默认的方式,redis通过快照来将数据持久化到磁盘中 a.设置持久化快照的条件 在redis.conf中修改持久化快照的条件,如下: 比如:如 ...

  5. redis学习系列——redis持久化

    1.写操作的流程 2.RDB快照-redis的第一个持久化策略 第一种是以快照的形式持久化到本地磁盘(RDB文件). 持久化策略是: 1.配置(save N M)在N秒内,redis至少发生M次修改, ...

  6. (转) 淘淘商城系列——Redis五种数据类型介绍

    http://blog.csdn.net/yerenyuan_pku/article/details/72855562 Redis支持五种数据类型:string(字符串),hash(哈希),list( ...

  7. Redis持久化方案

    Redis可以实现数据的持久化存储,即将数据保存到磁盘上. Redis的持久化存储提供两种方式:RDB与AOF.RDB是默认配置.AOF需要手动开启. 默认redis是会以快照的形式将数据持久化到磁盘 ...

  8. 4.Redis持久化方案

    1.1 RDB持久化 RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘. RDB是Redis默认采用的持久化方式. ...

  9. 配置方案:Redis持久化RDB和AOF

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

随机推荐

  1. osg提前定义几何体设置颜色

    注意尽管osg::shape不能够设置颜色,可是osg::shapedrawable能够.

  2. hdu 1565 方格取数(1)(状态压缩dp)

    方格取数(1)                                                                 Time Limit: 10000/5000 MS (J ...

  3. Memento - 备忘录模式

    定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 案例 比方如今有一个画图系统,我们在Viewer里面画了一些图形,可是在绘 ...

  4. 浅谈MySQL load data local infile细节 -- 从源码层面

    相信大伙对mysql的load data local infile并不陌生,今天来巩固一下这里面隐藏的一些细节,对于想自己动手开发一个mysql客户端有哪些点需要注意的呢? 首先,了解一下流程: 3个 ...

  5. VS2012 ASP.NET 母版页的创建与使用

    在做牛腩新闻公布系统的过程中,须要使用ASP.NET的母版页来抽出全部网页的公共部分,以便更好的复用自己的网页布局和设计. 首先我们来看怎样创建一个新的母版页,例如以下图所看到的: 加入之后,例如以下 ...

  6. hdu 1711 KMP算法模板题

    题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...

  7. UGUI 实现Button长按效果(RepeatButton)

    Tag:加入了一个延迟,在button按下状态一段时间后再開始 repeate using UnityEngine; using UnityEngine.Events; using UnityEngi ...

  8. 2016/1/6 输出菱形 while语句计算阶乘分数之和

    public class LingXing { public static void main(String[] args) { //打印菱形 for (int x=1;x<6;x++){ fo ...

  9. jar包和动态链接库

    1 jar包更接近于动态链接库 java在编译的时候,尽管import了其它的jar包,但是它并没有将其它jar包中的源码拷贝到自己的class文件中,它只是使用了jar包中的名字. 而在执行的时候, ...

  10. java多线程面试题(来自转载)

    在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问 ...