Jedis 设置key的超时时间

简介:

一分钟之内只能发送一次短信,

若用户刷新页面,然后输入原来的手机号,则继续计时

方案:服务器端要记录时间戳

方法名:sMSWaitingTime

功能:返回倒计时剩余时间,单位秒

 

Java代码   收藏代码
  1. /*** 
  2.      * 倒计时还剩余多长时间 
  3.      * @param mobile : 手机号 
  4.      * @return : second 
  5.      */  
  6.     public int sMSWaitingTime(String mobile) {  
  7.         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();  
  8.         HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();  
  9.         RedisHelper rdsHelper = RedisHelper.getInstance();  
  10.         String cid = getCid(request, response);  
  11.           
  12.         String lastSendSMSTime = rdsHelper.getCache(cid+mobile);//getKeyCache(request, response, mobile) ;  
  13.   
  14.         if(StringUtil.isNullOrEmpty(lastSendSMSTime)) {  
  15.             saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()),60);  
  16.             return 0;  
  17.         } else {  
  18.             long lastSendSMSTimeSecond=Long.parseLong(lastSendSMSTime);  
  19.             long currentTimeSecond=DateTimeUtil.getCurrentTimeSecond();  
  20.             int delter=(int) (currentTimeSecond-lastSendSMSTimeSecond);  
  21.             System.out.println("delter:"+delter);  
  22.             if(delter>=60){  
  23.                 return 0;  
  24.             }else{  
  25.                 return 60-delter;  
  26.             }  
  27.         }  
  28.     }  

 

jedis 可以设置key的超时时间:

Java代码   收藏代码
  1. public /*synchronized*/ void saveExpxKeyCache(HttpServletRequest request, HttpServletResponse response, String k, String v,long time) {  
  2.   
  3.         String cid = getCid(request, response);  
  4.   
  5. //        logger.debug("cid is " + cid);  
  6. //        logger.debug("set " + k + " to value : " + v);  
  7.   
  8.         RedisHelper helper = RedisHelper.getInstance();  
  9.         helper.saveExpxKeyCache(cid+k,  v,time);  
  10.   
  11. //        jedis.hset(httpSession.getId(), k, v);  
  12. //        jedis.expire(httpSession.getId(), 3600);  
  13.   
  14.   
  15.     }  
  16.   
  17.  /*** 
  18.      * Only set the key if it does not already exist 
  19.      * 
  20.      * @param k 
  21.      * @param v 
  22.      * @param time : second 
  23.      */  
  24.     public void saveExpxKeyCache(String k, String v, long time) {  
  25.         saveExpxKeyCache(k, v, "NX", time);  
  26.     }  
  27.   
  28.     /*** 
  29.      * @param k 
  30.      * @param v 
  31.      * @param nxxx :  NX|XX, NX -- Only set the key if it does not already exist. XX -- Only set the key 
  32.      *             if it already exist. 
  33.      * @param time : second 
  34.      */  
  35.     public void saveExpxKeyCache(String k, String v, String nxxx, long time) {  
  36.         Jedis jedis = Const.pool.getResource();  
  37.         try {  
  38.             jedis.set(k, v, nxxx, "EX"/*seconds*/, time);  
  39.         } catch (Exception e) {  
  40.             e.printStackTrace();  
  41.             logger.error("saveKeyCache", e);  
  42.             Const.pool.returnBrokenResource(jedis);  
  43.             jedis = null;  
  44.         } finally {  
  45.             if (jedis != null) {  
  46.                 Const.pool.returnResource(jedis);  
  47.             }  
  48.         }  
  49.     }  

 

 

参考:

http://hw1287789687.iteye.com/blog/2225130

相关文章
|
NoSQL Java Redis
Redisson是GitHub里星星最多的Redis Java客户端
Redisson成为GitHub里星星最多的Redis Java客户端
13821 0
|
JSON 数据格式
Redisson官方文档 - 4. 数据序列化
Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储。Redisson提供了多种的对象编码供大家选择。
11062 0
|
存储 缓存 NoSQL
Redis 服务器全方位介绍:从入门到核心原理
Redis是一款高性能内存键值数据库,支持字符串、哈希、列表等多种数据结构,广泛用于缓存、会话存储、排行榜及消息队列。其单线程事件循环架构保障高并发与低延迟,结合RDB和AOF持久化机制兼顾性能与数据安全。通过主从复制、哨兵及集群模式实现高可用与横向扩展,适用于现代应用的多样化场景。合理配置与优化可显著提升系统性能与稳定性。
678 0
|
运维 NoSQL 测试技术
从一个事故中理解Redis(几乎)所有知识点
作者从一个事故中总结了Redis(几乎)所有的知识点,供大家学习。
488 12
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
329 13
|
SQL Java Kotlin
MybatisPlus怎么拓展自定义BaseMapper
通过扩展Mybatis-Plus的`BaseMapper`,可以自定义SQL模板以满足特定业务需求。例如,当遇到唯一键冲突而不希望抛出异常时,可使用`INSERT IGNORE`语法。首先,创建`InsertIgnore`类继承`AbstractMethod`并定义`insertIgnore`方法及其SQL模板。接着,在自定义的`UltraBaseMapper`接口中声明`insertIgnore`方法,并让业务Mapper继承此接口。最后,通过`UltraSqlInjector`类将`InsertIgnore`方法注册到Mybatis-Plus插件中。
820 1
|
NoSQL 安全 Java
分布式锁实现原理与最佳实践
在单体的应用开发场景中涉及并发同步时,大家往往采用Synchronized(同步)或同一个JVM内Lock机制来解决多线程间的同步问题。而在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。接下来本文将为大家分享分布式锁的最佳实践。
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
838 3
Saga模式在处理长事务时有哪些优势和潜在的缺陷
Saga模式在处理长事务时有哪些优势和潜在的缺陷
简单易操作 VsCoe离线安装插件【步骤+图片+插件】
这篇文章介绍了在Visual Studio Code (VSCode) 中进行离线安装插件的详细步骤,包括如何下载插件、以SVN插件为例的离线安装过程、通过命令行安装以及一个更加简单的离线安装方式,还提供了操作界面的截图帮助理解。
简单易操作 VsCoe离线安装插件【步骤+图片+插件】

热门文章

最新文章