返回顶部
首页 > 资讯 > 数据库 >redis中分布式锁是不是乐观锁
  • 671
分享到

redis中分布式锁是不是乐观锁

2024-04-02 19:04:59 671人浏览 安东尼
摘要

小编给大家分享一下Redis中分布式锁是不是乐观锁,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧! 简单来说,Redis使用乐观锁,相对于悲观锁,在实现中更加简单,在某些场景中的性能也

小编给大家分享一下Redis分布式是不是乐观锁,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

 简单来说,Redis使用乐观锁,相对于悲观锁,在实现中更加简单,在某些场景中的性能也更好。Redis作为一个轻量级的、快速的缓存引擎,而不是一个全功能的关系型数据库,既没有使用悲观锁的必要,也难以承受使用悲观锁的成本。

乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候回判断一下再次期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

乐观锁策略:提交版本必须大于记录当前版本才能执行更新

Redis对于事务只提供了非常有限的支持,其实更多地是试图绕过问题。

首先,Redis对于同一事务中的一组操作,而不是立即执行,而是放入一个queue中,当执行到EXEC时,再一起执行。事务执行是全局独占的,也就是同一时间只有一个事务被执行,中途不能被其它事务打断。Redis用这种最简单的、也是性能最差的方式避免了race condition。

其次,在Redis的事务中,如果有一个或多个操作失败,其它操作仍然会成功,也就是说它根本没有回滚机制。

这种方式会带来很多严重的问题,其中之一是,无法先读取某个数值后再进行依赖这个值的操作,因为放在一个事务里会被在同一个瞬间执行,不放在同一个事务里又会导致race condition。解决方法是使用WATCH,它会监视一个或多个变量,如果变量的值在调用WATCH以后和事务提交之前被别的事务修改过了,整个事务都会失败。这类似于操作系统中的CAS(Compare and Set)。我不知道WATCH具体是怎么实现的,但是我推测它监控了指定变量的版本号。

即使有了WATCH,Redis的事务也是受到严重限制的。第一,它没有实现读数据时的一致性,因为WATCH对于读操作不起作用。第二,它不支持回滚。第三,在对同一变量存在大量并发写操作时,性能会非常差,因为每次提交事务时,WATCH监控的变量都已经被修改了,导致事务将多次提交失败。但是,Redis本来就是一个KV类型的缓存引擎,要处理的是大量读少量写的场景,对一致性也没有要求。

看完了这篇文章,相信你对redis中分布式锁是不是乐观锁有了一定的了解,想了解更多相关知识,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: redis中分布式锁是不是乐观锁

本文链接: https://lsjlt.com/news/53349.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • redis中分布式锁是不是乐观锁
    小编给大家分享一下redis中分布式锁是不是乐观锁,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧! 简单来说,Redis使用乐观锁,相对于悲观锁,在实现中更加简单,在某些场景中的性能也...
    99+
    2024-04-02
  • 悲观锁和乐观锁是什么
    悲观锁和乐观锁是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。乐观锁( Optimistic Locking )乐观锁( ...
    99+
    2024-04-02
  • 什么是悲观锁和乐观锁
    什么是悲观锁和乐观锁?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 悲观锁(Pessimistic Lock), 顾...
    99+
    2024-04-02
  • MySQL中乐观锁和悲观锁是什么
    这篇文章给大家分享的是有关MySQL中乐观锁和悲观锁是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。数据库管理系统中并发控制的任务是确保在多个事务同时存取数据库中同一数据不破...
    99+
    2024-04-02
  • 什么是乐观锁、悲观锁和MVCC
    本篇内容主要讲解“什么是乐观锁、悲观锁和MVCC”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是乐观锁、悲观锁和MVCC”吧!在数据库的实际使用过程中,我们...
    99+
    2024-04-02
  • MYSQL中悲观锁和乐观锁的作用是什么
    这篇文章给大家介绍MYSQL中悲观锁和乐观锁的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  悲观锁(Pessimistic Lock)  悲观锁(Pessimistic ...
    99+
    2024-04-02
  • Java悲观锁和乐观锁机制是什么
    本篇内容主要讲解“Java悲观锁和乐观锁机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java悲观锁和乐观锁机制是什么”吧!1、锁机制简介并发编程中一个最关键的问题,多线程并发处理同一...
    99+
    2023-06-02
  • redis乐观锁实现的方式有哪些
    在Redis中实现乐观锁的方式有以下几种:1. 使用WATCH命令:使用WATCH命令可以监视一个或多个键,当这些键的值发生变化时,...
    99+
    2023-08-12
    redis
  • 分布式锁redis实现方式是什么
    分布式锁的Redis实现方式有两种:基于SETNX命令和基于RedLock算法。1. 基于SETNX命令:使用Redis的SETNX...
    99+
    2023-09-12
    redis
  • Redis分布式锁进化史是什么
    这篇文章主要介绍“Redis分布式锁进化史是什么”,在日常操作中,相信很多人在Redis分布式锁进化史是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis分布式锁进化史是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • Redis分布式锁是如何实现的
    Redis分布式锁是通过在Redis中使用SETNX命令来实现的。SETNX命令用于将一个键的值设置为指定的字符串,只有当键不存在时...
    99+
    2024-04-02
  • redis分布式锁与zk分布式锁的对比分析
    目录Redis实现分布式锁原理能实现的锁类型注意事项 zk实现分布式锁原理能实现的锁类型两种锁的对比在分布式环境下,传统的jvm级别的锁会失效,那么分布式锁就是非常有必要的一个技术,一般我们可以通过redis,...
    99+
    2022-11-18
    redis分布式锁 分布式锁 zk分布式锁
  • mysql中的乐观锁是怎么实现的
    mysql中的乐观锁是怎么实现的?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。乐观锁( Optimistic Locking ...
    99+
    2024-04-02
  • Redis分布式锁的优缺点是什么
    Redis分布式锁的优点包括: 高性能:Redis作为内存数据库,具有高性能的特点,能够快速地处理锁的请求。 可靠性:Red...
    99+
    2024-05-07
    Redis
  • Redis——》实现分布式锁
    推荐链接:     总结——》【Java】     总结——》【Mysql】     总结——》【Redis】     总结——》【Kafka】     总结——》【Spring】     总结—...
    99+
    2023-09-03
    redis 分布式 过期 lua
  • Redis实现分布式锁
    单体锁存在的问题 在单体应用中,如果我们对共享数据不进行加锁操作,多线程操作共享数据时会出现数据一致性问题。 (下述实例是一个简单的下单问题:从redis中获取库存,检查库存是否够,>0才允许下单) 我们的解决办法通常是加锁。如下加单体锁...
    99+
    2023-08-16
    分布式 java jvm
  • 分布式锁要选择Zookeeper而不是Redis的原因是什么
    这篇文章给大家分享的是有关分布式锁要选择Zookeeper而不是Redis的原因是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在分布式的应用中,为了防止单点故障,保障高可用,通常会采用主从结构,当主节点挂掉...
    99+
    2023-06-15
  • Redis分布式锁之红锁的实现
    目录一、问题二、办法三、原理四、实战一、问题 分布式锁,当我们请求一个分布式锁的时候,成功了,但是这时候slave还没有复制我们的锁,masterDown了,我们的应用继续请求锁的时候,会从继任了master的原slav...
    99+
    2022-08-09
    Redis红锁
  • 【MySQl】MySQl中的乐观锁是怎么实现的
    文章目录 前言一、乐观锁二、如何实现乐观锁呢,一般来说有以下2种方式2.1、使用数据版本(Version)记录机制实现2.2、乐观锁定的第二种实现方式和第一种差不多 前言 mysql中...
    99+
    2023-09-20
    mysql oracle 数据库
  • 分布式锁的原理及Redis怎么实现分布式锁
    这篇文章主要介绍“分布式锁的原理及Redis怎么实现分布式锁”,在日常操作中,相信很多人在分布式锁的原理及Redis怎么实现分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2023-02-02
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作