数据库(Mysql) 实现分布式锁
基于MySql的InnoDB引擎,只有通过索引进行检索的时候才会使用行级锁,否则会使用表级锁.这个索引一定要创建成唯一索引,否则会出现多个重载方法之间无法同时被访问的问题
以下方案无法实现公平锁. 求大佬指点思路!!!
库表(t_lock
)设计
字段 | 类型 | 是否可为空 | 描述 |
---|---|---|---|
id | int | 否 | 主键,自增 |
relock | int | 否 | 锁定次数 为0时,表示未分配锁 |
method | String | 否 | 加锁方法 |
ip | String | 否 | 获取锁服务ip |
lock_time | date | 否 | 锁定时间(设计超时时间) |
每个事务锁在表中为一条数据。
-
服务启动,查询t_lock表。准备获取锁。
select * from t_lock;
-
若表中无数据(服务初次启动),则进行添加:
INSERT INTO `t_lock`(`id`, `relock`, `method`, `ip`, `lock_time`) VALUES (1, 1, 'test'