如何给多参数接口添加缓存(根据方法名字+参数名生成对应的key)

简介: 如何给多参数接口添加缓存(根据方法名字+参数名生成对应的key)

在我们日常开发过程中经常用到缓存,像一些简单的数据不经常改变,而且数据模型较为单一,我们可以直接调用Redis的方法即可进行缓存。


但是。不是所有的查询接口都是简单的,也有很多复杂的参数以及携带分页的。这类数据我们如何通过Redis进行缓存呢?


这里博主仅分享自已的方法,大家有更好的方法意见可以分享到评论区!


这里我采用的方法是:根据方法名字+参数名生成对应的key进行缓存


因为我们大多数参数都是中文的,为了防止放入Redis中乱码,我们需要把它先转为拼音。大家可以参考 Java汉字转拼音(解决方案) ,并在项目中引用该jar包以及方法。再进行后续的编码工作。


写好上面的转换方法后我们编写一下key的生成规则 根据方法名字+参数名(拼音)生成对应的key。


    /**
     * 根据方法名字+参数名生成对应的key
     *
     * @param map
     * @param method
     * @return
     */
    public static String createRediskey(Map<String, Object> map, String method) {
        String cacheKey;
        cacheKey = method;
        for (String key : map.keySet()) {
            if (null != map.get(key)) { //如果value不为空则拼接缓存名称
                try {
                    if (isChinese(map.get(key).toString())){ //如果为汉字true
                        cacheKey = cacheKey + changeChinesePinyin(map.get(key).toString()).get("fullPinyin");
                    }else {
                        cacheKey = cacheKey + map.get(key).toString();
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return cacheKey;
    }
    /**
     * 为了防止除了汉字之外的字符出现我们通过正则过滤一下
     * @param str
     * @return
     */
    public static boolean isChinese(String str) {
        String regEx = "[\u4e00-\u9fa5]";
        Pattern pat = Pattern.compile(regEx);
        Matcher matcher = pat.matcher(str);
        boolean flg = false;
        if (matcher.find())
            flg = true;
        return flg;
    }

接下来我们直接再方法接口中调用该方法生成对应的key并进行缓存即可。

  • parameterMap 对应的是我们接口的参数有多少个参数对应put多少次
  • method 是我们的方法名字
    /**
     * 首页公告接口
     * @return
     */
    @GetMapping("/indexArticle")
    @RequiresAuthentication
    @ApiImplicitParams({@ApiImplicitParam(name = TOKEN_TAG, value = TOKEN_TAG, paramType = "header")})
    public Object indexArticle(String secondColumn , @RequestParam(value="current", required = false,defaultValue = "1") Integer current , @RequestParam(value="number", required = false,defaultValue = "10") Integer number){
        Map parameterMap =new HashMap();
        parameterMap.put("current",current);
        parameterMap.put("number",number);
        parameterMap.put("secondColumn",secondColumn);
        String key = createRediskey(parameterMap, "indexArticle");
        System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++缓存key值为:"+key);
        Map ca = (Map) RedisUtil.get(key);
        if (ca != null){
            System.out.println("已读取到缓存数据++++++++++++++++++++++++++++++++++++++++++++++++++++");
            return ApiResult.success(ca);
        }
        Map map= consultationsService.findList(current,number,secondColumn);
        redisUtil.set(key,map,18000); //五小时过期
        return ApiResult.success(map);
    }

经过测试,我们的接口调用后就会根据参数信息生成的key进行缓存。再次调用传相同的参数就会从redis中进行读取。

b5379452179442bab3b262e3ce7b5fe9.png


相关文章
|
8月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
2163 10
|
8月前
|
缓存 监控 Ubuntu
Ubuntu操作系统下清除系统缓存与无用文件的方法
通过上述步骤断行综合性地对Ubuntu进行优化与整洁可显著改善其性能表现及响应速度。然而,请注意在执行某些操作前确保充分了解其潜在影响;例如,在移除旧内核之前确认新内核稳定运行无问题;而对于关键配置更改则需确保备份好相关设置以便恢复原状态。
2059 0
|
缓存 NoSQL Java
springboot怎么使用rides缓存方法的返回值 完整例子
通过上述步骤,我们成功地在 Spring Boot 项目中集成了 Redis 缓存,并通过注解的方式实现了方法返回值的缓存。这种方式不仅提高了系统的性能,还简化了缓存管理的复杂度。使用 Spring Boot 的缓存注解和 Redis,可以轻松地实现高效、可靠的缓存机制。
346 23
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
253 10
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
313 5
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
828 15
Android 系统缓存扫描与清理方法分析
|
缓存 NoSQL 算法
解决Redis缓存雪崩问题的有效方法
解决Redis缓存雪崩问题的有效方法
394 1
|
存储 缓存 NoSQL
解决Redis缓存击穿问题的技术方法
解决Redis缓存击穿问题的技术方法
493 2
|
缓存 NoSQL Redis
解决 Redis 缓存穿透问题的有效方法
解决 Redis 缓存穿透问题的有效方法
325 2
|
存储 缓存 关系型数据库
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
394 0
下一篇
开通oss服务