cache(invalidate): 更新热门歌曲、歌单和歌手缓存

- 在添加、更新和删除音乐时更新热门歌曲缓存
- 在添加、更新和删除歌单时更新热门歌单缓存
- 在添加、更新和删除歌手时更新热门歌手缓存
This commit is contained in:
ikmkj
2025-07-26 17:51:45 +08:00
parent 5da1eab7b9
commit 6d944ad56a
3 changed files with 23 additions and 1 deletions

View File

@@ -144,6 +144,7 @@ public class MusicController {
@RequestPart(value = "file", required = false) MultipartFile file, @RequestPart(value = "file", required = false) MultipartFile file,
@RequestPart(value = "cover", required = false) MultipartFile cover) { @RequestPart(value = "cover", required = false) MultipartFile cover) {
MusicDTO result = musicService.addMusic(musicDTO, file, cover); MusicDTO result = musicService.addMusic(musicDTO, file, cover);
musicService.updateHotMusicCache();
return Result.success("添加成功", result); return Result.success("添加成功", result);
} }
@@ -178,6 +179,7 @@ public class MusicController {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public Result<Boolean> deleteMusic(@PathVariable Long id) { public Result<Boolean> deleteMusic(@PathVariable Long id) {
boolean result = musicService.deleteMusic(id); boolean result = musicService.deleteMusic(id);
musicService.updateHotMusicCache();
return Result.success("删除成功", result); return Result.success("删除成功", result);
} }

View File

@@ -8,6 +8,7 @@ import com.test.musichouduan.dto.PlaylistDTO;
import com.test.musichouduan.dto.Result; import com.test.musichouduan.dto.Result;
import com.test.musichouduan.service.PlaylistService; import com.test.musichouduan.service.PlaylistService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -19,9 +20,11 @@ import java.util.List;
@RestController @RestController
@RequestMapping("/api/playlist") @RequestMapping("/api/playlist")
public class PlaylistController { public class PlaylistController {
private static final String HOT_PLAYLIST_CACHE_KEY = "playlist:hot_list";
@Autowired @Autowired
private PlaylistService playlistService; private PlaylistService playlistService;
@Autowired
private StringRedisTemplate redisTemplate;
/** /**
* 根据ID获取歌单 * 根据ID获取歌单
@@ -129,6 +132,8 @@ public class PlaylistController {
@RequestPart("playlist") PlaylistDTO playlistDTO, @RequestPart("playlist") PlaylistDTO playlistDTO,
@RequestPart(value = "cover", required = false) MultipartFile cover) { @RequestPart(value = "cover", required = false) MultipartFile cover) {
PlaylistDTO result = playlistService.addPlaylist(playlistDTO, cover); PlaylistDTO result = playlistService.addPlaylist(playlistDTO, cover);
redisTemplate.delete(HOT_PLAYLIST_CACHE_KEY);
playlistService.getHotPlaylist(50);
return Result.success("添加成功", result); return Result.success("添加成功", result);
} }
@@ -147,6 +152,8 @@ public class PlaylistController {
@RequestPart("playlist") PlaylistDTO playlistDTO, @RequestPart("playlist") PlaylistDTO playlistDTO,
@RequestPart(value = "cover", required = false) MultipartFile cover) { @RequestPart(value = "cover", required = false) MultipartFile cover) {
PlaylistDTO result = playlistService.updatePlaylist(id, playlistDTO, cover); PlaylistDTO result = playlistService.updatePlaylist(id, playlistDTO, cover);
redisTemplate.delete(HOT_PLAYLIST_CACHE_KEY);
playlistService.getHotPlaylist(50);
return Result.success("更新成功", result); return Result.success("更新成功", result);
} }
@@ -160,6 +167,8 @@ public class PlaylistController {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public Result<Boolean> deletePlaylist(@PathVariable Long id) { public Result<Boolean> deletePlaylist(@PathVariable Long id) {
boolean result = playlistService.deletePlaylist(id); boolean result = playlistService.deletePlaylist(id);
redisTemplate.delete(HOT_PLAYLIST_CACHE_KEY);
playlistService.getHotPlaylist(50);
return Result.success("删除成功", result); return Result.success("删除成功", result);
} }

View File

@@ -8,6 +8,7 @@ import com.test.musichouduan.dto.Result;
import com.test.musichouduan.dto.SingerDTO; import com.test.musichouduan.dto.SingerDTO;
import com.test.musichouduan.service.SingerService; import com.test.musichouduan.service.SingerService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -20,8 +21,12 @@ import java.util.List;
@RequestMapping("/api/singer") @RequestMapping("/api/singer")
public class SingerController { public class SingerController {
private static final String HOT_SINGER_CACHE_KEY = "singer:hot_list";
@Autowired @Autowired
private SingerService singerService; private SingerService singerService;
@Autowired
private StringRedisTemplate redisTemplate;
/** /**
* 根据ID获取歌手 * 根据ID获取歌手
@@ -114,6 +119,8 @@ public class SingerController {
@RequestPart("singer") SingerDTO singerDTO, @RequestPart("singer") SingerDTO singerDTO,
@RequestPart(value = "avatar", required = false) MultipartFile avatar) { @RequestPart(value = "avatar", required = false) MultipartFile avatar) {
SingerDTO result = singerService.addSinger(singerDTO, avatar); SingerDTO result = singerService.addSinger(singerDTO, avatar);
redisTemplate.delete(HOT_SINGER_CACHE_KEY);
singerService.getHotSinger(50);
return Result.success("添加成功", result); return Result.success("添加成功", result);
} }
@@ -133,6 +140,8 @@ public class SingerController {
@RequestPart("singer") SingerDTO singerDTO, @RequestPart("singer") SingerDTO singerDTO,
@RequestPart(value = "avatar", required = false) MultipartFile avatar) { @RequestPart(value = "avatar", required = false) MultipartFile avatar) {
SingerDTO result = singerService.updateSinger(id, singerDTO, avatar); SingerDTO result = singerService.updateSinger(id, singerDTO, avatar);
redisTemplate.delete(HOT_SINGER_CACHE_KEY);
singerService.getHotSinger(50);
return Result.success("更新成功", result); return Result.success("更新成功", result);
} }
@@ -146,6 +155,8 @@ public class SingerController {
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public Result<Boolean> deleteSinger(@PathVariable Long id) { public Result<Boolean> deleteSinger(@PathVariable Long id) {
boolean result = singerService.deleteSinger(id); boolean result = singerService.deleteSinger(id);
redisTemplate.delete(HOT_SINGER_CACHE_KEY);
singerService.getHotSinger(50);
return Result.success("删除成功", result); return Result.success("删除成功", result);
} }