锁「redis缓存锁最佳应用举例」

缓存锁qi

前集回顾

前面两篇文章我分别讲了数据库中的for update悲观锁还有乐观锁,都是基于项目实践来讲的,理论扯的比较少。连最常见的并发锁机制不清楚的请看本人另外的锁文章。

背景

普通基于mysql或oracle的锁,在一般高并发当然够用了,一般内部管理系统建议用这些锁机制。但如果是像秒杀这种成千上万人一起并发时,原来的方案肯定是扛不住的。成千上万的请求同时落在mysql上,不卡死才怪。

业务场景

话说,现在也就阿里电商有这么庞大的并发量,还有12306,每年高并发抢票那叫一个酸爽啊。

解决思路

  1. 缓存中间件,如流行的Redis分布式锁,tair缓存锁,主要讲Redis的锁

  2. redis锁命令SETNX

  3. 锁的思路是,如果 key 不存在,将 key 设置为 value 如果 key 已存在,则 SETNX 不做任何动作

伪代码走起

原理

Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GETSET,可以方便实现分布式锁机制。

下集预告

数据库的悲观锁和乐观锁 ,缓存锁都讲完了,项目里有实战需要的同学可以参考我的思路进行code

下篇文章我来讲下最原始的锁synchronized,单机高并发情况下程序还是要靠他来锁数据。

如果觉得对你有帮助请关注,有错误请指点,下篇继续分析 【原始的锁synchronized】

举报
评论 0