下载此beplayapp体育下载

Redis缓存穿透、缓存雪崩、并发问题分析与解决方案.docx


beplayapp体育下载分类:bepaly下载苹果 | 页数:约10页 举报非法beplayapp体育下载有奖
1 / 10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该beplayapp体育下载所得收入归上传者、原创者。
  • 3.下载的beplayapp体育下载,不会出现我们的网址水印。
1 / 10 下载此beplayapp体育下载
beplayapp体育下载列表 beplayapp体育下载介绍
Redis缓存穿透、缓存雪崩、并发问题分析与解决方案
















把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数据量很大的时候,经典的几个问题如下:
(一)缓存和数据库间数据一致性问题
分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存。我们只能采取合适的策略来降低缓存和数据库间数据不一致的概率,而无法保证两者间的强一致性。合适的策略包括 合适的缓存更新策略,更新数据库后要及时更新缓存、缓存失败时增加重试机制,例如MQ模式的消息队列。

(二)缓存击穿问题
缓存击穿表示恶意用户模拟请求很多缓存中不存在的数据,由于缓存中都没有,导致这些请求短时间内直接落在了数据库上,导致数据库异常。这个我们在实际项目就遇到了,有些抢购活动、秒杀活动的接口
API被大量的恶意用户刷,导致短时间内数据库宕机了,好在数据库是多主多从的,hold住了。
解决方案的话:
1、使用互斥锁排队
业界比价普遍的一种做法,即根据key获取value值为空时,锁上,从数据库中load数据后再释放锁。若其它线程获取锁失败,则等待一段时间后重试。这里要注意,分布式环境中要使用分布式锁,单机的话用普通的锁(synchronized、Lock)就够了。
public String getWithLock( String key, Jedis jedis, String lockKey, String uniqueId, long expireTime )
{
/* 通过key获取value */
String value = ( key );
if ( ( value ) )
{
/*
* 分布式锁,详细可以参考
* 封装的tryDistributedLock包括setnx和expire两个功能,在低版本的redis中不支持
*/
try {
boolean locked = ( jedis, lockKey, uniqueId, expireTime );
if ( locked )
{
value = ( key );
( key, value );
( lockKey );
return(value);
} else {
/* 其它线程进来了没获取到锁便等待50ms后重试 */
( 50 );
getWithLock( key, jedis, lockKey, uniqueId, expi

Redis缓存穿透、缓存雪崩、并发问题分析与解决方案 来自beplayapp体育下载www.apt-nc.com转载请标明出处.

相关beplayapp体育下载 更多>>
非法内容举报中心
beplayapp体育下载信息
  • 页数10
  • 收藏数0收藏
  • 顶次数0
  • 上传人科技星球
  • 文件大小342 KB
  • 时间2021-10-29