redis 高级应用之二(Redis的持久化 和 消息的[pub/sub]发布和订阅)
2014-12-24 20:09
831 查看
(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是个支持持久化的内存数据库。也就是说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 高级应用之二(Redis的持久化 和 消息的[pub/sub]发布和订阅)
- Redis pub/sub机制在实际运用场景的缺陷&&模拟JMS消息发布订阅的持久化特性
- Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用
- redis-高级(事务,频道发布,消息订阅,持久化,主从复制,运维监控....)
- NoSQL数据库之Redis数据库管理六(Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存)
- Redis高级实用特性(持久化机制、发布订阅消息、虚拟内存的使用)
- NoSQL之Redis高级应用--发布及订阅消息
- 07_NoSQL数据库之Redis数据库:Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
- NoSQL数据库之Redis数据库管理六 (Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存)
- Redis 笔记与总结6 Redis 高级应用之 事务处理、持久化操作、pub_sub、虚拟内存
- linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能 标签: hiredishiredis异步APIhiredis事件处理redis消息订阅发布redis c接口 2016-
- 【Redis】Java实现redis消息订阅/发布(PubSub)
- Redis发布及订阅消息(pub/sub)
- redis(五) 高级应用(事务处理,持久化操作,pub_sub、虚拟内存)
- 07_NoSQL数据库之Redis数据库:Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
- linux下使用hiredis异步API实现sub/pub消息订阅和发布的功能
- redis 消息队列(发布订阅)、持久化(RDB、AOF)、集群(cluster)
- Redis源码分析(三十)--- pubsub发布订阅模式
- 基于WCF和MSMQ构建发布/订阅消息总线(Pub/Sub Message Bus) 推荐
- 基于WCF和MSMQ构建发布/订阅消息总线(Pub/Sub Message Bus)