redis中的自动过期机制怎么使用-亚博电竞手机版

redis中的自动过期机制怎么使用

本篇内容介绍了“redis中的自动过期机制怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

redis中的自动过期机制

实现需求:处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态

1.使用redis key自动过期出发事件通知
2.使用定时任务30分钟后检查
3.按照每分钟轮训检查

createtable`order_number`(`id`int(11)notnullauto_increment,`order_name`varchar(255)defaultnull,`order_status`int(11)defaultnull,`order_token`varchar(255)defaultnull,`order_id`varchar(255)defaultnull,primarykey(`id`))engine=innodbauto_increment=20defaultcharset=utf8;

一、使用redis key自动过期机制

当我们的key失效时,可以执行我们的客户端回调监听的方法。
需要在redis中配置:

1.打开redis.conf配置文件

viredis.conf

2. 在配置文件中查找notify-keyspace-events

/notify-keyspace-events

3. 修改为notify-keyspace-events ex

4.重启redis

二、springboot整合key失效监听

@configurationpublicclassredislistenerconfig{@beanredismessagelistenercontainercontainer(redisconnectionfactoryconnectionfactory){redismessagelistenercontainercontainer=newredismessagelistenercontainer();container.setconnectionfactory(connectionfactory);returncontainer;}}
@componentpublicclassrediskeyexpirationlistenerextendskeyexpirationeventmessagelistener{publicrediskeyexpirationlistener(redismessagelistenercontainerlistenercontainer){super(listenercontainer);}@resourceprivateordermapperordermapper;/***待支付*/privatestaticfinalintegerorder_staypay=0;/***失效*/privatestaticfinalintegerorder_invalid=2;/***使用该方法监听当我们的key失效的时候执行该方法**@parammessage*@parampattern*/@overridepublicvoidonmessage(messagemessage,byte[]pattern){stringexpirakey=message.tostring();system.out.println("该key:expirakey:" expirakey "失效啦~");//前缀判断ordertokenorderentityordernumber=ordermapper.getordernumber(expirakey);if(ordernumber==null){return;}//获取订单状态integerorderstatus=ordernumber.getorderstatus();//如果该订单状态为待支付的情况下,直接将该订单修改为已经超时if(orderstatus.equals(order_staypay)){ordermapper.updateorderstatus(expirakey,order_invalid);//库存加上1}}}
@restcontrollerpublicclassmembercontroller{@autowiredprivateusermapperusermapper;/****@return*/@requestmapping("/getlistmember")@cacheable(cachenames="member",key="'getlistmember'")publiclistgetlistmember(){returnusermapper.findmemberall();}}
@datapublicclassorderentity{privatelongid;privatestringordername;/***0待支付1已经支付*/privateintegerorderstatus;privatestringordertoken;privatestringorderid;publicorderentity(longid,stringordername,stringorderid,stringordertoken){this.id=id;this.ordername=ordername;this.orderid=orderid;this.ordertoken=ordertoken;}}
publicinterfaceordermapper{@insert("insertintoorder_numbervalues(null,#{ordername},0,#{ordertoken},#{orderid})")intinsertorder(orderentityorderentity);@select("selectidasid,order_nameasordername,order_statusasorderstatus,order_tokenasordertoken,order_idasorderidfromorder_number\n" "whereorder_token=#{ordertoken};")orderentitygetordernumber(stringordertoken);@update("\n" "\n" "updateorder_numbersetorder_status=#{orderstatus}whereorder_token=#{ordertoken};")intupdateorderstatus(stringordertoken,integerorderstatus);}

1.访问addorder接口

2.查看数据库数据

3. 10s后redis过期,执行回调机制

4.再次查看数据库,状态已被修改

“redis中的自动过期机制怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

展开全文
内容来源于互联网和用户投稿,文章中一旦含有亚博电竞手机版的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系亚博电竞手机版删除

最新文章

网站地图