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

redis 高级应用之二(Redis的持久化 和 消息的[pub/sub]发布和订阅)

2016-06-14 12:31 696 查看
(1)Redis的持久化机制

redis是个支持持久化的内存数据库。也就是说redis要经常把内存中的数据保存到硬盘中来保证持久化。

redis持久化方式有两种:

①.snapshotting(快照),也是默认方式

原理:默认redis是会以快照的形式将数据持久化到磁盘的(一个二进制文件,dump.rdb,这个文件名字可以指定),在配置文件(redis.conf)中的格式是:save N M表示在N秒之内,redis至少发生M次修改则redis抓快照到磁盘。当然我们也可以手动执行save或者bgsave(异步)做快照。

②.aof(Append-only file) 方式

原理:filesnapshotting方法在redis异常死掉时,最近的数据会丢失(丢失数据的多少视你save策略的配置),所以这是它最大的缺点,当业务量很大时,丢失的数据是很多的。Append-only方法可以做到全部数据不丢失,但redis的性能就要差些。AOF就可以做到全程持久化,只需要在配置文件中开启(默认是no),appendonly yes开启AOF之后,redis每执行一个修改数据的命令,都会把它添加到aof文件中,当redis重启时,将会读取AOF文件进行“重放”以恢复到redis关闭前的最后时刻。

AOF文件刷新的方式,有三种,在redis.conf 参考配置参数appendfsync :

appendfsync always每提交一个修改命令都调用fsync刷新到AOF文件,非常非常慢,但也非常安全;

appendfsync everysec每秒钟都调用fsync刷新到AOF文件,很快,但可能会丢失一秒以内的数据;

appendfsync no依靠OS进行刷新,redis不主动刷新AOF,这样最快,但安全性就差。默认并推荐每秒刷新,这样在速度和安全上都做到了兼顾。

(2)消息发布订阅(pub/sub)

消息发布订阅是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。

redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将消息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个 channel,也可以向多个channel发送消息。

请看个demo:创建三个redis client(session),

[1].在session1 和session2中 我用来订阅频道,

session1 中 订阅了blog1

redis 127.0.0.1:6379> subscribe blog1

Reading messages… (press Ctrl-C to quit)

1) “subscribe”

2) “blog1”

3) (integer) 1

session2中订阅了blog1 和blog3 频道:

redis 127.0.0.1:6379> subscribe blog1 blog3

Reading messages… (press Ctrl-C to quit)

1) “subscribe”

2) “blog1”

3) (integer) 1

1) “subscribe”

2) “blog3”

3) (integer) 2

[2].在session3 中用来publish 频道消息

redis 127.0.0.1:6379> publish blog1 merry-xmax

(integer) 2

redis 127.0.0.1:6379> publish blog3 hello

(integer) 1

redis 127.0.0.1:6379>

[3].会发现session3 发布完消息,session1和2 会自动弹出消息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis