首页 > 其他分享 >@Cacheable的使用

@Cacheable的使用

时间:2023-02-03 14:45:28浏览次数:59  
标签:Cacheable name val cacheConfig cells ttl 使用

SpringBoot 缓存之 @Cacheable 详细介绍
https://blog.csdn.net/zl1zl2zl3/article/details/110987968

@Cacheable设置过期时间
https://blog.csdn.net/weixin_41860719/article/details/125226096

成功的demo

class TtlRedisCacheManager(cacheWriter: RedisCacheWriter?, defaultCacheConfiguration: RedisCacheConfiguration?) :
    RedisCacheManager(cacheWriter!!, defaultCacheConfiguration!!) {
    override fun createRedisCache(name: String, cacheConfig: RedisCacheConfiguration?): RedisCache {
        var name: String? = name
        var cacheConfig = cacheConfig
        val cells: Array<String> = StringUtils.delimitedListToStringArray(name, "=")
        name = cells[0]
        if (cells.size > 1) {
            val ttl = cells[1].toLong()
            // 根据传参设置缓存失效时间,默认单位是秒
            cacheConfig = cacheConfig!!.entryTtl(Duration.ofSeconds(ttl))
        }
        return super.createRedisCache(name, cacheConfig)
    }
}
  /**
   * 自定义RedisCacheManager,用于在使用@Cacheable时设置ttl
   */
  @Bean
  fun selfCacheManager(redisConnectionFactory: RedisConnectionFactory?): RedisCacheManager? {
      val redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory!!)
      val redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
          .serializeValuesWith(SerializationPair.fromSerializer(GenericJackson2JsonRedisSerializer(objectMapper)))
      return TtlRedisCacheManager(redisCacheWriter, redisCacheConfiguration)
  }
    @Cacheable(value = ["default=60"], key = "#token", unless = "#result == null",cacheManager = "selfCacheManager")
    fun getSession(token: String): SysUserSession? {
        val session = sysUserSessionMapper.selectById(token)
        return checkToken(session)
    }

标签:Cacheable,name,val,cacheConfig,cells,ttl,使用
From: https://www.cnblogs.com/cjcn/p/17089231.html

相关文章

  • Springboot websocket 的简单使用
    项目结构:引入依赖:"org.springframework.boot:spring-boot-starter-websocket","org.springframework.boot:spring-boot-starter-thymeleaf",启动类:publicclassDem......
  • Apipost预执行脚本使用教程
    提示:预执行脚本是一个请求发送前执行的脚本。预执行脚本的作用预执行脚本可以完成以下作用:编写JS函数等实现复杂计算;变量的打印定义、获取、删除、清空环境变量定义、获取......
  • 手机直播源码,使用ViewPager2实现页面滑动切换
    手机直播源码,使用ViewPager2实现页面滑动切换1.引言在很多应用中,我们经常会看到多个页面之间滑动切换的场景,ViewPager2是ViewPager的升级版,本文将简要介绍如何使用ViewPa......
  • ES(Elasticsearch)的Script脚本基本使用
       语法"script":{"lang":"","source":"","params":{...}} lang:指定编写脚本的语言。默认为painless.source:source为脚本本身para......
  • 使用itext7进行pdf签名印章
    ......
  • Apipost预执行脚本使用教程
     提示:预执行脚本是一个请求发送前执行的脚本。预执行脚本的作用预执行脚本可以完成以下作用:编写JS函数等实现复杂计算;变量的打印定义、获取、删除、清空环境......
  • MATLAB-常见命令使用
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • Flomesh Ingress 使用实践(三)多租户 Ingress
    背景在当下的云计算时代,我们经常会听到“租户”、“多租户”。“租户”是多租户架构技术中的概念,这种技术是用来处理多个组织共用同一个系统或者组件时的数据隔离性。在Ku......
  • webpack核心用法,为什么要使用webpack
    一:为什么使用webpack1.代码转换、文件优化、代码分割、模块合并、自动刷新、等等 2.webpack上手<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF......
  • C#使用命令行打开diskpart修改盘符
    参考链接:https://www.cnblogs.com/k98091518/p/6019296.html https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/diskpartdiskpart......