RedisConfig,RedissonConfig,ScheduledLockConfig,redid配置,分布式锁配置,基于redis的SchedulerLocks使用

1,redis配置
@Bean(name = “customJedisPool”)
public JedisPool getCustomJedisPool() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 这个配置项可以不用显式指定,jedis pool Config默认给的是-1,这里写出来只是为了解释下-1的含义:对连接池中的所有空闲连接进行检查
poolConfig.setNumTestsPerEvictionRun(-1);
// 5分钟
poolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
// 10分钟
poolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
return new JedisPool(poolConfig, host, Integer.parseInt(port), connectionTimeout, password);
}

2,RedissonConfig
@Configuration
public class RedissonConfig {

@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String password;

@Bean(destroyMethod="shutdown")
public RedissonClient redissonClient() throws IOException {
    Config config = new Config();
    SingleServerConfig singleServerConfig = config.useSingleServer().setAddress("redis://"+host+":"+port);

    if (StringUtils.isNotEmpty(password)) {
        singleServerConfig.setPassword(password);
    }
    System.out.println("redisson: "+config.getTransportMode());
    return Redisson.create(config);
}

分布式锁的使用

@Resource
private RedissonClient redissonClient;

     RLock lock = redissonClient.getLock("锁的名词");
    try {
    //  加锁
        lock.lock();
       // 业务逻辑

    } catch (Exception e) {
        e.printStackTrace();
    }finally {
    //释放锁
    lock.unlock();
    }

3,避免定时任务在多实例等情况下被执行多次
添加定时任务锁
@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = “PT10M”)
public class ScheduledLockConfig {
@Value(“${spring.profiles}”)
private String env;

@Bean
public LockProvider lockProvider(RedisConnectionFactory connectionFactory) {
    return new RedisLockProvider(connectionFactory,env);
}
@Bean
public ScheduledLockConfiguration scheduledLockConfiguration(LockProvider lockProvider) {
    return ScheduledLockConfigurationBuilder.withLockProvider(lockProvider)
            .withPoolSize(10)
            .withDefaultLockAtMostFor(Duration.ofMinutes(10)).build();
}

}

定时任务使用

@Scheduled(cron = "0/10 * * * * ?")
@SchedulerLock(name = "equipment_num_lock", lockAtLeastForString = "PT20S", lockAtMostForString = "PT1M")
public void checkEquipmentNumTasks() {
    // 业务逻辑
}

@SchedulerLock
配置redis 的时候注意格式 不然host会默认连接localhost

注意jedis 的配置格式
spring:
profiles: prod
redis:
host:
port: 6379
password:
connectTimeout: 2000
soTimeout: 2000
jedis:
pool:
max-idle: 30
min-idle: 20
max-wait: -1
max-active: 30
minEvictableIdleTimeMillis: 600000
time-between-eviction-runs: 300000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值