redis watch使用场景_详解redis中的锁以及使用场景

本文详细介绍了Redis中的分布式锁及其使用场景,包括watch、multi事务和setnx指令的应用。通过实例展示了如何利用Redis实现乐观锁,解决并发修改问题,以及如何避免死锁和超卖问题。此外,还讨论了Redis的watch命令在事务中的作用,以及如何通过watch+multi实现并发控制。
摘要由CSDN通过智能技术生成

分布式锁

什么是分布式锁?

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。

为什么要使用分布式锁?

​ 为了保证共享资源的数据一致性。

什么场景下使用分布式锁?

​ 数据重要且要保证一致性

如何实现分布式锁?

主要介绍使用redis来实现分布式锁

redis事务

redis事务介绍:

​ 1.redis事务可以一次执行多个命令,本质是一组命令的集合。

​ 2.一个事务中的所有命令都会序列化,按顺序串行化的执行而不会被其他命令插入

​ **作用:**一个队列中,一次性、顺序性、排他性的执行一系列命令

multi指令的使用

1. 下面指令演示了一个完整的事物过程,所有指令在exec前不执行,而是缓存在服务器的一个事物队列中

2. 服务器一旦收到exec指令才开始执行事物队列,执行完毕后一次性返回所有结果

3. 因为redis是单线程的,所以不必担心自己在执行队列是被打断,可以保证这样的“原子性”

注:redis事物在遇到指令失败后,后面的指令会继续执行

# Multi 命令用于标记一个事务块的开始事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性( atomic )地执行

> multi(开始一个redis事物)

incr books

incr books

> exec (执行事物)

> discard (丢弃事物)

注:mysql的rollback与redis的discard的区别

mysql回滚为sql全部成功才执行,一条sql失败则全部失败,执行rollback后所有语句造成的影响消失

redis的discard只是结束本次事务,正确命令造成的影响仍然还在.

1)redis如果在一个事务中的命令出现错误,那么所有的命令都不会执行;

2)redis如果在一个事务中出现运行错误,那么正确的命令会被执行。

watch 指令作用

实质:WATCH 只会在数据被其他客户端抢先修改了的情况下通知执行命令的这个客户端(通过 WatchError 异常)但不会阻止其他客户端对数据的修改

1. watch其实就是redis提供的一种乐观锁,可以解决并发修改问题

2. watch会在事物开始前盯住一个或多个关键变量,当服务器收到exec指令要顺序执行缓存中的事物队列时,redis会检查关键变量自watch后是否被修改

3. WATCH 只会在数据被其他客户端抢先修改了的情况下通知执行命令的这个客户端(通过 WatchError 异常)但不会阻止其他客户端对数据的修改

watch+multi实现乐观锁

setnx指令(redis的分布式锁)

1、分布式锁

分布式锁本质是占一个坑,当别的进程也要来占坑时发现已经被占,就会放弃或者稍后重试

占坑一般使用 setnx(set if not exists)指令,只允许一个客户端占坑

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值