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

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

  1. 分布式锁(基于redis和zookeeper)详解

    分布式锁(基于redis和zookeeper)详解 https://blog.csdn.net/a15835774652/article/details/81775044 为什么写这篇文章? 目前网上 ...

  2. php使用redis分布式锁,php基于redis的分布式锁实例详解

    在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现. 固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效 ...

  3. ZooKeeper(三) 什么是分布式锁以及使用Redis手写实现

    一.什么是分布式锁? 分布式锁是相对于单体单机应用而言的一种锁机制.在单机应用时由于共享一个jvm,可以使用同一个java Lock对象进行获取锁,解锁操作.当为分布式集群时存在跨机器请求执行,无法共 ...

  4. 分布式锁实现:Redis

    前言 单机环境下我们可以通过JAVA的Synchronized和Lock来实现进程内部的锁,但是随着分布式应用和集群环境的出现,系统资源的竞争从单进程多线程的竞争变成了多进程的竞争,这时候就需要分布式 ...

  5. zookeeper 分布式锁_关于redis分布式锁,zookeeper分布式锁原理的一些学习与思考

    编辑:业余草来源:https://www.xttblog.com/?p=4946 首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法 ...

  6. python redis分布式锁_Python 使用 Redis 实现分布式锁

    前言 随着互联网技术的不断发展,用户量的不断增加,越来越多的业务场景需要用到分布式系统.而在分布式系统中访问共享资源就需要一种互斥机制,来防止彼此之间的互相干扰,以保证一致性,这个时候就需要使用分布式 ...

  7. 阿里面试官:分布式锁到底用Redis好?还是Zookeeper好?

    首先,分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在 ...

  8. 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)

    1. 数据结构 1.1 字典 dictht 是一个散列表结构,使用拉链法保存哈希冲突的 dictEntry /* This is our hash table structure. Every dic ...

  9. Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结

    一.基于数据库实现分布式锁 1.1.悲观锁 利用select - where - for update 排他锁.注意: 其他附加功能与实现一基本一致,这里需要注意的是"where name= ...

最新文章

  1. 如何将Numpy加速700倍?用 CuPy 呀
  2. 网站外链如何发布才能更快的得到高排名呢?
  3. TCP的那些事(转载)
  4. 计算机基础知识关于进制,计算机基础知识-- 进制和编码
  5. Linux并发与竞争实验(一次只允许一个应用程序操作LED灯)
  6. Helpdesk 流程
  7. Node出错导致运行崩溃的解决方案
  8. 分时系统是计算机网络嘛,简述计算机网络与分时多用户系统多机系统分布式系统的区别...
  9. stcc52单片机时钟电路_单片机与晶振到底有什么关系?
  10. thinkphp-volist4
  11. 智能优化算法:海洋捕食者算法
  12. Hcse 交换知识点-1
  13. excel合并两列内容_excel新手问题:怎么把两列数据合并到一起?用这个公式
  14. R - 小鑫の日常系列故事(七)——小纸条
  15. 不积跬步无以至千里010
  16. 关于转换JSON列表错误导致结果出错的问题
  17. python列表对应元素相乘_在python中,将两个列表中的每个元素相乘
  18. 解决标题党的计算机算法用户app,今日头条算法工程师:做好推荐必须打击标题党...
  19. 陆军、海军、空军、雷军!
  20. Codeforces - Good Bye 2020

热门文章

  1. openOffice 安装
  2. 用word画出mysql的组织结构_如何用word画组织结构图
  3. php文件上传代码功能实现代码
  4. 苹果与微软之战 iPhone/S1对比评测
  5. 迅为RK3568开发板Buildroot系统功能评测
  6. 【拥抱开源】十年之做C#屏幕截图工具全面开源
  7. ase支持 urp不_粗见URP
  8. 前交叉韧带康复训练的办法
  9. android手表怎样刷机包,刷机精灵V2.1.2发布 智能手表也能一键刷机
  10. 华为OJ_1960_字符串分割