Jedis 设置key的超时时间

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

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

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

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

方法名: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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9月前
|
消息中间件 NoSQL Java
Redis监听Key的过期事件
在redis.conf配置文件中有个配置项:notify-keyspace-events " " ,默认是没有key的过期监听的,我们需要将其开启
927 0
|
9月前
|
NoSQL Java Redis
redis: jedis连接超时(需要手动注入连接超时检测的配置)
redis: jedis连接超时(需要手动注入连接超时检测的配置)
281 0
|
20天前
|
存储 NoSQL 算法
Redis中删除过期Key的三种策略
Redis中删除过期Key的三种策略
27 0
|
2月前
|
NoSQL Java Redis
springboot整合redis过期key监听实现订单过期操作
springboot整合redis过期key监听实现订单过期操作
62 0
|
5月前
|
NoSQL Java Redis
Springboot Jedis Redis集群过期时间expireAt设置问题
Springboot Jedis Redis集群过期时间expireAt设置问题
|
6月前
|
缓存 NoSQL Unix
Redis 过期键的删除策略
Redis 过期键的删除策略
33 0
|
7月前
|
NoSQL Redis 数据库
【Redis从头学-9】只需三张图,带你理解Redis中过期时间Key的删除策略
【Redis从头学-9】只需三张图,带你理解Redis中过期时间Key的删除策略
98 0
|
8月前
|
存储 NoSQL Redis
redisTemplate.opsForValue().get(KEY)从Redis中取出的值为null 的解决方法
redisTemplate.opsForValue().get(KEY)从Redis中取出的值为null 的解决方法
223 0
|
10月前
|
NoSQL Java Redis
Redis 从入门到精通之Redis操作设置Key超时时间
Redis中可以使用`EXPIRE`命令为key设置超时时间,也可以使用`PEXPIRE`命令为key设置毫秒级别的超时时间。当key的超时时间到期后,key会被自动删除。
635 0