IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 分布式锁2--redis实现分布式锁 -> 正文阅读

[大数据]分布式锁2--redis实现分布式锁

一.怎样使用redis实现分布式锁?

最普通的实现方式,如果就是在redis里创建一个key算加锁

SET my:lock 随机值 NX PX 30000,这个命令就ok,这个的NX的意思就是只有key不存在的时候才会设置成功,PX 30000的意思是30秒后锁自动释放。别人创建的时候如果发现已经有了就不能加锁了。

释放锁就是删除key,但是一般可以用lua脚本删除,判断value一样才删除:

if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
    return 0
end

在这里插入图片描述

常见得问题

  1. 假如抢到锁得实例运行一段时候后挂了?
    那么这个时候可能就发生死锁了,所以需要加上一个过期时间(timeout)

  2. 当c1抢到锁,那么此时c2需要做什么?
    需要不断得询问,就是通过IO发送setnx指令,那么这个时候如果同时抢得线程很多,其实是比较浪费cpu得,这个时候可以有一个思路:就是使用redis发布订阅+阻塞队列方式,当然这里逻辑可能比较复杂,个人觉得其实实现和reentrantlock内部实现大致一样.

  3. 如果c1拿到了锁,但是执行时间超过了timeout?
    如果超过timeout,但是还没有执行完,这个时候其他线程又抢到了锁,就有问题,所以这个时候需要再开辟一个线程,去检测并增加这个过期时间.

  4. 为什么要给锁加标识?
    其实是增加了对锁得精准操作,防止误删,确保删除得锁一定是自己加得,确保这个唯一性,一般使用UUID.

  5. redis挂了怎么处理?
    这个首先要说一下redis得几种模式,单机模式就先不说了,redis主要有主从模式和cluster模式,在实际使用过程中会两者结合使用,即主要使用cluster模式,对于每个节点又使用主从复制,而在主从复制中,redis是保证AP得,所以可能会有数据一致性得问题,就是假如某个节点挂了,它得备份节点可能刚好又没有对应得key,这个时候就又出现问题,所以出现了redlock算法.
    在这里插入图片描述

redlock

首先说明redlock并不是在redis中的,而是在客户端得一种算法.

其本质核心是:
? ? ?给定多个redis独立节点,假如有三个,客户端在争抢锁得时候,同时给这三个节点发送请求,当在这些节点中获得锁得数量超过半数时,就可以真正得获取这把锁,那么此时如果某个节点挂点,这个分布锁还在,就不会受到影响.
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:15:00  更:2022-04-06 23:16:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:19:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码