JetCache-Alibaba缓存框架

一.JetCache的基本概念

1.JetCache是由阿里巴巴 Group 开源的一款基于 Spring 和 Redis 的分布式缓存框架。它的主要特点包括:

  1. 基于注解:通过注解的方式来实现缓存的配置和使用,代码简洁,易于维护。
  2. 多级缓存:支持多级缓存,可以将数据缓存在本地内存、Redis、Tair、Memcached 等多种缓存存储中,提高缓存的命中率和查询效率。
  3. 多种缓存协议:支持 Redis、Tair、Memcached 等多种缓存协议,具有良好的可扩展性和兼容性,可以灵活切换缓存存储方式。
  4. 高性能:JetCache 针对分布式环境下的高并发访问优化了缓存的数据结构和查询算法,提供了较高的性能。
  5. 易用性:JetCache 的 API 简单易用,支持 Spring 注入和自定义配置,提供了丰富的缓存操作功能,非常适合中小型应用开发。

2.JetCache 可以应用于各种场景,主要包括:

  1. 热点数据缓存:JetCache 可以将常用的热点数据缓存在本地或远程缓存中,减少数据库或其他数据源的访问,并提高响应性能和性能稳定性。
  2. 多级缓存融合:JetCache 支持多种缓存存储类型,可以将不同的缓存存储类型融合使用,以达到更高的缓存效率和命中率。
  3. 高并发读写:JetCache 的缓存算法可以优化高并发读写场景,提高程序性能并降低系统压力。
  4. 高速访问查询:JetCache 使用缓存,可以实现高速查询和访问,减少等待时间,并提高用户体验。

二.JetCache 的 API 和使用:

  1. 缓存管理:JetCache 提供了 CacheBuilder 类来创建缓存,以及 Cache 对象来操作缓存,例如 get、put、remove 等。在调用 Cache 对象的 put 方法时,可以使用注解 @Cache 来设置缓存时间和名称等配置。
  2. 注解支持:JetCache 提供了多种注解来实现缓存操作,例如 @Cached,@CacheUpdate, @CacheInvalidate 等。使用注解的方式,可以更加方便地进行缓存操作,例如缓存预热、删除、更新等。
  3. 缓存类型:JetCache 支持多种缓存类型,例如本地 memory、Redis、Tair 和 Memcached 等缓存,可以根据业务需求来选择缓存类型。
  4. Spring 集成支持:JetCache 提供了 Spring 集成支持,可以通过注解来注入和配置缓存,简化使用流程。

三、SpringBoot整合JetCache

1.导入依赖

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

2.配置yml

jetcache:
  remote:
    type: redis
    # 修改远程缓存名称
    default:
      #redis地址
      servers: 127.0.0.1:6379
      #redis中的db索引,默认为0
      database: 0
      #redis的密码,如果没有密码则不需要配置
      password:
      #连接redis的超时时间(单位:毫秒)
      connectTimeout: 5000
      #操作redis的超时时间(单位:毫秒)
      timeout: 5000
      #redis连接池最大连接数
      maxTotal: 100
    # 如果你使用了redis集群
    cluster:
      servers: "127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381"
      #redis集群的密码,如果没有密码则不需要配置
      password:
      #jedisCluster连接池最大连接数
      maxTotal: 100
  local:
    # 本地缓存元素最大数量
    default:
      limit: 10000
    # 如果你想重写某个缓存的配置
    myCache:
      limit: 100

 @Cached注解和@CreateCache的属性非常类似,但是多几个:

属性 默认值 描述
cacheName "" 缓存名称
area "default" 缓存区域
key "" 缓存的键
condition "" 缓存条件,需要通过 Spring EL 表达式的形式传入
unless "" 缓存排除条件,需要通过 Spring EL 表达式的形式传入
sync false 是否使用同步模式
sourceAvailable false 缓存数据源是否存在
cacheNullValue false 是否缓存 null 值
cacheValue true 是否缓存返回值
expire -1 缓存过期时间,单位为秒
expireExpression "" 缓存过期时间表达式
keyConvertor "" 缓存键转换器
serialPolicy "" 缓存值序列化策略
areaInKey false 缓存中是否包含缓存区域
areaInRegion false 缓存区域是否独立,即缓存区域是否区分不同实例
postCondition "" 缓存后置条件
suppressException false 是否忽略异常
localLimit -1 本地缓存大小限制
cacheType "" 缓存类型,例如 caffeine、redis 等
conditionSatisfiedByValue false 是否根据缓存值来计算缓存条件,而不是方法参数

3.启动类注解

@EnableMethodCache(basePackages = "")

4.示例代码

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Cache(name = "userCache", key = "#userId", expire = 300)
    @Override
    public User getUserById(Long userId) {
        return userRepository.getUserById(userId);
    }

    @CacheUpdate(name = "userCache", key = "#user.id")
    @Override
    public void updateUser(User user) {
        userRepository.update(user);
    }

    @CacheInvalidate(name = "userCache", key = "#userId")
    @Override
    public void deleteUser(Long userId) {
        userRepository.deleteUser(userId);
    }
}

        这和SpringCache很像,不过@Cached注解原生支持了TTL(超时时间),cacheType有LOCAL/REMOTE/BOTH三种选择, 分别代表本地内存/远程Cache Server(例如Redis)/两级缓存,可根据情况选用,合理的使用LOCAL或BOTH类型可以降低Cache Server的压力以及我们提供的服务的响应时间。 

猜你喜欢

转载自blog.csdn.net/lzc19991201/article/details/131213322