Procházet zdrojové kódy

获取热门搜索关键词开发

WangChanghua před 1 rokem
rodič
revize
bdc11fd8e2

+ 32 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/HotWordsDTO.java

@@ -0,0 +1,32 @@
+package com.chelvc.cloud.vehicle.api.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.io.Serializable;
+
+/**
+ * 搜索热词信息
+ *
+ * @author qizai
+ * @date 2023/11/3
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+public class HotWordsDTO implements Serializable {
+
+    /**
+     * 关键字
+     */
+    private String keywords;
+
+    /**
+     * 分数
+     */
+    private Integer point;
+}
+

+ 37 - 0
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/service/HotWordsService.java

@@ -0,0 +1,37 @@
+package com.chelvc.cloud.vehicle.api.service;
+
+import com.chelvc.cloud.vehicle.api.dto.HotWordsDTO;
+
+import java.util.List;
+
+/**
+ * 热词业务操作接口
+ *
+ * @author qizai
+ * @date 2023/11/3
+ */
+public interface HotWordsService {
+
+    /**
+     * 获取热门关键词
+     *
+     * @param number 热词数量
+     * @return 热词集合
+     */
+    List<String> listHotWords(Integer number);
+
+    /**
+     * 设置热门关键词
+     *
+     * @param hotWords 热词分数
+     */
+    void setHotWords(HotWordsDTO hotWords);
+
+    /**
+     * 删除热门关键词
+     *
+     * @param keywords 热词
+     */
+    void deleteHotWords(String keywords);
+
+}

+ 60 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/HotWordsServiceImpl.java

@@ -0,0 +1,60 @@
+package com.chelvc.cloud.vehicle.server.service.impl;
+
+import com.chelvc.cloud.vehicle.api.dto.HotWordsDTO;
+import com.chelvc.cloud.vehicle.api.service.HotWordsService;
+import com.chelvc.framework.redis.cache.Cache;
+import com.chelvc.framework.redis.cache.CachePrefix;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.ZSetOperations;
+
+import java.util.*;
+
+/**
+ * 搜索热词业务操作实现
+ *
+ * @author qizai
+ * @date 2023/11/3
+ */
+@DubboService(interfaceClass = HotWordsService.class)
+public class HotWordsServiceImpl implements HotWordsService {
+
+    /**
+     * 缓存
+     */
+    @Autowired
+    private Cache<Object> cache;
+
+    @Override
+    public List<String> listHotWords(Integer number) {
+        if (number == null) {
+            number = 0;
+        }
+        List<String> hotWords = new ArrayList<>();
+        // redis 排序中,下标从0开始,所以这里需要 -1 处理
+        number = number - 1;
+        Set<ZSetOperations.TypedTuple<Object>> set = cache.reverseRangeWithScores(CachePrefix.HOT_WORD.getPrefix(), number);
+        if (set == null || set.isEmpty()) {
+            return new ArrayList<>();
+        }
+        for (ZSetOperations.TypedTuple<Object> defaultTypedTuple : set) {
+            hotWords.add(Objects.requireNonNull(defaultTypedTuple.getValue()).toString());
+        }
+        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);
+    }
+}