public void sendPicCode(String uuid, HttpServletRequest request, HttpServletResponse respon) throws IOException { //接到了uuid请求图片的链接 int w = 200, h = 80;//图片宽度、高度 long n = 120;//超时时间,单位秒 //生成code String verifyCode = RandomValidateCodeUtil.generateVerifyCode(4); //存入redis //清除缓存 redisUtil.del(uuid); //添加数据 redisUtil.set(uuid, verifyCode,n); System.out.println("添加数据uuid:" + uuid + " :" + redisUtil.get(uuid)); //返回图片 ServletOutputStream outputStream = respon.getOutputStream(); RandomValidateCodeUtil.outputImage(w, h,outputStream,verifyCode); //发送数据 outputStream.flush(); // 关闭流 outputStream.close(); } 优化这段代码 使其满足异步处理
时间: 2024-02-14 19:18:18 浏览: 56
可以使用异步方式处理图片验证码生成和存储到 Redis 的操作,下面是优化后的代码:
```
public void sendPicCode(String uuid, HttpServletRequest request, HttpServletResponse response) throws IOException {
int w = 200, h = 80;
long n = 120;
String verifyCode = RandomValidateCodeUtil.generateVerifyCode(4);
//使用CompletableFuture异步执行存储到Redis操作
CompletableFuture.supplyAsync(() -> {
redisUtil.set(uuid, verifyCode, n);
return null;
});
//返回图片
response.setContentType("image/jpeg");
ServletOutputStream outputStream = response.getOutputStream();
RandomValidateCodeUtil.outputImage(w, h, outputStream, verifyCode);
outputStream.flush();
outputStream.close();
}
```
使用 CompletableFuture 异步执行存储到 Redis 的操作,不会阻塞主线程,提高了响应速度。同时,设置响应的 ContentType,确保返回的是图片。
阅读全文