一分钟之内只能发送一次短信,
若用户刷新页面,然后输入原来的手机号,则继续计时
方案:服务器端要记录时间戳
方法名:sMSWaitingTime
功能:返回倒计时剩余时间,单位秒
/*** * 倒计时还剩余多长时间 * @param mobile : 手机号 * @return : second */ public int sMSWaitingTime(String mobile) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); RedisHelper rdsHelper = RedisHelper.getInstance(); String cid = getCid(request, response); String lastSendSMSTime = rdsHelper.getCache(cid+mobile);//getKeyCache(request, response, mobile) ; if(StringUtil.isNullOrEmpty(lastSendSMSTime)) { saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()),60); return 0; } else { long lastSendSMSTimeSecond=Long.parseLong(lastSendSMSTime); long currentTimeSecond=DateTimeUtil.getCurrentTimeSecond(); int delter=(int) (currentTimeSecond-lastSendSMSTimeSecond); System.out.println("delter:"+delter); if(delter>=60){ return 0; }else{ return 60-delter; } } }
jedis 可以设置key的超时时间:
public /*synchronized*/ void saveExpxKeyCache(HttpServletRequest request, HttpServletResponse response, String k, String v,long time) { String cid = getCid(request, response); // logger.debug("cid is " + cid); // logger.debug("set " + k + " to value : " + v); RedisHelper helper = RedisHelper.getInstance(); helper.saveExpxKeyCache(cid+k, v,time); // jedis.hset(httpSession.getId(), k, v); // jedis.expire(httpSession.getId(), 3600); } /*** * Only set the key if it does not already exist * * @param k * @param v * @param time : second */ public void saveExpxKeyCache(String k, String v, long time) { saveExpxKeyCache(k, v, "NX", time); } /*** * @param k * @param v * @param nxxx : NX|XX, NX -- Only set the key if it does not already exist. XX -- Only set the key * if it already exist. * @param time : second */ public void saveExpxKeyCache(String k, String v, String nxxx, long time) { Jedis jedis = Const.pool.getResource(); try { jedis.set(k, v, nxxx, "EX"/*seconds*/, time); } catch (Exception e) { e.printStackTrace(); logger.error("saveKeyCache", e); Const.pool.returnBrokenResource(jedis); jedis = null; } finally { if (jedis != null) { Const.pool.returnResource(jedis); } } }
参考:
http://hw1287789687.iteye.com/blog/2225130
相关推荐
2. **字符串操作**:`set(key, value)`设置键值对,`get(key)`获取键对应的值。 3. **哈希操作**:`hset(hashKey, field, value)`设置哈希表字段值,`hget(hashKey, field)`获取哈希表字段值。 4. **列表操作**:`...
2. 配置连接池:创建一个`JedisPoolConfig`对象,设置最大连接数、最大空闲连接、超时时间等参数。 ```java JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(100); poolConfig....
2. 设置超时时间:`jedis.connect();` 或 `jedis.connect(new RedisSentinelConfiguration(), timeout);` 3. 检查连接是否成功:`if (jedis.isConnected()) { ... }` Jedis 支持多种数据类型的操作,包括字符串...
Java 操作 Redis 缓存设置过期时间的方法可以使用 Jedis 客户端的 `expire` 方法或 `set` 方法的其他变体,合并设置值和过期时间,以避免多并发下的问题。在实际应用中,我们可以根据需要选择合适的方法来设置过期...
3. **超时设置**:定义获取连接或返回连接的超时时间,避免阻塞应用。 4. **测试策略**:配置检测连接是否有效的策略,例如定期检查或在获取连接前进行检查。 **使用示例** ```java JedisPoolConfig poolConfig = ...
这包括设置Redis服务器的IP地址、端口号、密码(如果启用了认证)以及超时时间等。例如: ```java public class JedisUtil { private static JedisPool pool; static { JedisPoolConfig config = new ...
2. **合理配置**:根据应用的并发量和Redis服务器的性能调整Jedis的超时时间、重试策略等参数。 3. **错误处理**:正确捕获并处理Jedis抛出的异常,避免程序因网络问题或其他异常情况而中断。 4. **批量操作**:尽...
- **配置参数调整**:根据实际需求调整Jedis的超时时间、重试策略等。 **6. 示例代码** 下面是一个简单的Jedis应用示例,展示了如何使用Jedis进行字符串操作、哈希操作和连接池的使用。 ```java import redis....
Java调用Redis工具类Jedis是Java开发...5. 使用合适的超时设置,避免因网络延迟导致的连接问题。 通过理解并熟练运用这些知识点,你将能够有效地使用Java通过Jedis与Redis进行数据交互,实现高效的数据存储和读取。
7. `expire(String key, int seconds)`:为键设置过期时间(以秒为单位),超时后键将自动删除。 8. `expireAt(String key, long unixTime)`:用 Unix 时间戳设置键的过期时间。 9. `ttl(String key)`:查询键的剩余...
例如,`jedis.set("key", "value")`用于设置键值对,`jedis.get("key")`用于获取值。 - **哈希(Hashes)**:哈希数据类型允许存储键值对的集合。`hset`、`hget`、`hgetAll`、`hdel`等方法用于操作哈希。如`jedis....
标题中的“jedis”和“common-pool”指的是在Java开发中常用的两个库,它们分别是Jedis和Apache Commons Pool。...在实际项目中,我们还需要关注连接池的大小设置、超时策略、异常处理等细节,以达到最佳的性能表现。
2. 配置合适的超时时间,防止阻塞操作导致应用僵死。 3. 对于大量操作,考虑使用事务或批处理以提高性能。 4. 注意及时释放资源,如关闭连接,避免内存泄漏。 总结,Jedis 2.0.0 是 Java 开发者与 Redis 交互的首选...
6. **Timeout**: 连接超时时间,单位通常为毫秒。 7. **Password**: 如果Redis服务器设置了密码,这里需要提供。 8. **Database**: 默认数据库编号,Redis支持0到15个数据库。 9. **ClientName**: 可选,为连接指定...
6. **连接配置**:用户可以通过配置参数设置超时时间、最大空闲连接数、最小空闲连接数等,以适应不同的应用场景。 **三、Jedis 2.9.0的源码分析** 1. **设计模式**:Jedis的源码中应用了多种设计模式,如工厂模式...
3. 执行命令:如`jedis.set("key", "value")`来设置键值对,`jedis.get("key")`来获取值。 4. 关闭连接:操作完成后,记得关闭Jedis实例或释放连接池中的连接。 在实际应用中,还需要注意以下几点: - 错误处理:...
在实际应用中,我们需要配置JedisPoolConfig,设置如最大活动对象数、最大空闲对象数、超时时间等参数,以满足应用的特定需求。 在使用这个依赖包时,我们需要在项目中引入jedis-2.9.0.jar和commons-pool2-2.4.2....
2. **合理设置超时时间**:根据实际网络环境调整连接和操作超时时间,防止阻塞。 3. **批量操作**:尽可能批量处理数据,减少网络交互次数。 4. **缓存结果**:对于不常变的数据,可以考虑缓存结果,减少对Redis的...
String value = jedis.get("key"); ``` Jedis支持多种连接池管理工具,如Apache Commons Pool2,这在处理大量并发请求时尤为重要,可以有效管理和重用连接,提高性能。此外,Jedis还支持配置超时、密码认证、选择...
# 可选配置:如密码、数据库索引、连接超时时间等 ``` 三、创建RedisTemplate Spring Data Redis提供了一个名为`RedisTemplate`的模板类,它是操作Redis的主要接口。我们可以通过Spring Boot的自动配置来获取实例...