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;
}
}
上面是我的jedispool和jedis的初始化代码,下面附上我的调用代码
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的缓存就是好的。