坑1:直接在Idea里面,建TestNG的Test类时,里面的多线程代码,一直会提示报错,没有任何提示,直接就test任务结束。解决方案:使用main建入口的方式进行测试,千万不要使用testng的@Test注解这种方式进行测试。原因,估计是多线程引起的。怎么弄还不明白,只能换成main方法里面去执行多线程。坑2:多线程并发会造成冲突,会报各种错。解决方法:使用JRedisPool建立线程池。而且在操作时,使用synchronized把操作方法进行封装。否则依然会报错。坑3: 超出线程池容量。1000个线程,会报大量的错。 解决方法: JedisPoolConfig里面设置
//Redis服务器IPprivate static String ADDR_ARRAY = "127.0.0.1";//Redis的端口号private static int PORT = 6379;//访问密码private static String AUTH = "";//可用连接实例的最大数目,默认值为8;//如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。private static int MAX_ACTIVE = 500;//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。private static int MAX_IDLE = 100;//等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;private static int MAX_WAIT = 10 * 1000;private static int TIMEOUT = 10 * 1000;//超时时间//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;private static boolean TEST_ON_BORROW = true;private static JedisPool jedisPool = null;/*** 初始化Redis连接池*/private static void initialPool() {try {JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(MAX_ACTIVE);config.setMaxIdle(MAX_IDLE);config.setMaxWaitMillis(MAX_WAIT);config.setTestOnBorrow(TEST_ON_BORROW);//使用时进行扫描,确保都可用config.setTestWhileIdle(true);//Idle时进行连接扫描config.setTestOnReturn(true);//还回线程池时进行扫描
//
表示idle object evitor两次扫描之间要sleep的毫秒数
//            config.setTimeBetweenEvictionRunsMillis(30000);
//
表示idle object evitor每次扫描的最多的对象数
//            config.setNumTestsPerEvictionRun(10);
//
表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
//            config.setMinEvictableIdleTimeMillis(60000);if (StringUtils.isNotBlank(AUTH)) {jedisPool = new JedisPool(config, ADDR_ARRAY.split(",")[0], PORT, TIMEOUT, AUTH);} else {jedisPool = new JedisPool(config, ADDR_ARRAY.split(",")[0], PORT, TIMEOUT);}} catch (Exception e) {logger.error("First create JedisPool error : " + e);try {//如果第一个IP异常,则访问第二个IPJedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(MAX_ACTIVE);config.setMaxIdle(MAX_IDLE);config.setMaxWaitMillis(MAX_WAIT);config.setTestOnBorrow(TEST_ON_BORROW);jedisPool = new JedisPool(config, ADDR_ARRAY.split(",")[1], PORT, TIMEOUT, AUTH);} catch (Exception e2) {logger.error("Second create JedisPool error : " + e2);}}}/*** 在多线程环境同步初始化*/private static synchronized void poolInit() {if (jedisPool == null) {initialPool();}}/*** 同步获取Jedis实例** @return Jedis*/public synchronized static Jedis getJedis() {if (jedisPool == null) {poolInit();}Jedis jedis = null;try {if (jedisPool != null) {jedis = jedisPool.getResource();}} catch (Exception e) {logger.error("Get jedis Error : " + e.getMessage(), e);} finally {returnResource(jedis);//归还到Redis池里面}return jedis;}/*** 释放jedis资源** @param jedis*/public static void returnResource(final Jedis jedis) {if (jedis != null && jedisPool != null) {jedisPool.returnResource(jedis);}}/*** 关闭连接池*/public static void closePool() {if (jedisPool != null) {jedisPool.close();}}/*** 设置 String** @param key* @param value*/public synchronized static void setString(String key, String value) {try {value = StringUtils.isEmpty(value) ? "" : value;getJedis().set(key, value);} catch (Exception e) {logger.error("Set key error : " + e);}}/*** 设置 过期时间** @param key* @param seconds 以秒为单位* @param value*/public synchronized static void setString(String key, int seconds, String value) {try {value = StringUtils.isEmpty(value) ? "" : value;getJedis().setex(key, seconds, value);} catch (Exception e) {logger.error("Set keyex error : " + e);}}/*** 获取String值** @param key* @return value*/public synchronized static String getString(String key) {if (getJedis() == null || !getJedis().exists(key)) {return null;}return getJedis().get(key);}}

  

转载于:https://www.cnblogs.com/albertzhangyu/p/9767823.html

Idea和redis的坑相关推荐

  1. Redis 脱坑指南

    原文地址:Redis 脱坑指南 博客地址:http://www.extlight.com 一.前言 Redis 是一款 key-value 内存数据库.由于其上手快,执行效率高,拥有多种数据结构,支持 ...

  2. Redis爬坑记(一):incr命令和expire命令的误区

    关注公众号 要实现的功能:限制用户的每分钟的访问次数一个有严重bug的代码:每次访问来了,就执行代码块二,当第一次访问,就走else语句,设置当前用户的次数为1,且设置该key的有效期是一分钟. 在一 ...

  3. 厚积薄发打卡Day55 :[狂神]Redis详细教程(上)<从Nosql 概述到WSL安装Redis踩坑记录>

    视频教程:[狂神说Java]Redis最新超详细版教程通俗易懂 Nosql概述 时代背景: 1.单机数据库时代 90年代:一个基本的网站访问量一般不会太大,单个数据库完全足够! 那个时候,更多的去使用 ...

  4. redis踩坑:redis哨兵开启了保护模式导致主从切换不同步

    故障表现 哨兵只存在两个的时候,当哨兵模式的redis主节点挂掉以后,业务组件不能切换到新主节点 故障原因 redis哨兵依旧认为旧主为主节点,没有触发failover 故障原因定位 哨兵集群部署方式 ...

  5. Scan的使用方式以及Spring redis的坑

    SpringRedisTemplate针对这个Scan进行了封装,示例使用(针对最新库spring-data-redis-1.8.1.RELEASE): Set<Object> execu ...

  6. --Redis入坑--RedisPipelineException:Pipeline contained one or more invalid commands;WRONGTYPE ...

    异常说明 最近在写代码的时候,redis报了如下错误: org.springframework.data.redis.connection.RedisPipelineException: Pipeli ...

  7. redis cluster 安装配置

    一.redis集群安装配置 1.下载redis源码包并下载 wget http://download.redis.io/releases/redis-3.0.7.tar.gz $ tar xzf re ...

  8. 使用Redis,你必须知道的21个注意要点

    前言 最近在学习Redis相关知识,看了阿里的redis开发规范,以及Redis开发与运维这本书.分使用规范.有坑的命令.项目实战操作.运维配置四个方向,整理了使用Redis的21个注意点,希望对大家 ...

  9. python在通信中的应用_基于Redis的进程间通信——在C++里使用python的深度学习模型...

    本文主要是为进程间通信(特别是语言都不同的进程)提供一种新的思路本想法来源于RoboMaster比赛中的神符检测,神符是指一个9宫格的手写体数字(Mnist)或火焰体动态数字,需要用到机器学习或深度学 ...

最新文章

  1. lvs keepalived的tcp 长连接的问题解决办法
  2. 使用Capture画原理图
  3. php发送get、post请求的几种方法
  4. 例子---纯CSS实现加载球
  5. shell tr命令
  6. 互联网后端技术栈大全,建议收藏!
  7. android 时间差格式化,计算2天之间的时间差android
  8. matlab 快速傅里叶变换函数(fft)编写
  9. wifi数据包解析_WiFi通讯协议详解
  10. 如何加密PDF?使用福昕PDF编辑器加密PDF文件实操
  11. html5全栈工程师招聘,蓝鸥HTML5全栈工程师 高薪就业的利器
  12. 全国哀悼日,网站变黑白的代码
  13. Java短信邮箱消息发送从零开始,一篇解决一切乌漆嘛黑的问题
  14. dubbo源码分析-dubbo-serialization
  15. Office Excel2010保存新文件时出现未响应或者卡死的解决办法
  16. 全文搜索引擎----ElasticSearch和Solr
  17. Redis报错Java.net.UnknownHostException的解决办法
  18. 如何看待侵权行为?有存在的合理性吗?
  19. Flutter开发(1)—— Dart vs Swift
  20. win7 mysql 卸载不干净,win7系统彻底删除mysql的方法教程

热门文章

  1. 《常用控制电路》学习笔记——数控锁相环调速电路
  2. Java 动态代理解析
  3. 虚拟主机安装mysql_如何虚拟主机安装mysql
  4. Java智能卡 技术_java智能卡APDU学习笔记
  5. 条件队列java_Java并发系列(4)AbstractQueuedSynchronizer源码分析之条件队列
  6. linux6同步时间,centos 6.x 同步网络时间
  7. Oracle 数据怎么实时同步到 Kafka | 亲测干货分享建议收藏
  8. JAVA输出菱形并使用绝对值,案例用绝对值的方法打印出菱形
  9. java从键盘上录入任何整数,输出该整数的阶乘
  10. exif linux php扩展_LNMP环境为PHP添加exif扩展