package cn.lili.modules.search.serviceimpl; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; import cn.lili.modules.search.entity.dos.HotWordsHistory; import cn.lili.modules.search.entity.dto.HotWordsDTO; import cn.lili.modules.search.mapper.HotWordsHistoryMapper; import cn.lili.modules.search.service.HotWordsService; import cn.lili.modules.system.entity.dos.Setting; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; import java.util.*; /** * HotWordsServiceImpl * * @author Chopper * @version v1.0 * 2022-04-14 09:35 */ @Slf4j @Service public class HotWordsServiceImpl implements HotWordsService { /** * 缓存 */ @Autowired private Cache cache; @Override public List getHotWords(Integer count) { if (count == null) { count = 0; } List hotWords = new ArrayList<>(); // redis 排序中,下标从0开始,所以这里需要 -1 处理 count = count - 1; Set> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); if (set == null || set.isEmpty()) { return new ArrayList<>(); } for (ZSetOperations.TypedTuple defaultTypedTuple : set) { hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString()); } return hotWords; } @Override public List getHotWordsVO(Integer count) { if (count == null) { count = 50; } List hotWords = new ArrayList<>(); // redis 排序中,下标从0开始,所以这里需要 -1 处理 count = count - 1; Set> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), count); if (set == null || set.isEmpty()) { return new ArrayList<>(); } for (ZSetOperations.TypedTuple defaultTypedTuple : set) { try { hotWords.add(new HotWordsHistory(defaultTypedTuple.getValue().toString(), defaultTypedTuple.getScore().intValue())); } catch (Exception e) { log.error("读取热词错误", e); } } Collections.sort(hotWords); return hotWords; } @Override public void setHotWords(HotWordsDTO hotWords) { cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), hotWords.getKeywords(), hotWords.getPoint()); } /** * 删除热门关键词 * * @param keywords 热词 */ @Override public void deleteHotWords(String keywords) { cache.zRemove(CachePrefix.HOT_WORD.getPrefix(), keywords); } }