jetcache(2)缓存策略

redis的支持

jedis

选用jedis访问redis,对应的maven artifact是jetcache-redis和jetcache-starter-redis(spring boot)。
部分配置:

jetcache: 
  areaInCacheName: false
  remote:
    default:
      type: redis
      keyConvertor: fastjson
      poolConfig:
        minIdle: 5
        maxIdle: 20
        maxTotal: 50
      host: ${redis.host}
      port: ${redis.port}
      #sentinels: 127.0.0.1:26379 , 127.0.0.1:26380, 127.0.0.1:26381
      #masterName: mymaster

如果需要直接操作JedisPool,可以通过以下方式获取:

@Bean(name = "defaultPool")
@DependsOn(RedisAutoConfiguration.AUTO_INIT_BEAN_NAME)//jetcache2.2+
//@DependsOn("redisAutoInit")//jetcache2.1
public JedisPoolFactory defaultPool() {
    return new JedisPoolFactory("remote.default", JedisPool.class);
}

然后使用:

@Autowired
private Pool<Jedis> defaultPool;

lettuce

对应的maven artifact是jetcache-redis-lettuce和jetcache-starter-redis-lettuce。lettuce使用Netty建立单个连接连redis,所以不需要配置连接池。
部分配置:

jetcache: 
  areaInCacheName: false
  remote:
    default:
      type: redis.lettuce
      keyConvertor: fastjson
      uri: redis://127.0.0.1:6379/

如果使用sentinel做自动主备切换,uri可以配置为redis-sentinel://127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381/?sentinelMasterId=mymaster
如果是集群:

jetcache: 
  areaInCacheName: false
  remote:
    default:
      type: redis.lettuce
      keyConvertor: fastjson
      uri:
        - redis://127.0.0.1:7000
        - redis://127.0.0.1:7001
        - redis://127.0.0.1:7002

如果需要直接使用lettuce的RedisClient:

@Bean(name = "defaultClient")
@DependsOn(RedisLettuceAutoConfiguration.AUTO_INIT_BEAN_NAME)
public LettuceFactory defaultClient() {
    return new LettuceFactory("remote.default", RedisClient.class);
}

然后使用:

@Autowired
private RedisClient defaultClient;

本地缓存

本地缓存当前有两个实现。如果自己用jetcache-core的CacheAPI,可以不指定keyConvertor,此时本地缓存使用equals方法来比较key。如果使用jetcache-anno中的@Cached、@CreateCache等注解,必须指定keyConvertor。

LinkedHashMapCache

LinkedHashMapCache是JetCache中实现的一个最简单的Cache,使用LinkedHashMap做LRU方式淘汰。

Cache<Long, OrderDO> cache = LinkedHashMapCacheBuilder.createLinkedHashMapCacheBuilder()
                .limit(100)
                .expireAfterWrite(200, TimeUnit.SECONDS)
                .buildCache();

CaffeineCache

Cache<Long, OrderDO> cache = CaffeineCacheBuilder.createCaffeineCacheBuilder()
                .limit(100)
                .expireAfterWrite(200, TimeUnit.SECONDS)
                .buildCache();
### JetCache 分布式缓存概述 JetCache 是阿里巴巴开源的一款高性能 Java 缓存库,旨在简化分布式环境下的缓存管理。除了基本的对象缓存功能外,还提供了分布式锁、监控以及防止缓存雪崩等功能[^1]。 ### 配置与集成 为了在项目中使用 JetCache 的分布式缓存特性,首先需要引入相应的依赖项。对于基于 Spring Boot 的应用来说,可以通过添加 Maven 或 Gradle 描述符中的依赖来完成这一过程: #### 添加依赖 ```xml <!-- pom.xml --> <dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis</artifactId> <!-- 版本号应根据实际需求指定 --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 接着,在 `application.properties` 文件里配置 Redis 连接参数和其他必要的选项: ```properties # application.properties jetcache.statIntervalMinutes=0 jetcache.areaInKey=false jetcache.localLimit=10000 jetcache.redis.url=redis://localhost:6379 ``` 上述设置定义了本地缓存的最大条目数 (`localLimit`) 和远端 Redis 实例的位置 (`url`) 等重要属性[^4]。 ### 注解驱动开发模式 通过简单的注解即可轻松实现复杂的业务逻辑控制。例如,利用 `@Cached` 可以为方法调用的结果自动创建并维护一份缓存副本;而当数据发生变化时,则可通过 `@CacheUpdate` 更新对应的记录;最后,借助于 `@CacheInvalidate` 来清除不再有效的缓存条目[^2]。 下面是一个具体的例子展示了如何结合这些注解来进行高效的读写操作: ```java @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } /** * 获取用户信息的方法被标记为可缓存, * 如果存在相同的请求则直接返回已有的结果而不是重新查询数据库。 */ @Cached(name="users", key="'user:'+#id", cacheType=CacheType.BOTH) public User getUserById(Long id){ return userRepository.findById(id).orElse(null); } } ``` 此代码片段说明了怎样声明一个名为 `"users"` 的缓存区域,并指定了键生成策略(即前缀加上传入的 ID 参数)。同时设置了 `cacheType=BOTH` 表明既会在客户端保存一份临时拷贝也会同步到远程存储节点上[^5]。 ### 解决方案亮点 相比于传统的单层架构设计,采用双层或多级结构能够显著提升系统的整体性能表现。特别是针对高并发场景下频繁访问的数据集而言,合理运用 LOCAL 或 BOTH 类型不仅有助于减轻外部 Cache Server 负载压力,还能有效缩短应用程序对外部资源获取的时间延迟。 ### 示例总结 综上所述,JetCache 不仅继承和发展了许多来自 SpringCache 的优秀设计理念和技术优势,而且还特别强化了一些适应现代微服务体系特点的新能力——比如内置的支持 TTL 设置机制、灵活多样的缓存级别切换方式等等。因此非常适合用来构建稳定可靠的企业级解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值