首页 > 编程知识 正文

spring整合redis详解,redis分布式存储方案

时间:2023-05-05 16:42:23 阅读:13064 作者:4335

步骤1 .自动为类添加主启动类: @EnableScheduling //添加计划任务aop和redis POM :

! --redis驱动----dependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-data-redis/art ification--面向AOP断开的编程--- dependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starterted

/* * @ program : * @ description :定时任务时钟* @ author : wangzhi dong * @ created 33602021/11/2909336006 */@ target @ retention (retention policy.runtime ) documented public @ interfacetasklock (/* * *定时任务名称* @ return */string ng /** *到期单位s (自动解锁时间,防止死锁(* @return */int expired ); /** *执行完成了吗? * @return */boolean unLock ()默认true; }定义分布式定时任务片的具体实现

/* * @ program : * @ description :定时任务时钟切面* @ author : wangzhi dong * @ created 33602021/10/2909336012 */@ aspect @ component @ slf4j @ allargsconstructor @ order (10 ) publicclasstasklockaspect { privateredistemplate @ pointcut (' @ annotation (com.Wang.timed task.annotation.task lock ) ) ) public void TaskLockAspect ) {}@around publicobjectdoaround (proceedingjoinpointproceedingjoinpoint, 任务锁定任务锁定throws throwable { string value=uuid.rand dang try { if (lock (任务锁定. key ) )、value、任务锁定. expid }catch(exceptione ) { log.error )定时任务执行失败,()、taskLock.key )、e ); } finally { //执行完成时解除锁定if (! taskLock.unLock (() ) { return null; } stringlockvalue=getlockvalue (task lock.key ) ); if (string utils.isempty (lock value ) |! lockvalue.equals(value ) ) { return null; //解锁设置为延迟1 s解锁(tasklock.key ) ); }返回空值; } /** *锁* @ param key * @ param value * @ param time * @ return */publicbooleanlock (string key,String value,int time ) } /** *解锁* @ param key */public void unlock (string key ) redistemplate.expire ) key,1,TimeUnit.SECONDS ); } /** *获取锁定值* @ param key * @ return */publicstringgetlockvalue (string key ) return ) redisTemplate.opsForValue }轻松

/* * @ authorwangzhidong * @ date 2021/8/22 *启动数据更正* */@ slf4j @ componentpublicclasstransferservice {公共静态接口} @scheduled(cron='0/5***? ) @tasklock(name='测试分布式定时任务每5秒运行一次',key='test_task ',expired=5) public void start ) ) num; 第一次运行system.out.println (local datetime.now ).format(formatter ) ' num ' ); }/* * *要使用公共定时任务*/@scheduled(cron='0/5****? ) @tasklock(name='测试分布式定时任务每5秒运行一次',key='test_task ',expired=5) public void start2) { TransferService.num system.out.println (local datetime.now ).format(formatter ) '第二次运行了' TransferService.num ' ); }@scheduled(cron='0/5***? ) @tasklock(name='测试分布式定时任务5秒执行一次',key='test_task ',expired=5) public void start3) { TransferService.num system.out.println (local datetime.now ).format(formatter ) '第二次运行' TransferService.num ' (这是第三次) ); }执行结果:

第2021-12-01143360353360401次执行是第一次

第二次执行2021-12-01143360353360452次

这是第三次执行2021-12-01143360353360503次

第2021-12-01143360353360554次执行是第三次

这是第二次执行2021-12-01143360363360005次

第一次运行于2021-12-01143360363360056次

第2021-12-01143360363360107次执行是第三次

第一次运行于2021-12-01143360363360158次

第2021-12-01143360363360209次执行是第二次

第2021-12-011433603633602510次执行是第三次

第一次运行于2021-12-01 14:36:30次

.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。