本文目录一览:
- 1、分布式锁有哪些?
- 2、细说分布式redis
- 3、分布式锁的一些细节问题,值得收藏
在很多场景中 , 我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等 。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行 。
分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性 。
写在前面 现在面试,一般都会聊聊分布式系统这块的东西 。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识 。
细说分布式redis1、redis没有类似Zookeeper的选举机制 。redis的master挂掉以后,redis集群是通过主从切换来保证高可用性的 。redis主从切换有2种方式:手动切换和自动切换 。
2、比如在分布式爬虫系统中,使用 redis 来统一管理 url队列 。分布式锁:在分布式服务中 。可以利用Redis的setnx功能来编写分布式的锁,虽然这个可能不是太常用 。
3、与memcached一样,为了保证效率,数据都是缓存在内存中 。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件 , 并且在此基础上实现了master-slave(主从)同步 。
分布式锁的一些细节问题,值得收藏但是在分布式系统中,这种方式就失效了;由于分布式系统多线程、多进程并且分布在不同机器上,这将使单机并发控制锁策略失效,为了解决这个问题就需要一种跨 JVM 的互斥机制来控制共享资源的访问 。
上面这个分布式锁的实现中 , 大体能够满足了一般的分布式集群竞争锁的需求 。这里说的一般性场景是指集群规模不大,一般在10台机器以内 。
与分布式锁对应的是【单机锁】 , 我们在写多线程程序时,避免同时操作一个共享变量而产生数据问题,通常会使用一把锁来实现【互斥】,其使用范围是在【同一个进程中】 。(同一个进程内存是共享的,以争抢同一段内存 , 来判断是否抢到锁) 。
我们今天就来实现用 Redis 来实现分布式锁,并且要学会怎么使用 。准备使用 Jedis 的 jar 包,在项目中导入 jar 包 。
基于Zookeeper:Zookeeper一般用作配置中心,其实现分布式锁的原理和Redis类似,我们在Zookeeper中创建瞬时节点 , 利用节点不能重复创建的特性来保证排他性 。
推荐阅读
- redis访问控制 访问资源怎么存放到redis中
- redisson过期时间 redis过期绑定事件
- 如何有效地进行项目服务器巡检? 项目服务器巡检怎么做
- mysql怎么调出表 mysql结果填表
- php查询mysql数据库 phpmysql查询后
- 乐观锁 sql 乐观锁重试mysql
- mysql中删除表中的一行数据怎么写 删除行数的语句mysql
- mysql查询判断语句 mysql判断表记录数
- xampp更换mysql