微服务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

测试

⛵小结

经验分享 程序员 微信小程序 职场和发展