ITPub博客

首页 > > > 多线程下redis的疑问,请大神指导 附源码

多线程下redis的疑问,请大神指导 附源码

作者:piny 时间:2019-10-12 15:36:03 0 删除 编辑

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的缓存就是好的。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3034/viewspace-3139208/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-05-13

  • 博文量
    137
  • 访问量
    8806