Redis实现事物以及锁的方法

 更新时间:2022年07月27日 09:36:42   作者:我是一棵卷心菜  
本文主要介绍了Redis实现事物以及锁的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、什么是Redis事物

Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

作用:串联多个命令防止别的命令插队。

二、Redis 事务命令

下表列出了 redis 事务的相关命令:

注意:加入事务的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行

三、命令行演示

演示事物的开始、执行

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set name cabbage
QUEUED
127.0.0.1:6379(TX)> set age 20
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) OK
127.0.0.1:6379> keys * 
1) "name"
2) "age"

演示事物的开始与取消:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> set name cabbage
QUEUED
127.0.0.1:6379(TX)> set age 20
QUEUED
127.0.0.1:6379(TX)> DISCARD
OK
127.0.0.1:6379> keys *
(empty array)

演示事物的watch:

四、事物注意事项

指命令书写格式有误时,整体事务中所有命令均不会执行,包括那些语法正确的命令

指命令格式正确,但是无法正确的执行时,能够正确运行的命令会执行,运行错误的命令不会被执行且对应的数据不会实现回滚。

五、事务三特性

单独的隔离操作
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

没有隔离级别的概念
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行

不保证原子性
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

六、分布式锁

业务分析:虽然redis是单线程的,但是多个客户端对同一数据同时进行操作时,如何避免不被同时修改?

解决方案:使用 expire 为锁key添加时间限定,到时不释放,则放弃锁

命令行演示:

127.0.0.1:6379> set name cabbage
OK
127.0.0.1:6379> setnx lock_time 1
(integer) 1
127.0.0.1:6379> EXPIRE lock_time 20
(integer) 1
127.0.0.1:6379> get name 
"cabbage"

通过这种方式,即使某个客户端由于某种原因没有手动释放锁,也不会造成死锁。因为设置了锁lock_time的有效时间为20秒,当20秒过后,其它的客户端就可以拿到锁、实施业务操作、释放锁了。

到此这篇关于Redis实现事物以及锁的方法的文章就介绍到这了,更多相关Redis 事物及锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • redis如何后台启动的方法

    redis如何后台启动的方法

    这篇文章主要介绍了redis如何后台启动的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Redis高性能的原因及说明

    Redis高性能的原因及说明

    这篇文章主要介绍了Redis高性能的原因及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • redis setIfAbsent返回null的问题及解决

    redis setIfAbsent返回null的问题及解决

    这篇文章主要介绍了redis setIfAbsent返回null的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Redis的11种Web应用场景简介

    Redis的11种Web应用场景简介

    一些Redis原语命令比如LPUSH、LTRIM和 LREM等等能够用来帮助开发者完成需要的任务——这些任务在传统的数据库存储中非常困难或缓慢。这是一篇非常有用并且实际的文章。那么要如何在你的框架中完成这些任务呢?
    2015-09-09
  • CentOS系统中Redis数据库的安装配置指南

    CentOS系统中Redis数据库的安装配置指南

    Redis是一个基于主存存储的数据库,性能很强,这里我们就来看一下CentOS系统中Redis数据库的安装配置指南,包括将Redis作为系统服务运行的技巧等,需要的朋友可以参考下
    2016-06-06
  • SpringSession通过Redis统计在线用户数量的实现代码

    SpringSession通过Redis统计在线用户数量的实现代码

    这篇文章主要介绍了SpringSession通过Redis统计在线用户数量,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Redis 哈希Hash底层数据结构详解

    Redis 哈希Hash底层数据结构详解

    这篇文章主要介绍了Redis 哈希Hash底层数据结构详解的相关资料,需要的朋友可以参考下
    2022-08-08
  • 浅谈Redis变慢的原因及排查方法

    浅谈Redis变慢的原因及排查方法

    本文主要介绍了浅谈Redis变慢的原因及排查方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • redis发布订阅_动力节点Java学院整理

    redis发布订阅_动力节点Java学院整理

    这篇文章主要介绍了redis发布订阅,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Windows系统安装Redis的详细图文教程

    Windows系统安装Redis的详细图文教程

    但有时候想在windows下折腾下Redis,那么就可以参考下面的方法了,虽然脚本之家小编以前整理了一些,发现这篇做的比较详细,下载也给出来了
    2018-08-08

最新评论