微服务SpringBoot 整合Redis 实现点赞、点赞排行榜
⛅引言
本博文参考 黑马 程序员B站 Redis课程系列
Redis 如此强大!
一、发布探店笔记
如何发布探店笔记呢,该部分需求为如下:
具体要求:
进入发布页面
实现具体功能即可
核心代码如下
BlogController
@PostMapping("blog")
public Result uploadImage(@RequestParam("file") MultipartFile image) {
return uploadService.uploadImage(image);
}
BlogServiceImpl
注意修改路径,在Nginx容器中存储图片即可,也可以买阿里云OSS对象存储来存储图片
@Slf4j
@Service
public class UploadServiceImpl implements IUploadService {
@Override
public Result uploadImage(MultipartFile file) {
try {
// 获取原始文件名称
String originalFilename = file.getOriginalFilename();
// 生成新文件名
String fileName = createNewFileName(originalFilename);
// 保存文件,注意修改地址 SystemConstants.IMAGE_UPLOAD_DIR
file.transferTo(new File(SystemConstants.IMAGE_UPLOAD_DIR, fileName));
// 返回结果
log.debug("文件上传成功,{}", fileName);
return Result.ok(fileName);
} catch (IOException e) {
throw new RuntimeException("文件上传失败", e);
}
}
private String createNewFileName(String originalFilename) {
// 获取后缀
String suffix = StrUtil.subAfter(originalFilename, ".", true);
// 生成目录
String name = UUID.randomUUID().toString();
int hash = name.hashCode();
int d1 = hash & 0xF;
int d2 = (hash >> 4) & 0xF;
// 判断目录是否存在
File dir = new File(SystemConstants.IMAGE_UPLOAD_DIR, StrUtil.format("/blogs/{}/{}", d1, d2));
if (!dir.exists()) {
dir.mkdirs();
}
// 生成文件名
return StrUtil.format("/blogs/{}/{}/{}.{}", d1, d2, name, suffix);
}
}
发布成功如下:
二、查看探店笔记
点击笔记需要进入详情页,我们实现详情查看
核心代码
BlogController
RestFul 风格,传入id,通过指定注解接受即可。
@GetMapping("/{id}")
public Result queryBlogId(@PathVariable("id") Long id) {
return blogService.queryBlogId(id);
}
BlogServiceImpl
成功查看
三、Spring Boot 整合 Redis 实现点赞功能
实现步骤
为何采用Set 集合?
因为每个数据是不允许重复的,当用户操作完成后,无论如何操作,都是有且仅有一条记录
添加Blog isLike字段
// 系统是采用MyBatis-Plus 实现的,而当前字段在数据表中不存在,则采用注解进行过滤 @TableField(exist = false) private Boolean isLike;
修改代码
四、Spring Boot 整合 Redis 实现点赞排行榜
需求分析
为何采用 Zset呢
核心代码
实现查询笔记Top5
测试
