0X00 测试环境 CentOS 6.6 + Redis 3.2.10 + PHP 7.0.7(+ phpredis 4.1.0) 0X01 什么是分布式锁 redis 官网上对分布式锁的描述(https://redis.io/topics/distlock)是: Distributed locks ...
分类:
其他好文 时间:
2018-07-21 19:17:33
阅读次数:
290
做惯了讲究响应速度的微小化web服务,当有人给我讲分布式锁时深刻怀疑说这个名词的哥们要么准备给我挖坑,要么自己把架构玩脱了已经掉进了坑里。这个东西虽然常见,但是稍有不慎就会掉坑里出不来。 系统做的越多现在越来越害怕那种千钧一发的系统,动辄每秒单例服务响应web业务请求百万上下,这样的实现功力确实佩服 ...
分类:
其他好文 时间:
2018-07-21 17:01:45
阅读次数:
140
分布式锁在分布式应用中应用广泛,想要搞懂一个新事物首先得了解它的由来,这样才能更加的理解甚至可以举一反三。 首先谈到分布式锁自然也就联想到分布式应用。 在我们将应用拆分为分布式应用之前的单机系统中,对一些并发场景读取公共资源时如扣库存,卖车票之类的需求可以简单的使用同步或者是加锁就可以实现。 ... ...
分类:
其他好文 时间:
2018-07-20 11:29:16
阅读次数:
157
1. 背景 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论:任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(partition Tolerance),最多只能同时满 ...
分类:
其他好文 时间:
2018-07-19 13:50:26
阅读次数:
178
引言 为什么写这篇文章? 目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面。要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫。坦白说,这种老题材,很难写出新创意,博主内心战战兢兢,如履薄冰,文中有什么不严谨之处,欢迎批评。 博主的这篇文章, 不上代码,只 ...
分类:
其他好文 时间:
2018-07-16 11:31:04
阅读次数:
138
一、 实现原理: 1、编写服务端Socket监听程序,运行与某台服务器上作为所有客户端竞争资源 2、客户端启动后,都会自动向ZK注册自己的身份信息,并将自己的身份ID根据统一的生成规则临时写入ZK 3、客户端实时监听ZK中自身注册到ZK集群中身份ID变化,若发现自身ID为ZK集群最小的身份ID,则获得锁,然后向服务端Socket建立连接发送消息,其它客户端处于监听等待
分类:
其他好文 时间:
2018-07-15 11:11:09
阅读次数:
231
背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GETSET,可以方便实现 ...
分类:
其他好文 时间:
2018-07-13 23:18:21
阅读次数:
201
本文围绕以下几点进行阐述: 为什么使用 Redis 使用 Redis 有什么缺点 单线程的 Redis 为什么这么快 Redis 的数据类型,以及每种数据类型的使用场景 Redis 的过期策略以及内存淘汰机制 Redis 和数据库双写一致性问题 如何应对缓存穿透和缓存雪崩问题 如何解决 Redis ...
分类:
其他好文 时间:
2018-07-13 12:15:52
阅读次数:
144
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细 ...
分类:
其他好文 时间:
2018-07-12 14:37:57
阅读次数:
142
在处理业务代码时,总会遇到多线程对同一资源竞争,此时对已经抢到资源的线程做Lock。 这里暂时先不考虑 是否是公平锁,是否可以重入的情况。 给出实现代码,key为加锁的维度。 ...
分类:
其他好文 时间:
2018-07-11 19:39:42
阅读次数:
149