如何给热点数据设置过期时间

在Spring Boot项目中,我们通常使用缓存框架(如Spring Cache、Caffeine、Redis等)来缓存热点数据,并设置这些数据的过期时间。以下是一些常见的缓存框架及其如何设置过期时间的方法:

1. 使用Spring Cache(基于Caffeine、EhCache、Redis等)

Spring Cache是一个抽象层,它支持多种缓存解决方案。以下是一个基于Caffeine的示例:

<dependency>  
    <groupId>com.github.ben-manes.caffeine</groupId>  
    <artifactId>caffeine</artifactId>  
    <version>你的版本号</version>  
</dependency>
配置Caffeine缓存
@Configuration  
@EnableCaching  
public class CacheConfig {  
  
    @Bean  
    public CacheManager cacheManager() {  
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();  
        // 配置缓存名、过期时间等  
        cacheManager.setCaffeine(caffeineCacheBuilder());  
        return cacheManager;  
    }  
  
    private Caffeine<Object, Object> caffeineCacheBuilder() {  
        return Caffeine.newBuilder()  
                .expireAfterWrite(10, TimeUnit.MINUTES) // 设置写入后10分钟过期  
                .maximumSize(100); // 设置缓存最大容量  
    }  
}
@Service  
public class MyService {  
  
    @Cacheable(value = "hotData", key = "#id")  
    public String getHotData(String id) {  
        // 模拟从数据库获取数据  
        return "Data for " + id;  
    }  
}

2. 使用Redis作为缓存

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-data-redis</artifactId>  
</dependency>

配置Redis

spring:  
  redis:  
    host: localhost  
    port: 6379  
    jedis:  
      pool:  
        max-active: 8  
        max-wait: -1ms  
        max-idle: 8  
        min-idle: 0  
    timeout: 5000
使用RedisTemplate设置过期时间
@Service  
public class RedisService {  
  
    @Autowired  
    private StringRedisTemplate redisTemplate;  
  
    public void setHotData(String key, String value, long expireInSeconds) {  
        redisTemplate.opsForValue().set(key, value, expireInSeconds, TimeUnit.SECONDS);  
    }  
  
    public String getHotData(String key) {  
        return redisTemplate.opsForValue().get(key);  
    }  
}
  • 缓存击穿问题通常发生在热点数据过期时,大量请求同时访问数据库。为了解决这个问题,你可以使用互斥锁(如Redis的SETNX命令)来确保只有一个线程去加载数据到缓存中。
  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值