Redis 事务 vs 管道,管道是管道,事务而非事务

1、简介

        我们都知道在关系型数据库中,事务的概念为在在一个事务中批量执行的sql语句,要么全部成功,要么全部失败,不可能出现有部分成功的情况,Redis作为非关系型数据库,虽然支持所谓的事务,但是不是我们所说的那样,而对于管道而言就是一个流式命令传输通道,下面我们将详细阐述。

2、Redis 事务
2.1、Redis 事务用途

        一次执行多个命令,本质是一组命令的集合,一个事务中的命令都会序列化,按顺序串行化执行而不会有其他命令穿插执行。

特点:一次性、顺序性、排他性。

2.2、Redis 事务实现

        Redis 事务是通过一个队列来顺序保存本次事务需要执行的命令。通过以下步骤开启、执行事务。

# 1、开启事务
MULTI
# 2、执行事务
EXEC
# 3、放弃事务
DISCARD
2.3、事务失败(命令全部失败)

        Redis 是通过队列来保存待执行命令的,在进入队列之前语法有错(出现编译错误),即入队失败,队列中的所有命令都会失败

2.4、事务失败(部分命令成功)

         Redis 是通过队列来保存待执行命令的,在进入队列之前,语法没有错,即入队成功,但是在exec 的时候出现错误,这个时候队列中的命令对的执行,错的不执行

2.5、添加watch 机制的事务

        当 Redis 事务中的命令存在 watch 的 key ,一旦监控的 key 在此事务外发生变化,当前事务中的所有命令都不会执行。

Redis 事务 vs 管道,管道是管道,事务而非事务_第1张图片

注:Redis 事务没有回滚一说,要是部分成功,造成脏数据,只能手动清除/恢复。

 3、管道

        管道是将多条命令一次性发送到服务端依次执行,不保证原子性,一条命令失败,就会继续执行后面的命令。而事务是一条一条发送,只有在接收exec命令后才会执行。

管道用法:

# 将命令写在redis.txt文件中,可以通过管道命令执行文件中的命令
cat redis.txt | redis-cli -a 密码 --pipe
4、总结

        本文介绍一种redis比较少用的两种功能,都是能够批量执行redis 命令,只不过处理的方式有所差别。帮助大家了解redis有这么一个功能,在遇到对应的场景能够想打有这个功能即可。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

Redis 事务 vs 管道,管道是管道,事务而非事务_第2张图片

你可能感兴趣的:(Redis,java技术,redis,数据库,java)