概念
缓存的key过期,导致查询该key的大量请求打到数据库上,导致数据库压力增大。
解决方案
一、单实例场景下应用内加锁
对于当应用的场景,只有一个实例,只需要在应用内对查询数据库的操作加锁,保证同一时刻只有一个线程能够进入到该代码块中,这样可以将大并发的场景在应用内控制变成串行访问,减轻对数据存储层的压力,进入该代码块的线程查询完db后将数据写入到缓存中,后续的其他线程再查询缓存就有数据,不需要再查询db了。
二、分布式场景下,使用分布式锁
分布式锁,其实就是将单实例应用内的锁,转换成多应用共享锁,实现的方案网上也很多,通过zk,redis都能实现,我们团队中目前是使用redis来实现分布式锁。
来源:oschina
链接:https://my.oschina.net/u/1381995/blog/3133543