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

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

1个回答

用redis缓存静态文件没有必要吧,缓存一个需要一定计算时间才能得出的结果才有意义,一般web容器对于静态文件都有自己的缓存策略的

wb_snail
wb_snail 回复盛开的雪莲花: 可以把错误日志贴出来么,大家一起看看
2 年多之前 回复
lwx314781
盛开的雪莲花 我这个就是缓存JNI返回的图片信息,是通过JNI计算的
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐