首页 > 数据库 >Redis分布式锁及分区

Redis分布式锁及分区

时间:2022-12-05 20:56:13浏览次数:65  
标签:实例 Redis 分区 锁及 redis 获取 client key 分布式

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,分区,锁及,redis,获取,client,key,分布式
From: https://www.cnblogs.com/codeLearn/p/16953481.html

相关文章

  • 《Redis实战篇》一、短信登录
    1.1、导入黑马点评项目1.1.1、导入SQL1.1.2、有关当前模型手机或者app端发起请求,请求我们的nginx服务器,nginx基于七层模型走的事HTTP协议,可以实现基于Lua直接绕开tomcat访......
  • Redis的三种模式
    一、Redis模式Redis有三种模式:分别是主从同步/复制、哨兵模式、Cluster主从复制:主从复制是高可用Redis的基础,哨兵和群集都是在主从复制基础上实现高可用的。主从复制主要......
  • Redis的三种模式
    一、redis主从复制1、主从复制-哨兵-集群主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于......
  • Nosql--Redis
    一、Nosql概述NoSQL(NoSQL=NotOnlySQL),意即“不仅仅是SQL”,泛指非关系型的数据库。NoSQL不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据......
  • .NET 6 基于IDistributedCache实现Redis与MemoryCache的缓存帮助类
    本文通过IDistributedCache的接口方法,实现Redis与MemoryCache统一帮助类。只需要在配置文件中简单的配置一下,就可以实现Redis与MemoryCache的切换。目录IDistributedCache......
  • Redis配置、优化以及命令
    一、关系数据库和非关系型数据库1、关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。SQL语句(标准数据查询语言)就是一种......
  • redis底层数据结构总结
    hash:是一维数组加链表 ziplink:压缩列表相当于数组,链表查询速度快,查找慢跳表:是个有序的链表,实现有序数组的二分查找,缺点是占用更多的内存空间。跳表是每隔2个元素选出一......
  • redis5种数据类型使用场景
          ......
  • Redis入门
    参考:小林coding:redisredis官方文档简介redis:用于将各种数据存储在内存中,然后可以将这些存储在内存的数据转存到磁盘中(这就叫持久化)。redis的作用:将数据暂时存储在内存......
  • Redis 利用 incr 和 expire 来限流, 并发导致过期时间失效问题
    当某一个接口需要限流时,可以采用redis的incr来递增,记录访问次数,以及expire来设置失效时间.大概的代码如下:r=redis.Redis.connect()key="linyk3"......