Redis介绍(4)-认识Redis的事务

Redis虽然是"非关系型数据库"但也存在"事务"的概念. 我们可以以MySql数据库的事务特点来进行对比学习

Redis的事务特点

隔离性

与MySql不同, 由于Redis是一个主线程执行命令,是''串行''执行, 自然不用担心多线程所导致的问题

原子性

Redis的原子性仅仅是将一部分命令作为一个整体进行执行(批量执行), 它并没有像MySql那样:如果事务执行的结果与预期不符, 还可以进行''回滚''恢复到原来的状态

一致性

Redis的事务只保证能执行, 但不保证结果是否正确, 所以Redis没有一致性的概念

持久性

Mysql的持久性是指将数据保存到硬盘中进行访问, 而Redis的数据是保存在内存中进行访问, 虽然Redis有持久化保存的概念, 但与Mysql的持久性却不一样

Redis的事务实现的基本原理

Redis服务器中存在一个处理事务的队列, 该队列接收从各个客户端发来的事务, 先将事务放在这个队列中, 当接收到事务开始的命令(EXEC命令)后才按次序进行执行. 事务基本简略结构如下

1.创建事务

用户输入MULTI命令后即可创建一个事务,并将改事务发送到服务器的事务队列中

注意:在这之前还有一个可选的命令"watch". 这个命令可以对命令所操作的Key进行监视, 是否被其他客户端修改过

2. 事务要执行的命令

包含了对Key操作的命令,可以是多个命令, 也可以是一个命令.

3.执行事务

当用户输入EXEC命令后, 服务器开始执行事务

watch命令

watch命令可以看作将所操作的Key加锁了, 这种锁是一种"乐观锁", 出现锁冲突时不会做出过多操作. 它会给监视对象加上一个'版本号', 当这个Key被修改时版本号会增加. 然后输入EXEC命令时会检查这个版本号如果增加了, 就不会执行该事务

相关推荐
爱喝水的鱼丶5 小时前
SAP-ABAP:S/4 HANA ABAP 新特性入门:与 ECC ABAP 的核心差异、架构优势与学习路径规划
运维·数据库·性能优化·sap·abap·hana·开发交流
余槐i12 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹12 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo12 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人12 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台14 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
silvamux_14 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
花间相见15 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见15 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing202316 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip