JetChache如何实现缓存、更新、删除操作

    技术2026-08-19  9

    JETCACHE如何实现缓存的缓存、更新、删除操作

    缓存工具的对比快速接入1.加依赖2.加配置3.增加config配置类JetCacheConfiguration4.加注解 入坑提示代码参考

    缓存工具的对比

    工具名称功能对比备注Spring CacheSpring官方提供,使用简单,功能单一,不能使用缓存刷新、二级缓存对需求不高者可以使用JetCache阿里出品,原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。对缓存要求高的用户推荐使用

    快速接入

    1.加依赖

    <dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis-lettuce</artifactId> <version>2.6.0</version> </dependency>

    2.加配置

    在bootstrap.yml里增加如下配置

    jetcache: statIntervalMinutes: 15 areaInCacheName: false local: default: type: linkedhashmap keyConvertor: fastjson remote: default: type: redis.lettuce keyConvertor: fastjson uri: redis://127.0.0.1:6379/ #uri: redis-sentinel://127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381/?sentinelMasterId=mymaster #readFrom: slavePreferred

    3.增加config配置类JetCacheConfiguration

    package vip.mate.core.jetcache.config; import com.alicp.jetcache.anno.CacheConsts; import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; import com.alicp.jetcache.anno.config.EnableMethodCache; import com.alicp.jetcache.anno.support.GlobalCacheConfig; import com.alicp.jetcache.anno.support.SpringConfigProvider; import com.alicp.jetcache.embedded.EmbeddedCacheBuilder; import com.alicp.jetcache.embedded.LinkedHashMapCacheBuilder; import com.alicp.jetcache.redis.lettuce.RedisLettuceCacheBuilder; import com.alicp.jetcache.support.FastjsonKeyConvertor; import com.alicp.jetcache.support.JavaValueDecoder; import com.alicp.jetcache.support.JavaValueEncoder; import io.lettuce.core.ClientOptions; import io.lettuce.core.RedisClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import vip.mate.core.common.factory.YamlPropertySourceFactory; import java.util.HashMap; import java.util.Map; @Configuration @EnableMethodCache(basePackages = "vip.mate.system") @EnableCreateCacheAnnotation @PropertySource(factory = YamlPropertySourceFactory.class, value = "classpath:mate-jetcache.yml") public class JetCacheConfiguration { @Bean public RedisClient redisClient(){ RedisClient client = RedisClient.create("redis://127.0.0.1"); client.setOptions(ClientOptions.builder(). disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS) .build()); return client; } @Bean public SpringConfigProvider springConfigProvider() { return new SpringConfigProvider(); } @Bean public GlobalCacheConfig config(SpringConfigProvider configProvider, RedisClient redisClient){ Map localBuilders = new HashMap(); EmbeddedCacheBuilder localBuilder = LinkedHashMapCacheBuilder .createLinkedHashMapCacheBuilder() .keyConvertor(FastjsonKeyConvertor.INSTANCE); localBuilders.put(CacheConsts.DEFAULT_AREA, localBuilder); Map remoteBuilders = new HashMap(); RedisLettuceCacheBuilder remoteCacheBuilder = RedisLettuceCacheBuilder.createRedisLettuceCacheBuilder() .keyConvertor(FastjsonKeyConvertor.INSTANCE) .valueEncoder(JavaValueEncoder.INSTANCE) .valueDecoder(JavaValueDecoder.INSTANCE) .redisClient(redisClient); remoteBuilders.put(CacheConsts.DEFAULT_AREA, remoteCacheBuilder); GlobalCacheConfig globalCacheConfig = new GlobalCacheConfig(); // globalCacheConfig.setConfigProvider(configProvider);//for jetcache <=2.5 globalCacheConfig.setLocalCacheBuilders(localBuilders); globalCacheConfig.setRemoteCacheBuilders(remoteBuilders); globalCacheConfig.setStatIntervalMinutes(15); globalCacheConfig.setAreaInCacheName(false); return globalCacheConfig; } }

    4.加注解

    以下需要Spring或者SpringBoot环境

    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注解可以为一个方法添加缓存,@CacheUpdate用于更新缓存,@CacheInvalidate用于移除缓存元素。

    入坑提示

    采用最新的2.6.0版本,有一个问题,就是采用jedis的方式的时候,提示一些报错信息,暂时调整为lettuce

    代码参考

    微服务源码,集成了JetCache 如果觉得不错,可以帮我点赞加关注,也可以进QQ群交流心得。

    Processed: 0.017, SQL: 9