基于Caffeine本地缓存结合Redis的两级缓存(初始版本)

6 篇文章 0 订阅
2 篇文章 0 订阅

缓存作为目前高性能服务框架中不可或缺的一部分,扮演着越来越重要的角色。

实际的项目中通常会用redis做第一层缓存,如果不命中则会直接查询数据库,这种架构可以减轻数据库的压力。

如今可以在其基础上再做出改进,配合本地缓存再次去提升响应速度和服务性能。由此诞生二级缓存架构。

借用网图:

话不多说:创建springboot项目,整合redis和数据库配置以及相关依赖。

首先我们需要自己创建一个Caffeine中的Cache对象来缓存数据,他的数据结构类似于Hashmap.详细配置如下:

@Configuration
public class CaffeineConfig {
    @Bean
    public Cache<String,Object> caffeineCache(){
        return Caffeine.newBuilder()
                .initialCapacity(128)//初始大小
                .maximumSize(1024)//最大数量
                .expireAfterWrite(60, TimeUnit.SECONDS)//过期时间
                .build();
    }
}

简单解释一下Cache相关的几个参数的意义:

  • initialCapacity:初始缓存空大小

  • maximumSize:缓存的最大数量,设置这个值可以避免出现内存溢出

  • expireAfterWrite:指定缓存的过期时间,是最后一次写操作后的一个时间,这里

此外,缓存的过期策略也可以通过expireAfterAccessrefreshAfterWrite指定。

创建完成后,就可以在业务层中使用了。

public Order getOrderById(Long id) {
    String key = CacheConstant.ORDER + id;
    Order order = (Order) cache.get(key,
            k -> {
                //先查询 Redis
                Object obj = redisTemplate.opsForValue().get(k);
                if (Objects.nonNull(obj)) {
                    log.info("get data from redis");
                    return obj;
                }

                // Redis没有则查询 DB
                log.info("get data from database");
                Order myOrder = orderMapper.selectOne(new LambdaQueryWrapper<Order>()
                        .eq(Order::getId, id));
                redisTemplate.opsForValue().set(k, myOrder, 120, TimeUnit.SECONDS);
                return myOrder;
            });
    return order;
}

 查找顺序为Caffeine中的本地缓存-》redis->DB

上面的例子中Caffeine中的过期时间为60s,Redis的过期时间为120.

再举个更新的例子说明一下

public void updateOrder(Order order) {
    log.info("update order data");
    String key=CacheConstant.ORDER + order.getId();
    orderMapper.updateById(order);
    //修改 Redis
    redisTemplate.opsForValue().set(key,order,120, TimeUnit.SECONDS);
    // 修改本地缓存
    cache.put(key,order);
}

 核心思想:Caffeine>redis>DB

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值