1,redis 报异常
redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value
@Test public void test_faildTime(){ String identify="13718486139"; int failedTime=WapController.getFailedCount(identify); System.out.println(failedTime); }
/*** * 获取失败次数<br> * 限制IP * @param httpSession * @param request * @param response * @return */ public static int getFailedCount(String identify) { int count = 0; String retryString = RedisHelper.getInstance().getKeyCache(identify, "failCount"); if(!StringUtil.isNullOrEmpty(retryString)) { count = new Integer(retryString).intValue(); } System.out.println("getFailedCount\tcount:"+count); return count; }
原因:jedis.hget(id, k)的第一个参数(id)是"13718486139"
奇怪的是换成"23718486139"就好了,真是诡异
2,保存时设置超时时间
调用的是Jedis类中的:
/** * Set the string value as value of the key. The string can't be longer than 1073741824 bytes (1 * GB). * @param key * @param value * @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 expx EX|PX, expire time units: EX = seconds; PX = milliseconds * @param time expire time in the units of {@param #expx} * @return Status code reply */ public String set(final String key, final String value, final String nxxx, final String expx, final long time) { checkIsInMulti(); client.set(key, value, nxxx, expx, time); return client.getStatusCodeReply(); }
封装之后:
/*** * 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); } } }
3,应用
登录或者发送短信验证码,连续失败三次则弹出图形验证码
如何记录失败次数呢?
/*** * 获取失败次数<br> * 限制登录名(手机号或邮箱) * @param httpSession * @param request * @param response * @return */ public static int getFailedCount(String identify) { int count = 0; String retryString = RedisHelper.getInstance().getKeyCache(identify, "failCount"); if(!StringUtil.isNullOrEmpty(retryString)) { count = new Integer(retryString).intValue(); } System.out.println("getFailedCount\tcount:"+count); return count; } /*** * 增加失败次数 * @param httpSession * @param request * @param response */ public static void increaseFailedCount(String identify) { String retryString = RedisHelper.getInstance().getKeyCache(identify, "failCount"); int count=0; if(!StringUtil.isNullOrEmpty(retryString)) { count = new Integer(retryString).intValue(); } count++; System.out.println("increaseFailedCount\tcount:"+count); RedisHelper.getInstance().saveKeyCache(identify, "failCount", String.valueOf(count)); } /*** * 清空失败次数 * @param httpSession * @param request * @param response */ public static void clearFailedCount(String identify) { RedisHelper.getInstance().clearKeyCache(identify, "failCount"); }
优化为:
/*** * 获取失败次数<br> * 限制登录名(手机号或邮箱) * @param httpSession * @param request * @param response * @return */ public static int getFailedCount(String identify) { int count = 0; String retryString = RedisHelper.getInstance().getCache("failCount"+identify); if(!StringUtil.isNullOrEmpty(retryString)) { count = new Integer(retryString).intValue(); } System.out.println("getFailedCount\tcount:"+count); return count; } /*** * 增加失败次数 * @param httpSession * @param request * @param response */ public static void increaseFailedCount(String identify) { String retryString = RedisHelper.getInstance().getCache("failCount"+identify); int count=0; if(!StringUtil.isNullOrEmpty(retryString)) { count = new Integer(retryString).intValue(); } count++; System.out.println("increaseFailedCount\tcount:"+count); RedisHelper.getInstance().saveCache("failCount"+identify, String.valueOf(count)); } /*** * 清空失败次数 * @param httpSession * @param request * @param response */ public static void clearFailedCount(String identify) { RedisHelper.getInstance().clearCache("failCount"+identify); }
相关推荐
但是,在 Linux Centos7.5 环境中安装 Redis 时可能会遇到一些问题,这篇文章将针对这些问题进行解决。 一、无法编译没有 GCC 在安装 Redis 时,可能会遇到编译错误,错误信息为: make[1]: [persist-settings] ...
在学习过程中,你可能会遇到一些常见问题,比如数据持久化、主从复制和哨兵系统。数据持久化可以防止重启时数据丢失,Redis提供了RDB快照和AOF日志两种方式。主从复制确保了数据的高可用性,当主节点故障时,可以从...
在实际使用中,Redis容器可能会遇到多种问题,以下将对这些问题进行深入的探讨和分析。 首先,我们需要了解Redis的基础架构。Redis基于C语言编写,通过TCP协议提供服务,其数据持久化策略包括RDB(快照)和AOF...
在使用 Redis 过程中,可能会遇到各种问题,比如本文件中提到的 `RedisCommandExecutionException`。这个问题通常与 Redis 的数据持久化功能有关,特别是当 RDB 快照保存时遇到错误。 1.1 ...
本书深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了...第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。
关于Redis集群的实践,美团遇到的几个主要问题包括master和slave节点部署在同一台机器上、单机多实例部署、以及使用redis-trib.rb工具创建集群和添加slave节点时的问题。在创建集群过程中,需要考虑网络、节点配置和...
2. **BUGS**:包含了已知的错误和问题列表,用户可以通过这个文件了解可能遇到的问题及其解决方案。 3. **CONTRIBUTING**:贡献指南,对于想要参与Redis开发的程序员来说,这个文件会指导他们如何提交代码和贡献到...
在尝试使用Jedis客户端通过网络连接Linux服务器上的Redis时,可能会遇到一个常见的错误提示:“DENIED Redis is running in protected mode”。这个问题通常出现在Linux环境下,当Redis服务启动时默认开启了一个安全...
第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。 综上所述, 本书将是一本对于学习和使用 Redis 来说不可多得的参考...
第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。 综上所述, 本书将是一本对于学习和使用 Redis 来说不可多得的参考...
第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。 综上所述, 本书将是一本对于学习和使用 Redis 来说不可多得的参考...
Redis实战pdf,带完整版的结果目录,carlson 著,黄健宏 译;本书一共由三个部分组成。...第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言...
第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。 综上所述, 本书将是一本对于学习和使用 Redis 来说不可多得的参考...
第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。, 综上所述, 本书将是一本对于学习和使用 Redis 来说不可多得的参考...
Redis拥有活跃的社区和详尽的官方文档,遇到问题时,可以查阅文档或在线寻求帮助。Redis的GitHub仓库也有许多实用的示例和教程。 以上就是关于"redis32位安装包"的相关知识点,希望对你在Windows环境下安装和使用...
本书深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了...第三部分对Redis用户经常会遇到的一些问题进行了介绍,讲解了降低Redis内存占用的方法、扩展Redis性能的方法以及使用Lua语言进行脚本编程的方法。
- `EventLog.dll`:可能用于在Windows系统上集成事件日志服务,方便监控和调试Redis运行时的问题。 4. **pdb文件**: - `redis-check-rdb.pdb`和`redis-server.pdb`:这些是程序数据库文件,包含了调试信息。当...
作者在尝试使用LuaScript.Prepare()后加载执行Lua脚本时遇到了问题,而直接使用ScriptEvaluateAsync()方法执行Lua脚本则没有问题。这可能是由于脚本缓存或准备阶段的某些细节处理不当所致。在Redis中,Lua脚本可以...
它的全称是Remote Dictionary Server,由Salvatore Sanfilippo创建,最初是为了解决他在开发Lisp机器上的一个Web应用时遇到的性能问题。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,且所有的...
书籍的结构清晰,从安装Redis开始,介绍了如何在不同环境下安装Redis,以及如何解决安装过程中可能遇到的问题。接着,作者对Redis的数据类型进行了详细讨论,帮助读者更好地理解并使用Redis的数据结构,例如字符串...