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 事物及锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows中redis设置密码的两种方法

    Windows中redis设置密码的两种方法

    之前写的一个项目,有项目代码,有数据库,但是本地没redis,没法跑此项目,故思考在本地安装一个redis做登录session存储,所以开始动手实践,下面这篇文章主要给大家介绍了关于Windows中redis设置密码的两种方法,需要的朋友可以参考下
    2023-04-04
  • Redis 缓存问题及解决

    Redis 缓存问题及解决

    网上收集的一些经典特效,这里因为篇幅较长,不加整理了,想运行的代码的朋友可以点击textarea中,全选复制即可。
    2010-07-07
  • redis bitmap数据结构之java对等操作详解

    redis bitmap数据结构之java对等操作详解

    bitmap是以其高性能出名。其基本原理是一位存储一个标识,其他衍生知道咱就不说了,而redis就是以这种原生格式存储的,这篇文章主要介绍了redis bitmap数据结构之java对等操作,需要的朋友可以参考下
    2022-10-10
  • Redis3.2.11在centos9安装与卸载过程详解

    Redis3.2.11在centos9安装与卸载过程详解

    这篇文章主要介绍了Redis3.2.11在centos9安装与卸载过程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Redis如何使用乐观锁(CAS)保证数据一致性

    Redis如何使用乐观锁(CAS)保证数据一致性

    本文主要介绍了Redis如何使用乐观锁(CAS)保证数据一致性,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • jedis配置含义详解

    jedis配置含义详解

    这篇文章主要介绍了jedis配置含义详解的相关资料,需要的朋友可以参考下
    2020-04-04
  • Redis Scan命令的基本使用方法

    Redis Scan命令的基本使用方法

    这篇文章主要给大家介绍了关于Redis中Scan命令的基本使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • redis 用scan指令 代替keys指令(详解)

    redis 用scan指令 代替keys指令(详解)

    下面小编就为大家分享一篇redis 用scan指令 代替keys指令详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • springmvc集成使用redis过程

    springmvc集成使用redis过程

    这篇文章主要介绍了springmvc集成使用redis过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 使用RediSearch实现在Redis中全文检索

    使用RediSearch实现在Redis中全文检索

    RediSearch 是 Redis 的一个插件,它为 Redis 数据库添加了全文搜索和查询功能,使开发人员能够在 Redis 中高效地执行全文检索操作,下面我们就来看看是具体如何使用的吧
    2023-08-08

最新评论