Skip to content

Instantly share code, notes, and snippets.

@stableShip
Created December 29, 2016 01:27
Show Gist options
  • Save stableShip/2c165cd7e6167f574b874626f7770dc4 to your computer and use it in GitHub Desktop.
Save stableShip/2c165cd7e6167f574b874626f7770dc4 to your computer and use it in GitHub Desktop.
预约 redis锁处理
#预约 redis锁处理
## 需求
现 居民预约 同一时间请求, 会导致号源超过限制, 需要限制同一时间内 相同类型预约 请求数量.
相关bug: http://120.24.38.201/zentao/bug-view-867.html
相关任务: http://120.24.38.201/zentao/task-view-587.html
## 方案
### 基础逻辑
使用redis加锁(setNx), 保证统一类型的预约请求在同一时间内只能有一个请求. 请求结束后删除锁
### 超时处理
为避免用户请求处理超时(如: 当请求时, 服务器崩溃), 导致死锁的情况发生, 没一个锁设置超时时间为10秒
超过10秒, 自动删除掉相应的锁.
### 锁定义
使用redis进行锁处理, 需要对不同类型的预约进行处理, 所以需要有不同的锁, 也就是需要不同的redis的key
key定义:
`项目名称+":"+不同类型预约名+":" + 预约的社区+ ":" + 预约的内容(相应科室, 专家, 计免信息)+":"+ 预约时间`
计免预约: `sq580:epi_booking:book + "社区id" + ":" + "预约时间" `
科室预约-儿童保健: `sq580:chdh_booking:book + "社区id" + ":" + "预约时间"`
科室预约-专家预约: `sq580:drs_booking:book + "社区id" + ":" + "预约专家" + ":" + "预约时间"`
科室预约-科室预约: `sq580:drs_booking:book + "社区id" + ":" + "预约科室" + ":" + "预约时间"`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment