您现在的位置是:首页 >技术杂谈 >Redis学习---03网站首页技术杂谈

Redis学习---03

灰太狼家的小鸭子 2024-06-17 10:43:07
简介Redis学习---03

一、redis事务

(1) Redis单条命令保证原子性,但事务不保证原子性

Redis 事务不是严格意义上的事务,只是用于帮助用户在一个步骤中执行多个命令。单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

(2) Redis没有隔离性的概念,只有发起执行命令的时候才会执行。

(3) 一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

(4) 事务执行命令:

MULTI、EXEC、DISCARD、WATCH 这四个指令构成了 redis 事务处理的基础。

  1. MULTI 用来组装一个事务;
  2. EXEC 用来执行一个事务;
  3. DISCARD 用来取消一个事务;
  4. WATCH 用来监视一些 key,一旦这些 key 在事务执行之前被改变,则取消事务的执行。

(5) 事务异常:

有关事务,大家经常会遇到的是两类错误:(1)语法错误(2)运行时错误,操作错误 1 / 0

  1. 调用 EXEC 之前的错误
  2. 调用 EXEC 之后的错误

单条命令错误,不会影响整体的操作;这就是redis不保证原子性。、

(6):redis==>乐观锁

悲观锁:认为什么时候都会出问题,什么时候都会加锁;

乐观锁:认为什么时候都不会出现问题,所以不会加锁;

watch:加锁;

unwatch:解锁

1) Redis使用watch去监控,一旦有其他的线程修改当前的变量,就会导致,事务操作失败!

2) Java中数据库使用version进行监控!  实现乐观锁!

3) 事务提交失败后,先解锁(unwatch)再获取最新的值,然后进行加锁(watch)。

二、Jredis(在SpringBoot2.0以上的版本弃用了);

(1)依赖:(后补)

Jredis  jredis =new Jredis('ip',端口)

(2) 测试

(3) 开启事务

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。