前言
缓存击穿指的是高并发下请求的数据不存在与redis中,导致所有的请求去访问数据库给数据库服务器造成压垮性的压力。本文使用CountDownLatch来模拟高并发请求。
需求
有100个并发请求,第一个请求将会把数据库中的数据取出放入Redis中,其他的请求从Redis中获取数据。
普通实现(有缓存击穿的问题)
Redis工具类
@Service
public class RedisService {
@Autowired
private RedisTemplate redisTemplate;
/**
* 写入缓存
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value) {
boolean result = false;
try {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
operations.set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 写入缓存设置时效时间
* @param key
* @param value
* @return
*/
public boolea