iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Java中Spring-Cache key配置注意事项有哪些
  • 952
分享到

Java中Spring-Cache key配置注意事项有哪些

java 2023-05-31 00:05:31 952人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关Java中spring-Cache key配置注意事项有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为了提升项目的并发性能,考虑引入本地内存Cache,对:外部数据源访问、Rest

这篇文章给大家分享的是有关Java中spring-Cache key配置注意事项有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

为了提升项目并发性能,考虑引入本地内存Cache,对:外部数据源访问、Restful api调用、可重用的复杂计算 等3种类型的函数处理结果进行缓存。目前采用的是spring Cache的@Cacheable注解方式,缓存具体实现选取的是Guava Cache。
具体缓存的配置此处不再介绍,重点对于key的配置进行说明:

1、基本形式

@Cacheable(value="cacheName", key"#id")  public ResultDTO method(int id);

2、组合形式

@Cacheable(value="cacheName", key"T(String).valueOf(#name).concat('-').concat(#passWord))  public ResultDTO method(int name, String password);

3、对象形式

@Cacheable(value="cacheName", key"#user.id) public ResultDTO method(User user);

4、自定义key生成器

@Cacheable(value="Gomeo2oCache", keyGenerator = "keyGenerator") public ResultDTO method(User user);

注意:Spring默认的SimpleKeyGenerator是不会将函数名组合进key中的

如下:

@Component public class CacheTestImpl implements CacheTest {   @Cacheable("databaseCache")   public Long test1()   { return 1L; }   @Cacheable("databaseCache")   public Long test2()   { return 2L; }   @Cacheable("databaseCache")   public Long test3()   { return 3L; }   @Cacheable("databaseCache")   public String test4()   { return "4"; } }

我们期望输出:

1 2 3 4

实际却输出:

1 1 1 ClassCastException: java.lang.Long cannot be cast to java.lang.String

此外,原子类型的数组,直接作为key使用也是不会生效的

为了解决上述2个问题,自定义了一个KeyGenerator如下:

class CacheKeyGenerator implements KeyGenerator {   // custom cache key   public static final int NO_PARAM_KEY = 0;   public static final int NULL_PARAM_KEY = 53;   @Override   public Object generate(Object target, Method method, Object... params) {     StringBuilder key = new StringBuilder();     key.append(target.getClass().getSimpleName()).append(".").append(method.getName()).append(":");     if (params.length == 0) {       return key.append(NO_PARAM_KEY).toString();     }     for (Object param : params) {       if (param == null) {         log.warn("input null param for Spring cache, use default key={}", NULL_PARAM_KEY);         key.append(NULL_PARAM_KEY);       } else if (ClassUtils.isPrimitiveArray(param.getClass())) {         int length = Array.getLength(param);         for (int i = 0; i < length; i++) {           key.append(Array.get(param, i));           key.append(',');         }       } else if (ClassUtils.isPrimitiveOrWrapper(param.getClass()) || param instanceof String) {         key.append(param);       } else {         log.warn("Using an object as a cache key may lead to unexpected results. " +             "Either use @Cacheable(key=..) or implement CacheKey. Method is " + target.getClass() + "#" + method.getName());         key.append(param.hashCode());       }       key.append('-');     }     String finalKey = key.toString();     long cacheKeyHash = Hashing.murmur3_128().hashString(finalKey, Charset.defaultCharset()).asLong();     log.debug("using cache key={} hashCode={}", finalKey, cacheKeyHash);     return key.toString();   } }

采用此方式后可以解决:多参数、原子类型数组、方法名识别 等问题

感谢各位的阅读!关于“Java中Spring-Cache key配置注意事项有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Java中Spring-Cache key配置注意事项有哪些

本文链接: https://www.lsjlt.com/news/222450.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中Spring-Cache key配置注意事项有哪些
    这篇文章给大家分享的是有关Java中Spring-Cache key配置注意事项有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为了提升项目的并发性能,考虑引入本地内存Cache,对:外部数据源访问、Rest...
    99+
    2023-05-31
    java
  • spring事务的注意事项有哪些
    spring事务的注意事项有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  事务一般是指数据库事务,是指作为一个程序执行单元执行的一...
    99+
    2024-04-02
  • nginx转发配置的注意事项有哪些
    在配置nginx的转发时,有一些注意事项需要注意:1. 确保nginx已正确安装并启动。在配置之前,确保nginx已正确安装并已成功...
    99+
    2023-09-13
    nginx
  • Vue中v-for循环key属性注意事项有哪些
    这篇文章将为大家详细讲解有关Vue中v-for循环key属性注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当Vue用 v-for 正在更新已渲染过的元素列表...
    99+
    2024-04-02
  • Java集合注意事项有哪些
    今天小编给大家分享一下Java集合注意事项有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、Map 接口1、注意事项(...
    99+
    2023-06-30
  • mysql8.0.27配置的方法及有哪些注意事项
    这篇文章主要介绍“mysql8.0.27配置的方法及有哪些注意事项”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql8.0.27配置的方法及有哪些注意事项”文章能帮助大家解决问题。选择这个直接...
    99+
    2023-06-29
  • mongodb主从配置要注意哪些事项
    在配置MongoDB主从复制时,需要注意以下几个事项: 数据同步:主从配置需要确保主节点和从节点之间的数据同步正常。在配置主从复...
    99+
    2024-04-10
    mongodb
  • cacti系统配置要注意哪些事项
    确保安装了最新版本的Cacti软件,以获取最新的功能和安全更新。 配置数据库,建议使用MySQL数据库,并确保数据库配置正确。 配...
    99+
    2024-04-02
  • docker中redis安装配置要注意哪些事项
    在安装和配置Redis时,需要注意以下事项: 确保使用官方提供的Redis镜像来安装Redis,避免使用不安全或不稳定的第三方镜...
    99+
    2024-04-16
    docker redis
  • java遍历的注意事项有哪些
    1. 确保正确设置起始条件和结束条件。2. 注意遍历顺序,遵循先进先出的原则。3. 确保遍历过程中不会出现越界或空指针异常。4. 遍...
    99+
    2023-09-27
    java
  • jQuery.ajax注意事项有哪些
    这篇文章主要为大家展示了“jQuery.ajax注意事项有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery.ajax注意事项有哪些”这篇文章吧。 ...
    99+
    2024-04-02
  • ajaxStop()注意事项有哪些
    小编给大家分享一下ajaxStop()注意事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   .ajaxStop()...
    99+
    2024-04-02
  • ajaxSend()注意事项有哪些
    这篇文章主要介绍ajaxSend()注意事项有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!   无论哪一个Ajax请求被发送,所有ajaxSend处理器都将被执行。如果我们必...
    99+
    2024-04-02
  • 配置虚拟主机要注意哪些事项
    配置虚拟主机时,您需要注意以下事项:1. 确保您拥有足够的服务器资源来支持虚拟主机,包括处理能力、存储空间和带宽。2. 选择适合您需...
    99+
    2023-08-29
    虚拟主机
  • maven安装与配置要注意哪些事项
    1. 首先确保您已经安装了Java Development Kit(JDK),并设置了JAVA_HOME环境变量。2. 下载Mave...
    99+
    2023-09-16
    maven
  • java中守护线程的注意事项有哪些
    小编给大家分享一下java中守护线程的注意事项有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java基本数据类型有哪些Java的基本数据类型分为:1、整数类...
    99+
    2023-06-14
  • Java中GuavaCache返回Null的注意事项有哪些
    本篇内容介绍了“Java中GuavaCache返回Null的注意事项有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Guava在实际的J...
    99+
    2023-06-25
  • 建站有哪些注意事项
    本篇内容主要讲解“建站有哪些注意事项”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“建站有哪些注意事项”吧!  医疗行业作为一个特殊、敏感的行业,做好网站建设是一件很不容易的事情。随着互联网的高速...
    99+
    2023-06-10
  • jQuery.get的注意事项有哪些
    这篇文章主要讲解了“jQuery.get的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jQuery.get的注意事项有哪些”吧!   Ad...
    99+
    2024-04-02
  • Vue.js的注意事项有哪些
    这篇文章主要讲解了“Vue.js的注意事项有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue.js的注意事项有哪些”吧!1、为什么 Vue.js 不...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作