写点什么

Redis 事务学习有感

作者:黎燃
  • 2022 年 7 月 22 日
  • 本文字数:938 字

    阅读完需:约 3 分钟

Redis

远程字典服务器(redis)是由 Salvatore Sanfilippo 编写的键值存储系统。它是一个跨平台的非关系数据库。Redis 是一个用 ANSI C 语言编写的开源键值数据库,符合 BSD 协议,支持网络,可以基于内存、分布式和可选持久性,并提供多种语言的 API。


Hash

Redis hash 是字符串类型的字段和值的映射表。哈希特别适合存储对象。redis 中的每个哈希可以存储 232-1 个键值对(超过 40 亿)。


127.0.0.1:6379>  HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000OK127.0.0.1:6379>  HGETALL runoobkey1) "name"2) "redis tutorial"3) "description"4) "redis basic commands for caching"5) "likes"6) "20"7) "visitors"8) "23000"
复制代码

pub/sub

Redis 发布/订阅(pub/sub)是一种消息通信模式:发送方(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。下图显示了通道 1 与订阅此通道的三个客户端 client2、client5 和 client1 之间的关系:



当通过 publish 命令将新消息发送到通道 1 时,该消息将发送到订阅该消息的三个客户端:


Redis 事务

Redis 事务可以一次执行多个命令,有以下三个重要保证:批处理操作在发送 exec 命令之前放入队列缓存。收到 exec 命令后,输入事务执行。事务中任何命令的执行都失败,其余命令仍在执行。在事务执行期间,其他客户端提交的命令请求不会插入到事务执行命令序列中。交易从开始到执行经历以下三个阶段:启动事务。命令加入团队。执行交易。


redis 127.0.0.1:6379> MULTIOK
redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"QUEUED
redis 127.0.0.1:6379> GET book-nameQUEUED
redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"QUEUED
redis 127.0.0.1:6379> SMEMBERS tagQUEUED
redis 127.0.0.1:6379> EXEC1) OK2) "Mastering C++ in 21 days"3) (integer) 34) 1) "Mastering Series" 2) "C++" 3) "Programming"
复制代码


单个 redis 命令的执行是原子的,但 redis 没有添加任何机制来维护事务的原子性,因此 redis 事务的执行不是原子的。事务可以理解为打包的批处理执行脚本,但批处理指令不是原子化操作。中间指令的故障不会导致前一条指令回滚,也不会导致后续指令不回滚。

发布于: 3 小时前阅读数: 9
用户头像

黎燃

关注

前端工程师 2022.05.06 加入

专注学习分享前端知识。

评论

发布
暂无评论
Redis 事务学习有感_7月月更_黎燃_InfoQ写作社区