- 延迟加载:
// 将商品信息加载到缓存中
public void loadGoodsToCache() {
List<Goods> goodsList = goodsService.getGoodsList();
for (Goods goods : goodsList) {
redisTemplate.opsForValue().set("goods:" + goods.getId(), goods);
}
}
// 秒杀开始时将缓存中的商品信息加载到数据库中
public void startSeckill() {
List<Goods> goodsList = redisTemplate.opsForValue().multiGet(redisTemplate.keys("goods:*"));
for (Goods goods : goodsList) {
goodsService.updateGoods(goods);
}
}
- 队列:
java
// 将秒杀请求放入消息队列中
public void seckill(String userId, String goodsId) {
SeckillRequest request = new SeckillRequest(userId, goodsId);
rabbitTemplate.convertAndSend("seckill.exchange", "seckill.queue", request);
}
// 消费者处理秒杀请求
@RabbitListener(queues = "seckill.queue")
public void handleSeckillRequest(SeckillRequest request) {
// 处理秒杀请求
}
- 限流:
java
// 使用Guava RateLimiter进行限流
private static final RateLimiter rateLimiter = RateLimiter.create(100);
// 处理秒杀请求
public void seckill(String userId, String goodsId) {
if (rateLimiter.tryAcquire()) {
// 处理秒杀请求
} else {
// 返回错误信息
}
}
- 分布式锁:
java
// 使用Redisson实现分布式锁
private static final RLock lock = redissonClient.getLock("seckill");
// 处理秒杀请求
public void seckill(String userId, String goodsId) {
try {
lock.lock();
// 处理秒杀请求
} finally {
lock.unlock();
}
}
- CDN加速:
java
// 使用Nginx配置CDN加速
location /static/ {
proxy_pass http://cdn.example.com/static/;
}
- 分布式缓存:
java
// 使用Redis缓存商品信息
public Goods getGoodsById(String goodsId) {
Goods goods = redisTemplate.opsForValue().get("goods:" + goodsId);
if (goods == null) {
goods = goodsService.getGoodsById(goodsId);
redisTemplate.opsForValue().set("goods:" + goodsId, goods);
}
return goods;
}
- 异步处理:
java
// 将秒杀请求放入消息队列中,由异步处理程序进行处理
public void seckill(String userId, String goodsId) {
SeckillRequest request = new SeckillRequest(userId, goodsId);
rabbitTemplate.convertAndSend("seckill.exchange", "seckill.queue", request);
}
// 异步处理程序处理秒杀请求
@RabbitListener(queues = "seckill.queue")
public void handleSeckillRequest(SeckillRequest request) {
// 处理秒杀请求
}