微网站工程案例展示,网络推广公司,wordpress 视频主题,泰安招聘网站有哪些Redis是基础客户端库#xff0c;可用于执行基本操作。 Redisson是基于Redis的Java客户端#xff0c;提供高级功能如分布式锁、分布式集合和分布式对象。 Redisson提供更友好的API#xff0c;支持异步和响应式编程#xff0c;提供内置线程安全和失败重试机制。
实现步骤… Redis是基础客户端库可用于执行基本操作。 Redisson是基于Redis的Java客户端提供高级功能如分布式锁、分布式集合和分布式对象。 Redisson提供更友好的API支持异步和响应式编程提供内置线程安全和失败重试机制。
实现步骤 dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.12.0/version/dependency Configuration
public class MyRedissonConfig {Beanpublic RedissonClient redisson(){Config config new Config();config.useSingleServer().setAddress(redis://192.168.127.129:6379);RedissonClient redissonClient Redisson.create(config);return redissonClient;}
}
通过导入坐标和配置注入RedissonClient对象之后就可以通过API操作
如获取可重入锁
ResponseBody //因为返回的是json数据GetMapping(/hello)public String hello(){//获取一把锁 只要锁的名字一样就是通一把锁 是一个可重入的锁RLock myLock redissonClient.getLock(myLock);/**** 默认都是30s* 加锁 阻塞式等待 锁的自动续期看门狗原理(如果业务超长会在运行期间自动给锁续上新的30秒)* 不要担心锁自动过期被删除* 加锁的业务完成就不会续期即使不手动解锁锁也会在30秒之后自动解锁 所有不会有死锁问题*/// myLock.lock();//阻塞式等待myLock.lock(10, TimeUnit.SECONDS);//获取锁之后10秒之后自动解锁 不会自动续期 自动解锁时间一定要大于业务执行事件 注意使用try {//业务代码System.out.println(加锁成功 执行业务。。。。 Thread.currentThread().getId());Thread.sleep(20000);}catch (Exception e){}finally {//解锁System.out.println(释放锁。。。。 Thread.currentThread().getId());myLock.unlock();}return hello;}
读写锁保证一定能读到最新数据修改期间写锁是一个排他锁 如果都是读则都会同时加锁成功可以理解为无锁 如果先写后读则必须等待写锁释放才行 如果同时写也必须等待写锁释放才行阻塞的方式、如何 如果先读后写也必须等待读锁释放
写锁是一个互斥锁
读锁是一个共享锁和无锁是一样的 ResponseBody //因为返回的是json数据GetMapping(/read)public String readValue(){//获取读写锁RReadWriteLock readWriteLock redissonClient.getReadWriteLock(rw-Lock);String s ;RLock rLock readWriteLock.readLock();rLock.lock();try{s redisTemplate.opsForValue().get(rwLock);}catch (Exception e){}finally {rLock.unlock();}return s;}ResponseBody //因为返回的是json数据GetMapping(/write)public String writeValue(){//获取读写锁RReadWriteLock readWriteLock redissonClient.getReadWriteLock(rw-Lock);RLock rLock readWriteLock.writeLock();String s UUID.randomUUID().toString();try{rLock.lock();redisTemplate.opsForValue().set(rwLock, s);Thread.sleep(30000);}catch (Exception e){}finally {rLock.unlock();}return s;} 信号量典型案例车库停车等。。。。 闭锁案例放假 锁门