绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
多线程下redis的疑问,请大神指导 附源码
2019-10-12 15:36:03

public class JedisConfig

{

//redis池

private static JedisPool jedisPool = null;

//redis服务器的ip

private static final String HOST = "127.0.0.1";

//端口

private static final int PORT = 6379;

//可用连接实例的大数目

private static final int MAX_ACTIVE = 1024;

//控制一个pool多有多少个状态为空闲的jedis实例

private static final int MAX_IDLE = 200;

//jedis池没有对象返回时,大等待时间

private static final int MAX_WAIT = 10000;

//超时时间

private static final int TIMEOUT = 10000;

//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;

private static boolean TEST_ON_BORROW = true;

private static JedisConfig instance = null;

/**

* 初始化jedisPool

*/

private void initJedisPool()

{

JedisPoolConfig config = new JedisPoolConfig();

config.setMaxTotal(MAX_ACTIVE);

config.setMaxIdle(MAX_IDLE);

config.setMaxWaitMillis(MAX_WAIT);

config.setTestOnBorrow(TEST_ON_BORROW);

jedisPool = new JedisPool(config, HOST, PORT, TIMEOUT);

}

public synchronized Jedis getJedis()

{

Jedis jedis = null;

if (jedisPool != null)

{

jedis = jedisPool.getResource();

}

return jedis;

}

/**

* 如果jedis为空,则进行初始化

*/

private JedisConfig()

{

if (jedisPool == null)

{

initJedisPool();

}

}

/**

* 释放jedis资源

* @param jedis

*/

public synchronized void returnResource(Jedis jedis)

{

if (jedis != null)

{

jedis.close();

}

}

/**

*

* 单例获取JedisConfig实例

*

* @return 返回当前的jedis实例

*/

public static JedisConfig getInstance()

{

if (instance == null)

{

synchronized (JedisConfig.class)

{

if (instance == null)

{

instance = new JedisConfig();

}

}

}

return instance;

}

}

这个是我的初始化代码  下面是调用代码

 

public class JedisManage

{

/**

* 获取redis实例

*/

private static Jedis jedis = JedisConfig.getInstance().getJedis();

/**

* 存储图片流信息

*

* @param key key

* @param fileId 字段值

* @param value 存储值

*/

public static void setImageInfoToRedis(String key,String fileId,String value)

{

synchronized (jedis)

{

jedis.hset(key, fileId, value);

}

}

/**

* 获取图片信息

*

*

* @param key

* @param fileId

* @return

*/

public static String getImageInfo(String key,String fileId)

{

return jedis.hget(key, fileId);

}

}

项目整个背景是前台每一次请求都会加载一个小图片,所以我想使用redis缓存图片,如果下次请求是同一个我就直接从redis中读取,由于前台的请求非常频发,一秒钟大概有400次,这样的情况下程序异常退出,不知道是自己代码写的有问题还是,求大神指导!!!!

程序在多线程环境下,异常退出,分析后发现是redis的问题,因为要是不适用redis的缓存就是好的。

 

分享好友

分享这个小栈给你的朋友们,一起进步吧。

IT知识联盟
创建时间:2019-07-05 15:30:45
分享收集到的大小知识点
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 王超
    栈主

小栈成员

查看更多
  • ?
  • youou
  • gamebus
  • chinacc
戳我,来吐槽~