logo头像

生而无畏,战至终章

分布式锁

分布式锁实现方式:

zookeeper实现方式
主要是利用了ZK中一个特殊概念“临时顺序节点”,原理如下:

  • 直接创建一个锁节点下的一个接一个的临时顺序节点。
  • 如果自己不是第一个节点,就对自己上一个节点加监听器。
  • 只要上一个节点释放锁,自己就排到前面去了,相当于是一个排队机制

Redis实现方式

  • 基于Redis实现的锁机制,主要是依赖redis自身的原子操作
    1
    SET user_key user_value NX PX 100

redis从2.6.12版本开始,SET命令才支持这些参数:
NX:只在在键不存在时,才对键进行设置操作,SET key value NX 效果等同于 SETNX key value
PX millisecond:设置键的过期时间为millisecond毫秒,当超过这个时间后,设置的键会自动失效

  • Redission
    它Redis的客户端,相比于Jedis功能简单。Jedis简单使用阻塞的I/O和redis交互,Redission通过Netty支持非阻塞I/O

数据库实现方式

  • 基于数据库的乐观锁
    乐观锁机制其实就是在数据库表中引入一个版本号(version)字段来实现的

  • 基于数据库的悲观锁
    悲观锁也叫作排它锁,在Mysql中是基于 for update 来实现加锁的(需要注意的是,在InnoDB中只有字段加了索引的,才会是行级锁,否者是表级锁)

当一个应用启动缓慢如何优化?
网关能够为后端服务带来哪些好处?