Guaua本地缓存结合Redis缓存使用demo

该博客讨论了在处理客户端查询速度排序时,如何利用Guava Cache作为本地缓存,配合Redis实现高效的数据存储和检索。通过设置并发级别、初始化容量、最大大小和过期时间,Guava Cache提供了便捷的缓存管理。当本地缓存未命中时,查询Redis并更新缓存,确保数据的实时性。此外,还展示了如何使用RedisTemplate进行自增操作。
摘要由CSDN通过智能技术生成

业务背景:客户端请求的快慢查询速度排序,本地服务器内存缓存 > redis等缓存 >数据库查询,因此一些业务是可以缓存在本地内存的,而java自带的Map,CurrentHashMap则需要进行各种判断,而Guaua的Cache提供了各种API,方便开发者使用,因此使用Guaua的Cache缓存会更加适用。

@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
 * redis自增数缓存的key
 */
private static final String DEVICE_INC_COUNT = "device_inc_count";

/**
 * redis设备编码对应自增数的hash缓存key
 */
private static final String DEVICE_INC_VALUE = "device_inc_value";

private Cache<String, Object> localCache = CacheBuilder.newBuilder()
        .concurrencyLevel(16) // 并发级别
        .initialCapacity(1000) // 初始容量
        .maximumSize(10000) // 缓存最大长度
        .expireAfterAccess(30, TimeUnit.MINUTES) // 缓存30分钟没被使用就过期
        .build();

public Object getInc(String deviceCode) throws ExecutionException {
    Object inc = localCache.getIfPresent(deviceCode);
    if(inc != null) {
        return inc;
    }
    // 2.本地缓存未命中,从redis的hash缓存获取
    inc = (Integer)redisTemplate.opsForHash().get(DEVICE_INC_VALUE, deviceCode);
    // 3. redis的hash缓存中没有,说明是新设备,先为设备生成一个自增号
    if(inc == null) {
        inc = redisTemplate.opsForValue().increment(DEVICE_INC_COUNT);
        // 添加到redis hash缓存
        redisTemplate.opsForHash().put(DEVICE_INC_VALUE, deviceCode, inc);
    }
    // 4.添加到本地缓存
    localCache.put(deviceCode, inc);
    return 0;
}
public Object getObject(String key) throws ExecutionException {
    Object count = localCache.getIfPresent(key);
    return count;
}
public void putObject(String key,Object value){
    localCache.put(key,value);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力终会有回报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值