互联网常识:讲解Redis发布订阅演示、事务演示、持久化

导读 跟大家讲解下有关讲解Redis发布订阅演示、事务演示、持久化,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说讲解Redis发...

跟大家讲解下有关讲解Redis发布订阅演示、事务演示、持久化,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说讲解Redis发布订阅演示、事务演示、持久化,小编也收集到了有关讲解Redis发布订阅演示、事务演示、持久化的相关资料,希望大家看到了会喜欢。

推荐(免费):redis教程

文章目录

一、Redis发布订阅介绍二、Redis发布订阅演示三、Redis中的事务四、转账功能-Redis事务演示五、转账功能升级版-watch六、事务的错误处理业务逻辑错误语法错误七、Redis持久化RDB持久化AOF持久化

一、Redis发布订阅介绍

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。

应用场景:

构建实时消息系统比如普通的即时聊天群聊等功能。②在一个博客网站中有n多个粉丝订阅了你当你发布新文章就可以推送消息给粉丝们。③微信公众号模式

二、Redis发布订阅演示

发布订阅语法 订阅频道:

subscribe channel1 [channel2 ...]     订阅给定的一个或多个频道的信息

psubscribe pattern1 [pattern2 ...]    订阅一个或多个符合给定模式的频道。 发布频道:

publish channel message           将信息发送到指定的频道。 退订频道:

unsubscribe channel1 [ channel2 ...]    指退订给定的频道。

punsubscribe pattern1 [pattern2 ...]   退订所有给定模式的频道。

三、Redis中的事务

Redis 事务可以一次执行多个命令(按顺序地串行化执行执行中不会被其它命令插入不许加塞)

事务应用场景:

商品秒杀转账

两个特点:

Redis会将一个事务中的所有命令序列化然后按顺序执行(任意命令执行失败其余的命令依然被执行)执行中不会被其它命令插入不许出现加赛行为。

一个事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务。

事务相关命令:multi      标记一个事务块的开始。exec      执行所有事务块内的命令。discard     取消事务放弃执行事务块内的所有命令。watch key    监视一个(或多个)key如果在事务执行之前这个(或这些)key被其他命令所改动那么事务将被打断。unwatch     取消watch命令对所有key的监视。

四、转账功能-Redis事务演示

需求:转帐功能A向B帐号转帐50元。

转账前A有80元B有10元。转账后A有30元B有60元。

本例先以multi开始一个事务然后将多个命令入队到事务中最后由 exec命令触发事务。

输入Multi命令开始输入的命令都会依次进入命令队列中但不会执行。直到输入Exec后Redis会将之前的命令队列中的命令依次执行。 执行exec前如果发现添加的命令有问题可以使用discard命令放弃队列运行类似于MySQL中的回滚操作。

五、转账功能升级版-watch

需求:某一账户在一事务内进行操作在提交事务前另一个进程对该账户进行操作。

上文中的转账是不安全的在执行中如果有其他命令对账户a或者b的操作可能会出现幻读;解决办法是添加watch命令可以对账户进行watch监视一旦在事务执行中出现了其他命令对账户a或b操作程序直接报错回滚。

执行了watch命令后如果execdiscard命令先被执行就不需要再执行unwatch来取消对key的监视了因为exec或discard命令会自动取消监视。

六、事务的错误处理

业务逻辑错误

发生业务逻辑错误:只有报错的命令不会被执行而其它的命令都会执行不会回滚。

语法错误

发生语法错误:执行时整个的所有队列都会被取消。

七、Redis持久化

数据存放在内存:高效、但断电内存数据会丢失。 数据存放在硬盘:读写速度慢于内存、但断电数据不会丢失。

RDB持久化

RDB是redis的默认持久化机制。RDB相当于照快照保存的是数据的一种状态。(几十G的数据可以保存为几KB的快照)

快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中默认的文件名为dump.rdb(存在redis.conf文件中)。

优点:

快照保存数据极快、还原数据极快适用于灾难备份

缺点:

小内存机器不适合使用RDB机制符合要求就会照快照占内存。

AOF持久化

由于快照方式是在一定间隔时间做一次的所以如果redis 意外宕机就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话可以采用AOF(Append-Only File)持久化方式。

appendonly yes 命令可以启用 AOF 持久化方式。

有三种方式如下(默认是:每秒 fsync 一次)

appendfsync always     收到写命令就立即写入磁盘最慢但是保证完全的持久化appendfsync everysec    每秒钟写入磁盘一次在性能和持久化方面做了很好的折中appendfsync no       完全依赖OS性能最好但持久化没保证

优点: AOF比快照方式有更好的持久化性是由于在使用AOF持久化方式时:redis 会将每一个收到的写命令都通过write 函数追加到文件中(默认是appendonly.aof)。当redis 重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

缺点:

AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大占硬盘 。例如我们调用 incr test命令 100 次文件中必须保存全部的 100 条命令其实有 99 条都是多余的。

以上就是讲解Redis发布订阅演示、事务演示、持久化的详细内容!

来源:php中文网

免责声明:本文由用户上传,如有侵权请联系删除!

猜你喜欢

最新文章