码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Redis事物和锁机制


    目录

    Redis事物和锁机制

    1.基本操作

    1.1正确的示范

    1.2现在来看错误的

    2. 事物冲突

    2.1悲观锁

    2.2乐观锁

    2.3redis事物三特性


    本文是本人以前笔记,如果说是在掘金上看到的话没错,还是本人程程呀 的个人主页 - 动态 - 掘金目前只有这一个。如果有哪里不对的话欢迎各位大佬指出问题,本人是一个小白。

    上一篇文章链接为:springboot整合Redis_程程呀是小白的博客-CSDN博客,本篇是连接springboot整合Redis_程程呀是小白的博客-CSDN博客。

    如果是springboot的话请看springboot创建项目_程程呀是小白的博客-CSDN博客_springboot创建项目创建项目 ,这个是从头开始的还没有学完springboot,一起学习呀!!!!

     

    Redis事物和锁机制

    1.基本操作

    输入multi命令开始,输入的命令依次进入命令队列中,但不会执行,直到输入exec后redis会将之前的命令队列中的命令依次执行。组队的过程通过discard来放弃组队。

    1.1正确的示范

    1. 127.0.0.1:6379[2]> multi
    2. OK
    3. 127.0.0.1:6379[2](TX)> set key1 value1
    4. QUEUED
    5. 127.0.0.1:6379[2](TX)> set key value2
    6. QUEUED
    7. 127.0.0.1:6379[2](TX)> exec
    8. 1) OK
    9. 2) OK
    10. 127.0.0.1:6379[2]> multi
    11. OK
    12. 127.0.0.1:6379[2](TX)> set v1 s1
    13. QUEUED
    14. 127.0.0.1:6379[2](TX)> set v2 s2
    15. QUEUED
    16. 127.0.0.1:6379[2](TX)> discard
    17. OK
    18. 127.0.0.1:6379[2]> keys *
    19. 1) "key1"
    20. 2) "key"

    1.2现在来看错误的

    错误的有两种情况

    1. . 组队过程中某个命令出现了报告错误,执行时整个的所有队列都会被消失,代码如下

    1. 127.0.0.1:6379[2]> multi
    2. OK
    3. 127.0.0.1:6379[2](TX)> set b1 v1
    4. QUEUED
    5. 127.0.0.1:6379[2](TX)> set b2 v2
    6. QUEUED
    7. 127.0.0.1:6379[2](TX)> set b3
    8. (error) ERR wrong number of arguments for 'set' command
    9. 127.0.0.1:6379[2](TX)> exec
    10. (error) EXECABORT Transaction discarded because of previous errors.

    (2). 如果执行阶段某个命令报出错误,则只有报错的命令不会被执行,而其他的命令都

    1. 127.0.0.1:6379[2]> multi
    2. OK
    3. 127.0.0.1:6379[2](TX)> set c1 v1
    4. QUEUED
    5. 127.0.0.1:6379[2](TX)> incr c1
    6. QUEUED
    7. 127.0.0.1:6379[2](TX)> set c2 v2
    8. QUEUED
    9. 127.0.0.1:6379[2](TX)> exec
    10. 1) OK
    11. 2) (error) ERR value is not an integer or out of range
    12. 3) OK

    2. 事物冲突

    2.1悲观锁

    悲观锁,顾名思义就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次拿数据都会上锁,这样别人想拿这个数据就会block直到它拿到锁。

    2.2乐观锁

    乐关锁,就是很乐观,每次拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据可以受版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis就是利用check-and set机制实现事物的。

    在执行multi之前,先执行watch key1[key2],可以监视一个(多个)key,如果在事物执行之前这个(或这些)key被其他命令所改动,那么事物将被打断

    1. 第一个
    2. 127.0.0.1:6379[2]> set balance 100
    3. OK
    4. 127.0.0.1:6379[2]> keys *
    5. 1) "balance"
    6. 127.0.0.1:6379[2]> watch balance
    7. OK
    8. 127.0.0.1:6379[2]> multi
    9. OK
    10. 127.0.0.1:6379[2](TX)> incrby balance 10
    11. QUEUED
    12. 127.0.0.1:6379[2](TX)> exec
    13. 1) (integer) 110
    1. 第二个
    2. 127.0.0.1:6379[2]> watch balance
    3. OK
    4. 127.0.0.1:6379[2]> multi
    5. OK
    6. 127.0.0.1:6379[2](TX)> incrby balance 20
    7. QUEUED
    8. 127.0.0.1:6379[2](TX)> exec
    9. (nil)

    2.3redis事物三特性

    1. 单独的隔离操作

    2. 没有隔离级别的概念

    3. 不保证原子性

     

    本文是本人以前笔记,如果说是在掘金上看到的话没错,还是本人程程呀 的个人主页 - 动态 - 掘金目前只有这一个。如果有哪里不对的话欢迎各位大佬指出问题,本人是一个小白。

    上一篇文章链接为:springboot整合Redis_程程呀是小白的博客-CSDN博客,本篇是连接springboot整合Redis_程程呀是小白的博客-CSDN博客。

    如果是springboot的话请看springboot创建项目_程程呀是小白的博客-CSDN博客_springboot创建项目创建项目 ,这个是从头开始的还没有学完springboot,一起学习呀!!!!

     

  • 相关阅读:
    SQL通用语法与DDL操作
    网页制作课作业简单的学生网页作业源码 基于html css javascript jquery仿慕课网教学培训网站设计实例 企业网站制作
    【C#】async和await
    字节有『芯』在跳动,了吗?YOLOv7目标检测实现:确实挺好;伯克利博士找工作的6个月;软件工程资源大列表 | ShowMeAI资讯日报
    数据结构与算法之美读书笔记7
    C++:AVL树
    图像拼接后丢失数据,转tiff报错rasterfile failed: an unknown
    数据库系列:MySQL索引优化总结(综合版)
    【STM32学习】工程模板&跑马灯
    全面掌握const的用法《一》
  • 原文地址:https://blog.csdn.net/qq_57785602/article/details/126378081
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号