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

相关文章
|
JSON 数据格式
Redisson官方文档 - 4. 数据序列化
Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储。Redisson提供了多种的对象编码供大家选择。
11197 0
|
存储 缓存 NoSQL
Redis 服务器全方位介绍:从入门到核心原理
Redis是一款高性能内存键值数据库,支持字符串、哈希、列表等多种数据结构,广泛用于缓存、会话存储、排行榜及消息队列。其单线程事件循环架构保障高并发与低延迟,结合RDB和AOF持久化机制兼顾性能与数据安全。通过主从复制、哨兵及集群模式实现高可用与横向扩展,适用于现代应用的多样化场景。合理配置与优化可显著提升系统性能与稳定性。
876 0
|
10月前
|
算法 Java 定位技术
迷宫问题
迷宫问题是指在给定区域内寻找从起点到终点的可行路径。可以使用回溯算法解决,通过不断尝试四个方向(上下左右)移动,若无法前进则回退,直到找到终点或遍历所有可能路径。文中还给出了C语言、Java和Python的实现代码,并展示了运行结果。
379 0
|
SQL Java Kotlin
MybatisPlus怎么拓展自定义BaseMapper
通过扩展Mybatis-Plus的`BaseMapper`,可以自定义SQL模板以满足特定业务需求。例如,当遇到唯一键冲突而不希望抛出异常时,可使用`INSERT IGNORE`语法。首先,创建`InsertIgnore`类继承`AbstractMethod`并定义`insertIgnore`方法及其SQL模板。接着,在自定义的`UltraBaseMapper`接口中声明`insertIgnore`方法,并让业务Mapper继承此接口。最后,通过`UltraSqlInjector`类将`InsertIgnore`方法注册到Mybatis-Plus插件中。
1021 1
|
运维 NoSQL 测试技术
从一个事故中理解Redis(几乎)所有知识点
作者从一个事故中总结了Redis(几乎)所有的知识点,供大家学习。
588 12
|
10月前
|
消息中间件 缓存 前端开发
如何开发绩效管理(OKR)系统的OKR考核板块?(附架构图+流程图+代码参考)
在人力成本攀升的当下,企业越来越重视绩效管理。一个高效的绩效管理系统,能帮助企业明确战略目标、提升员工驱动力、优化资源配置。本文详解基于OKR(目标与关键成果)的绩效考核系统,涵盖部门与员工两个层面,从架构设计、功能模块、业务流程到开发实现,提供完整的落地方案,包含架构图、流程图、数据库设计与代码示例,适合开发者快速上手。
Saga模式在处理长事务时有哪些优势和潜在的缺陷
Saga模式在处理长事务时有哪些优势和潜在的缺陷
|
机器学习/深度学习 人工智能 自然语言处理
从词袋到Transformer:自然语言处理的演进与实战
自然语言处理(NLP)是人工智能的重要分支,从早期的规则系统发展到如今的深度学习模型,经历了词袋模型、词嵌入、RNN/LSTM/GRU,再到革命性的Transformer架构。本文通过代码和案例详细介绍了这些技术的演进,并展示了如何从简单的词袋模型过渡到强大的Transformer,涵盖文本分类等实战应用,帮助读者深入理解NLP的核心技术和未来发展潜力。
简单易操作 VsCoe离线安装插件【步骤+图片+插件】
这篇文章介绍了在Visual Studio Code (VSCode) 中进行离线安装插件的详细步骤,包括如何下载插件、以SVN插件为例的离线安装过程、通过命令行安装以及一个更加简单的离线安装方式,还提供了操作界面的截图帮助理解。
简单易操作 VsCoe离线安装插件【步骤+图片+插件】
|
机器学习/深度学习 自然语言处理 知识图谱