以下内容是翻译的官网文档RedLock和分区部分,可以简单了解分布式锁在redis如何实现及其方式

redis分区的方法

redis实现的分布式锁RedLock算法,分布式锁,即在多个master上获取同一个锁

1.in order to get the lock,the client get the current ms time

2.顺序对n个实例获取锁权限(n个都是master),尝试锁时,设置连接超时时间,防止由于实例挂了,导致长时间无法执行操作

3.计算为了获取锁消耗的时间,有且仅有,client获取了超过半数个机器的锁,且获取锁消耗的时间小于锁的有效期,就被认为client获取了锁

4.锁被获取后,其合法的持续时间为:初始设置的有效时间-为了获取锁消耗的时间

5.如果client由于某些原因没有成功获取锁,它会解锁所有master实例(即使有的实例它不可能锁成功)

算法是异步的吗

算法的前提是:多个进程或机器不会同步时钟,导致时间波动,无法计算出准确的获取锁消耗时间,或不同的计算机,时间流逝的速度浮动范围很小

redis分区:

分区的优点

1.形成一个更大的数据库

2.计算能力增强,运用更多的核心数

基本的分区方式

1.范围分区,用一个路由表记录1-1000放哪个实例,1001-2000放哪个实例,缺点也很明显,需要路由表,key的类型很多的时候,需要给不同类型的key做不同的路由

2.hash分区,crc32(key),获取一个很大的数字,用这个数字和redis实例数取模,找到对应实例

3.一致性hash分区

不同的实现

1.client端分区:client直接选取正确的redis

2.代理辅助分区:client请求proxy,proxy forward正确的redis,并返回结果给client

3.查询路由;client随机发给一个redis,redis forward query to right node,也有redis查询路由后,返回正确的redis地址,客户端再去正确的redis取,但是这样会多请求一次redis

分区的不足

1.不提供同时操作多个key

2.redis事务直接不可用

3.分区的粒度是key,如果一个key存了很大的数据量,分区也无可奈何

4.数据处理变得复杂,如果你想备份,需要聚合多个实例

5.扩容或缩容变得复杂,redis集群支持透明的重平衡数据,但是client分区,代理分区却不能透明的支持这个特性(预分区技术能解决)

存储数据?缓存?

如果redis作为数据存储,那么一个key总是需要对应到同一个redis

分布式锁

1.互斥 setNX

2.死锁 timeout

3.可重入 setNx(xx,xx,1) -> setNx(xx,xx,2)

4.订阅subscrible 频道,锁释放时publish消息,redis server和client会建立长连接,订阅时,java需要开发一个listener来处理消息,实现onMessage方法

https://www.jianshu.com/p/de5a69622e49

redis为什么快

redis快的原因,基于内存,不会再操作时进行磁盘I/O,key,val采用dict,类似HashMap,时间复杂度为1,key多为string,没有hash冲突

单线程避免了无谓的cpu上下文切换,无锁

非阻塞IO,epoll多路复用 epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作,只有一个线程来处理这些I/O,key

确实无法利用多cpu的优势,但是一般情况下,cpu不是redis的瓶颈,但是可以用单机启用多个redis来弥补

减少耗时的命令,大对象,大对象还可能导致频繁查询打满带宽

Redis分布式锁及分区的更多相关文章

  1. Redis分布式锁

    Redis分布式锁 分布式锁是许多环境中非常有用的原语,其中不同的进程必须以相互排斥的方式与共享资源一起运行. 有许多图书馆和博客文章描述了如何使用Redis实现DLM(分布式锁管理器),但是每个库都 ...

  2. Redlock(redis分布式锁)原理分析

    Redlock:全名叫做 Redis Distributed Lock;即使用redis实现的分布式锁: 使用场景:多个服务间保证同一时刻同一时间段内同一用户只能有一个请求(防止关键业务出现并发攻击) ...

  3. Redis 分布式锁进化史(解读 + 缺陷分析)

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

  4. 一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)(转)

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

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

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

  6. Redis分布式锁原理

    1. Redis分布式锁原理 1.1. Redisson 现在最流行的redis分布式锁就是Redisson了,来看看它的底层原理就了解redis是如何使用分布式锁的了 1.2. 原理分析 分布式锁要 ...

  7. 探索Redis设计与实现15:Redis分布式锁进化史

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...

  8. Redis 分布式锁进化史

    按:系统架构经过多年演进,现在越来越多的系统采用微服务架构,而说到微服务架构必然牵涉到分布式,以前单体应用加锁是很简单的,但现在分布式系统下加锁就比较难了,我之前曾简单写过一篇文章,关于分布式锁的实现 ...

  9. 掌握Redis分布式锁的正确姿势

    本文中案例都会在上传到git上,请放心浏览 git地址:https://github.com/muxiaonong/Spring-Cloud/tree/master/order-lock 本文会使用到 ...

随机推荐

  1. Salesforce Javascript(一) Promise 浅谈

    本篇参看: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise https ...

  2. SpringBoot框架:配置文件application.properties和application.yml的区别

    一.格式 1.application.properties格式: server.port=8080 server.servlet.context-path=/cn spring.datasource. ...

  3. Maven依赖管理之BOM

    目录 什么是BOM 一个BOM的格式 怎么使用BOM 通过parent引用 通过dependencyManagement引用 怎么查看依赖的某个BOM的具体清单 版本冲突时的一些规则 何为依赖调节 参 ...

  4. 项目里出现两个配置类继承WebMvcConfigurationSupport时,为什么只有一个会生效(源码分析)

    为什么我们的项目里出现两个配置类继承WebMvcConfigurationSupport时,只有一个会生效.我在网上找了半天都是说结果的,没有人分析源码到底是为啥,博主准备讲解一下,希望可以帮到大家! ...

  5. Hibernate4.3基础知识1

    一.Hibernate 开发环境搭建 4.3 1.导包    2.创建hibernate.cfg.xml配置文件   3.创建实体类   4.创建映射文件 实体类名.hbm.xml  配置文件 二.h ...

  6. 概率派VS贝叶斯派

    机器学习中的MLE和MAP两大学派的争论: 频率学派 - Frequentist - Maximum Likelihood Estimation (MLE,最大似然估计): 频率学派认为世界是确定的, ...

  7. 免费开源工作流Smartflow-Sharp v2.0

    @font-face { font-family: 宋体 } @font-face { font-family: "Cambria Math" } @font-face { fon ...

  8. This is Riv3r1and.

    总是要弄个博客来搞的嘛.

  9. notepad快捷使用

    1.快捷键 参考:https://www.php.cn/tool/notepad/428638.html notepad++是经常使用的一款编辑器软件,在编辑特殊文本的时候(html,java...) ...

  10. matlab做gaussian高斯滤波

    原文链接:https://blog.csdn.net/humanking7/article/details/46826105 核心提示 在Matlab中高斯滤波非常方便,主要涉及到下面两个函数: 函数 ...