Spring Boot 整合JetCache缓存框架实现本地caffeine远程redis存储

Spring Boot 整合JetCache缓存框架实现本地caffeine远程redis存储

JetCache主要通过@Cached和@CreateCache实现缓存,@Cached是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中。@CreateCache是直接创建一个缓存实例,然后调用put(T
key, T value)、get(T key)等方法实现缓存。

	 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        
		<dependency>
            <groupId>com.alicp.jetcache</groupId>
            <artifactId>jetcache-starter-redis</artifactId>
            <version>2.6.0</version>
        </dependency>

配置信息

jetcache:
  statIntervalMinutes: 15
  areaInCacheName: false  # 是否加入缓存key前缀
  local:
    default:
      type: linkedhashmap  # 缓存类型。tair、redis为当前支持的远程缓存;linkedhashmap、caffeine为当前支持的本地缓存类型
      keyConvertor: fastjson  # Key的转换器
  remote:
    default:
      type: redis
      keyConvertor: fastjson
      valueEncoder: java
      valueDecoder: java
      poolConfig:
        minIdle: 5
        maxIdle: 20
        maxTotal: 50
      host: 127.0.0.1
      port: 6379
      database: 4
#      remote 表示远程缓存
#      local表示本地缓存

Servicec层
第一种方法通过@CreateCache

@Service
public class UserServiceImpl implements UserService {
    @CreateCache(name = "cacheName",expire = 100,timeUnit = TimeUnit.SECONDS)
    private Cache<String, User> userCache;

    @CreateCache(name = "ColorMap",expire = 500,timeUnit = TimeUnit.SECONDS)
    private Cache<String, Object> mapCache;

    @Override
    public User createUser() {
        userCache.PUT("valueName::keyName2", new User("id1", "张三", "深圳", "1234567", 18));
        CacheGetResult<User> get = userCache.GET("valueName::keyName2");
        User value = get.getValue();
        return value;
    }

    @Override
    public User findUser() {
        CacheGetResult<User> userCacheGetResult = userCache.GET("valuename1::keyname1");
        User value = userCacheGetResult.getValue();
        return value;
    }

    @Override
    public String createString() {
        mapCache.PUT("StringCache","李四");
        return (String) mapCache.get("StringCache");
    }
}

User实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class User implements Serializable {
    private String userId;
    private String name;
    private String address;
    private String tel;
    private Integer age;
}

启动类要加上启动注解

//JetCache主要通过@Cached和@CreateCache实现缓存,
//@Cached是在接口方法或者类方法上添加缓存,一般以参数为key,以返回值为value存入缓存中。
//@CreateCache是直接创建一个缓存实例,然后调用put(T key, T value)、get(T key)等方法实现缓存。
//@EnableCreateCacheAnnotation注解用于开启jetcache中@CreateCache注解,
//@EnableMethodCache(basePackages = “com.example.jetcache”)注解用于开启@cache注解
@SpringBootApplication
@EnableCreateCacheAnnotation
@EnableMethodCache(basePackages = "com.example.jetcache")
public class JetcacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(JetcacheApplication.class, args);
    }
}

在这里插入图片描述
方法二:创建方法缓存

使用@Cached方法可以为一个方法添加上缓存,@CacheUpdate用于更新缓存,@CacheInvalidate用于移除缓存元素。JetCache通过Spring AOP生成代理,来支持缓存功能。注解可以加在接口方法上也可以加在类方法上,但需要保证是个Spring bean。

@Cached:系统调用该接口方法时检测到@Cached标签,首先会根据key去调用get方法获取value值,如果存在value值则直接将值返回,如果不存在key,则会执行代码查询结果,并自动调用get方法将返回值存入缓存中。

public interface UserService {
    @Cached(name="userCache.", key="#userId", expire = 3600)
    User getUserById(long userId);

    @CacheUpdate(name="userCache.", key="#user.userId", value="#user")
    void updateUser(User user);

    @CacheInvalidate(name="userCache.", key="#userId")
    void deleteUser(long userId);
}

@Cached属性
在这里插入图片描述
@CacheInvalidate注解说明:
在这里插入图片描述

@CacheUpdate注解说明:
在这里插入图片描述

@CacheRefresh注解说明:
在这里插入图片描述


版权声明:本文为ggfvg777原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。