您的位置:首页 > 数据库 > Redis

关于PHP使用redis服务的一些基本使用心得

2017-09-28 11:13 429 查看

一.关于redis的一些基本使用(以下例子是在Yii框架中的使用)

1.如何在redis中创建键

$redis = Yii::app()->redis;

$redis->set('key1',1111);

2.如何获取redis的键值

$redis->get('key1);

3.如何删除一个键

$redis->del('key3');

4.如何给键设定有效时间(以下例子是给键名为key3的键设置有效时间为5秒)

$redis->expire('key3',5);

二.关于redis的持久化的两种方式简单介绍

考虑以后再项目中要使用redis服务,于是开始着手研究了一下redis数据库的相关知识,这其中就有一项比较重要的,关于redis数据持久化的问题
(这个问题的考虑是针对redis宕机或者一些突发情况导致的服务重启时,数据全部丢失)要避免这问题就要就需要开启redis的持久化功能,将数据保存到、磁盘里,当redis重启
时,就能从磁盘中恢复数据。
这里关于redis的持久化两种方式,我们在这里一一进行解释和分析它们的优缺点和使用场景:
1.首先关于这两种方式之间的区别
1.1RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘中,实际操作过程是一个fork一个子进程,先是将数据集写入临时文件,写入成功后,再替换之前的文件,用的是二进制压缩存储。如下图1所示:



图1

AOF持久化以日志的形式记录服务器所处理的每一个写,删除操作,查询操作不会记录,以文本的方式记录,再替换之前的文件,用二进制压缩存储,如图2所示:



图2


2.关于它们之间的优缺点,
2.1首先我们介绍一下RDB有哪些优势:
1).一旦采用此方式,那么整个redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每小时归档一次最近二十四小时的数据,同时还要每天归档一次近三十天的数据,通过这样的备份,一旦系统出现灾难性故障,我们可以非常轻松的进行恢复。
2).对于灾难而言,RDB是非常不错的选择,因为我们可以非常轻松的将一个独立的文件压缩后再转移到其他存储介质上。
3).性能最大化,对于redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了
4)相比于AOF机制,如果数据集很大,RDB的启动效率会更高/

2.2再谈一下RDB有哪些劣势呢:
1).如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。
2).由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务停止几百毫秒,甚至是1秒钟。

2.3介绍完RDB的优缺点之后,我们再来谈一下AOF的优缺点

1).该机制可以带来更多的数据安全性,即数据的持久化。redis中提供了3种同步策略,即每秒同步,没修改同步和不同步。事实上,每秒同步也是异步完成的,其效率是非常高的,所差的是一旦系统出现宕机现象,那么一秒钟之内的修改的数据将全部丢失,而每次修改同步可以视为同步持久化,即每次发生的数据变化都会被记录写入到磁盘中,可以预见,这种方式在效率上是最低的,至于无同步,我们在这里就不做解释了。

2).由于该机制是对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现了宕机现象,也不会破坏日志文件已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题.

3).如果日志过大,redis可以自动启动rewrite机制。即redis以append模式不断的将修改数据写入到老的磁盘文件中,同时redis还会通过创建一个新的文件用于记录此间有哪些修改命令被执行.因此在进行rewrite切换时可以更好的保证数据安全性。

4).AOF包含一个格式清晰,易于理解的日志文件用于记录所有修改操作。事实上,我们可以通过该文件完成数据的重建。

2.4既然AOF有这些优点,接下来我们再看看它又有哪些缺点:

1).对于相同量的数据而言,AOF文件通常大于RDB文件。RDB在恢复大数据集时的速度比AOF的恢复速度要快。

2).根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略和RDB一样的高效。

二者选择的标准,就是看系统愿意牺牲一些性能,换取更高的缓存一致性(AOF)还是愿意写操作频繁的时候,不启用备份来换取更高的性能,

待手动save的时候,再做备份(RDB).RDB这个就更有些eventully consistent 的意思了.

2.5下面我们在介绍一下关于这两种持久化的常用配置

1.RDB持久化配置:

redis会将数据集的快照dump到dump.rdb文件中。此外,我们还可以通过配置文件来修改redis服务器dump快照的频率,在打开6397.conf文件之后,我们搜索save,可以看到下面的配置信息:

save 900 1         #在900秒(15分钟)之后,如果至少有一个key发生变化,则dump内存快照。

save 300 10       #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。

save 60 10000   #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

#注:上面三个选项要是都被注释了,rdb快照持久化存储就被屏蔽了:

stop-writes-on-bgsave-error yes # 后台存储错误停止写。

rdbcompression yes                    # 使用LZF压缩rdb文件。

rdbchecksum yes                        # 存储和加载rdb文件时校验。

dbfilename dump.rdb                  # 设置rdb文件名.

dir ./                                             #设置工作目录,rdb文件会写入该目录。/var/rdb可以写绝对地址

2.AOF持久化配置:

在redis的配置文件中存在三种同步方式,它们分别是:

appendfsync always     #每次有数据修改发生时都会写入AOF文件。

appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。

appendfsync no            # 从不同步。高效但是数据不会被持久化。

appendfsync yes          # 是否仅要日志yes(开启)|no(关闭)

appendffilename "appendonly.aof"  #aof文件存放的位置/var/aof 可以写绝对地址

no-appendsync-on-rewrite yes # 正在导出rdb快照的过程中,要不要停止同步aof yes (停止) | no (不停止)

auto-aof-rewrite-percentage 100 # aof 文件大小比起上次重写时的大小,增长率100%时重写

auto-aof-rewrite-min-size 64mb # aof文件,至少超过64M时重写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php redis 基本使用