玖叶教程网

前端编程开发入门

一篇文章带你解读redis分布式锁的发展史和正确实现方式

前言

近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Zookeeper,其中基于Redis的分布式锁的使用更加广泛。

但是在工作和网络上看到过各个版本的Redis分布式锁实现,每种实现都有一些不严谨的地方,甚至有可能是错误的实现,包括在代码中,如果不能正确的使用分布式锁,可能造成严重的生产环境故障,本文主要对目前遇到的各种分布式锁以及其缺陷做了一个整理,并对如何选择合适的Redis分布式锁给出建议。

分布式锁之Redis实现(最终版)

内容导读

我们接着上篇继续了解redis实现分布式锁的相关问题,先来解释几个问题 1.为什么不直接使用expire设置超时时间,而将时间的毫秒数其作为value放在redis中?这种方式貌似没什么问题,但是假如在 setnx 后,redis崩溃了, expire 就没有执行,结果就是死锁了。第三个为nxxx, 这个参数我们填的是NX,意思是SET IF NOT EXIST,即当key不存在时,我们进行set操作;若key已经存在,则不做任何操作; 第四个为expx, 这个参数我们传的是PX,意思是我们要给这个key加一个过期的设置,具体时间由第五个参数决定。第五个为time ,与第四个参数相呼应,代表key的过期时间。可以看到上面的set()方法, 通过requestId解决了分布式下不同客户端时间不统一问题,通过超期时间解决了多次getset覆盖问题,通过解锁时判断requestId解决了任何客户端都可以解锁问题。总结 根据上述的分析的两个问题,我们看到了 并发过程中,两行代码之间特别容易出现其它线程乱入影响一致性,所以尽量使用一行原子性的操作来保证锁的实现。

全网最详细解读:Redis主从模式搭建及应用

在高并发服务当中,如果使用单个Redis实例,由于Redis采用单进程单线程处理所有请求的方式,即每次只有一个请求在处理,后面的请求排队,如果前面请求执行时间长了,则会影响后面所有请求。所以可以拓展到多个Redis实例,采用主从机制,一个master和多个slave,master和多个slave包含相同的数据,master负责处理写请求,slave负责读请求。Redis主从同步即是实现这种机制的,master处理完写请求后,同步给多个slave,从而保证数据的最终一致性。

Redis 分布式锁的正确实现原理演化历程与 Redisson 实战总结

Redis 分布式锁使用

Redis实现分布式锁方法详细

在单体应用中,如果我们对共享数据不进行加锁操作,会出现数据一致性问题,我们的解决办法通常是加锁。

在分布式架构中,我们同样会遇到数据共享操作问题,本文章使用Redis来解决分布式架构中的数据一致性问题。

Redis实现秒杀

思路

  • 如果没有库存,则说明活动还未开始

Redis分布式锁,看完不懂你打我

推荐阅读:

Redis为什么又引入了多线程?作者也逃不过“真香定理”?

相信你一定不止一次见过Redis是单线程模式,不过说实话那只是个老版本,这个问题是一位老哥的大厂面试题,跟我分享了一下。想着自己就知道redis6.0以前一直都是单线程,到了6的版本才加入了多线程,还不是很清楚,在多方打听并且搜索之下总结了这篇文章。

一、问题概述

Redis超全语法大全,你值得拥有

Redis应用篇(众星追月):分布式锁

本文将介绍Redis高频使用的一个场景——

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言