diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/cache/IUserCountsCacheRepository.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/cache/IUserCountsCacheRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..87c2115ae6586a7a965cf38ec1fe96de4e582ca7 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/cache/IUserCountsCacheRepository.java @@ -0,0 +1,11 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.cache; + +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.pojo.vo.UserCountsCacheVO; + +import java.util.List; + +public interface IUserCountsCacheRepository { + void save(List userCounts); + + void deleteAll(); +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/cache/impl/UserCountsCacheRepositoryImpl.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/cache/impl/UserCountsCacheRepositoryImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..dda95a0bf8d900882a6d2f8175de72a0726db906 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/cache/impl/UserCountsCacheRepositoryImpl.java @@ -0,0 +1,38 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.cache.impl; + +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.cache.IUserCountsCacheRepository; +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.pojo.vo.UserCountsCacheVO; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; +import java.util.List; +import java.util.Set; + +import static cn.tedu.youbiliprojectbackend.common.consts.CountConsts.USER_COUNT; + +@Slf4j +@Repository +public class UserCountsCacheRepositoryImpl implements IUserCountsCacheRepository { + @Autowired + RedisTemplate template; + @Override + public void save(List userCounts) { + ValueOperations operations = template.opsForValue(); + for (UserCountsCacheVO userCount : userCounts) { + operations.set(USER_COUNT+userCount.getUserID(),userCount); + } + } + + @Override + public void deleteAll() { + log.debug("清空缓存"); + Set keys = template.keys(USER_COUNT + "*"); + if (keys != null && !keys.isEmpty()) { + template.delete(keys); + } + } +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/mapper/UserCountMapper.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/mapper/UserCountMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..7a66d853eb833f01528ff01dbe209e625c9bbf21 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/mapper/UserCountMapper.java @@ -0,0 +1,11 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.persist.mapper; + +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.pojo.vo.UserCountsCacheVO; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface UserCountMapper { + List selectAll(); +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/repository/IUserCountsRepository.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/repository/IUserCountsRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..b0eaf06edef0bb9499140717300994805a16d526 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/repository/IUserCountsRepository.java @@ -0,0 +1,9 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.persist.repository; + +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.pojo.vo.UserCountsCacheVO; + +import java.util.List; + +public interface IUserCountsRepository { + List selectAll(); +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/repository/impl/UserCountsRepository.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/repository/impl/UserCountsRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..020d1a27d451c6df7923603836d93f362d01c782 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/dao/persist/repository/impl/UserCountsRepository.java @@ -0,0 +1,18 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.persist.repository.impl; + +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.persist.mapper.UserCountMapper; +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.persist.repository.IUserCountsRepository; +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.pojo.vo.UserCountsCacheVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.List; +@Repository +public class UserCountsRepository implements IUserCountsRepository { + @Autowired + private UserCountMapper mapper; + @Override + public List selectAll() { + return mapper.selectAll(); + } +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/pojo/vo/UserCountsCacheVO.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/pojo/vo/UserCountsCacheVO.java new file mode 100644 index 0000000000000000000000000000000000000000..e23dd5d0d1869382d3cb7c8f95dd52423be2dd4b --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/pojo/vo/UserCountsCacheVO.java @@ -0,0 +1,14 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.pojo.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class UserCountsCacheVO implements Serializable { + private Long userID; + private Integer fans; + private Integer follows; + private Integer videoCount; + private Integer totalLikes; +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/schedule/UserCountsCacheSchedule.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/schedule/UserCountsCacheSchedule.java new file mode 100644 index 0000000000000000000000000000000000000000..84df265bb6ca760ea093ca9e6e40462f3332fe49 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/schedule/UserCountsCacheSchedule.java @@ -0,0 +1,19 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.schedule; + +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.service.IUserCountsService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; +@Slf4j +@Component +public class UserCountsCacheSchedule implements ApplicationRunner { + @Autowired + private IUserCountsService service; + @Override + public void run(ApplicationArguments args) throws Exception { + log.info("项目启动,正在处理缓存用户计数字段业务"); + service.saveCacheUserCounts(); + } +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/service/IUserCountsService.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/service/IUserCountsService.java new file mode 100644 index 0000000000000000000000000000000000000000..4db8040bd7689fa6841f92edffd26075f758dff2 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/service/IUserCountsService.java @@ -0,0 +1,8 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.service; + +import org.springframework.stereotype.Service; + +@Service +public interface IUserCountsService { + void saveCacheUserCounts(); +} diff --git a/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/service/impl/UserCountsService.java b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/service/impl/UserCountsService.java new file mode 100644 index 0000000000000000000000000000000000000000..2c252cded33d19e45f2a8d4fbfd38ef756ad67d5 --- /dev/null +++ b/youbili-project-backend/src/main/java/cn/tedu/youbiliprojectbackend/common/cacheUtils/count/user/service/impl/UserCountsService.java @@ -0,0 +1,18 @@ +package cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.service.impl; + +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.cache.IUserCountsCacheRepository; +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.dao.persist.repository.IUserCountsRepository; +import cn.tedu.youbiliprojectbackend.common.cacheUtils.count.user.service.IUserCountsService; +import org.springframework.beans.factory.annotation.Autowired; + +public class UserCountsService implements IUserCountsService { + @Autowired + private IUserCountsRepository repository; + @Autowired + IUserCountsCacheRepository cacheRepository; + @Override + public void saveCacheUserCounts() { + cacheRepository.deleteAll(); + cacheRepository.save(repository.selectAll()); + } +}