Redis网络,协议与事务特性

redis网络层是reactor模型,如下图
在这里插入图片描述
reactor并发处理链接,线程串行处理命令
串行,并发,并行示例如下图:
在这里插入图片描述
redis pipeline
redis pipeline是客户端提供的,而不是服务端提供的,该模式下客户端write之后并不等待respone,而是直接返回,write直接把请求写入缓存,然后直接返回,待服务端处理完请求后,依次全部返回结果。示意图如下

在这里插入图片描述

redis 事务
MULTI开启事务,事务执行之后,单个命令是入队列操作,直到调用EXEC才会一起执行
在这里插入图片描述

在这里插入图片描述
lua脚本
redis中加载了一个lua虚拟机;用来执行lua脚本;redislua脚本的执行是原子性的,当某个脚本正在执行的时候,不会有其他命令或脚本执行
在这里插入图片描述
通过命令EALSHA可以执行加载脚本生成的sha串
在这里插入图片描述
redis的ACID事务特性分析
A 原子性:事务是一个不可分割的单位,事务中的操作要么全部成功,要么全部失败;redis不支持回滚,即使事务队列中某个命令执行期间发生错误,其他命令也会继续执行下去,直到将事务队列中所有命令都执行完毕为止。
C 一致性:事务使数据库从一个一致性状态到另外一个一致性状态;
I 隔离性:事务的操作不被其他用户操作打断,redis命令执行时串行的,redis事务天然具备隔离性
D 持久性:redis只有在aof持久化策略的时候,并且需要在redis.conf中appendfsync=always才具备持久性

redis异步链接
redis协议图

在这里插入图片描述
异步链接
同步链接方案采用阻塞IO实现,优点是代码书写是同步的,业务逻辑没有割裂;缺点是阻塞当前线程,直到结果返回,通常用多线程实现线程池解决效率问题
异步链接方案采用非阻塞IO来实现,优点是没有阻塞当前线程,redis没有返回,依然可以向redis发送命令,缺点是代码是异步的,业务逻辑割裂可以通过协程来解决(skynet)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值