Jelajahi Sumber

热门搜索接口开发

WangChanghua 1 tahun lalu
induk
melakukan
394eb51a1f

+ 58 - 0
framework-redis/src/main/java/com/chelvc/framework/redis/cache/Cache.java

@@ -0,0 +1,58 @@
+package com.chelvc.framework.redis.cache;
+
+
+import org.springframework.data.redis.core.ZSetOperations;
+
+import java.util.Set;
+
+
+/**
+ * 缓存接口
+ *
+ * @author 七仔
+ * @date 2023/7/11
+ */
+public interface Cache<T> {
+
+    /**
+     * 使用Sorted Set记录keyword
+     * zincrby命令,对于一个Sorted Set,存在的就把分数加x(x可自行设定),不存在就创建一个分数为1的成员
+     *
+     * @param sortedSetName sortedSetName的Sorted Set不用预先创建,不存在会自动创建,存在则向里添加数据
+     * @param keyword       关键词
+     * @param score         分数
+     */
+    void incrementScore(String sortedSetName, String keyword, Integer score);
+
+    /**
+     * zrevrange命令, 查询Sorted Set中指定范围的值
+     * 返回的有序集合中,score大的在前面
+     * zrevrange方法无需担心用于指定范围的start和end出现越界报错问题
+     *
+     * @param sortedSetName sortedSetName
+     * @param start         查询范围开始位置
+     * @param end           查询范围结束位置
+     * @return 获取满足条件的集合
+     */
+    Set<ZSetOperations.TypedTuple<Object>> reverseRangeWithScores(String sortedSetName, Integer start, Integer end);
+
+    /**
+     * zrevrange命令, 查询Sorted Set中指定范围的值
+     * 返回的有序集合中,score大的在前面
+     * zrevrange方法无需担心用于指定范围的start和end出现越界报错问题
+     *
+     * @param sortedSetName sortedSetName
+     * @param number         查询数量
+     * @return 获取满足条件的集合
+     */
+    Set<ZSetOperations.TypedTuple<Object>> reverseRangeWithScores(String sortedSetName, Integer number);
+
+    /**
+     * 移除 Zset队列值
+     *
+     * @param key   key值
+     * @param value 删除的集合
+     * @return 删除数量
+     */
+    Long zRemove(String key, String... value);
+}

+ 28 - 0
framework-redis/src/main/java/com/chelvc/framework/redis/cache/CachePrefix.java

@@ -0,0 +1,28 @@
+package com.chelvc.framework.redis.cache;
+
+/**
+ * 缓存前缀
+ *
+ * @author 七仔
+ * @date 2023/7/11
+ */
+public enum CachePrefix {
+
+    /**
+     * 热门搜索
+     */
+    HOT_WORD;
+
+    public static String removePrefix(String str) {
+        return str.substring(str.lastIndexOf("}_") + 2);
+    }
+
+    /**
+     * 通用获取缓存key值
+     *
+     * @return 缓存key值
+     */
+    public String getPrefix() {
+        return "{" + this.name() + "}_";
+    }
+}

+ 73 - 0
framework-redis/src/main/java/com/chelvc/framework/redis/cache/impl/RedisCache.java

@@ -0,0 +1,73 @@
+package com.chelvc.framework.redis.cache.impl;
+
+
+import com.chelvc.framework.redis.cache.Cache;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ZSetOperations;
+import org.springframework.stereotype.Component;
+
+import java.util.Set;
+
+/**
+ * redis 缓存实现
+ *
+ * @author 七仔
+ * @date 2023/7/11
+ */
+@Component
+public class RedisCache implements Cache {
+
+    @Autowired
+    private RedisTemplate<Object, Object> redisTemplate;
+
+    public RedisCache() {
+
+    }
+
+    @Override
+    public void incrementScore(String sortedSetName, String keyword, Integer score) {
+        redisTemplate.opsForZSet().incrementScore(sortedSetName, keyword, score);
+    }
+
+    /**
+     * zrevrange命令, 查询Sorted Set中指定范围的值
+     * 返回的有序集合中,score大的在前面
+     * zrevrange方法无需担心用于指定范围的start和end出现越界报错问题
+     *
+     * @param sortedSetName sortedSetName
+     * @param start         查询范围开始位置
+     * @param end           查询范围结束位置
+     * @return 符合排序的集合
+     */
+    @Override
+    public Set<ZSetOperations.TypedTuple<Object>> reverseRangeWithScores(String sortedSetName, Integer start, Integer end) {
+        return this.redisTemplate.opsForZSet().reverseRangeWithScores(sortedSetName, start, end);
+    }
+
+    /**
+     * zrevrange命令, 查询Sorted Set中指定范围的值
+     * 返回的有序集合中,score大的在前面
+     * zrevrange方法无需担心用于指定范围的start和end出现越界报错问题
+     *
+     * @param sortedSetName sortedSetName
+     * @param number         获取数量
+     * @return 符合排序的集合
+     */
+    @Override
+    public Set<ZSetOperations.TypedTuple<Object>> reverseRangeWithScores(String sortedSetName, Integer number) {
+        return this.redisTemplate.opsForZSet().reverseRangeWithScores(sortedSetName, 0, number);
+    }
+
+    /**
+     * 移除 Zset队列值
+     *
+     * @param key   key值
+     * @param value 删除的集合
+     * @return 删除数量
+     */
+    @Override
+    public Long zRemove(String key, String... value) {
+        return redisTemplate.opsForZSet().remove(key, value);
+    }
+}