盛开的雪莲花 2017-11-23 11:43 采纳率: 0%
浏览 739

多线程下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条回答 默认 最新

  • wb_snail 2017-11-24 05:03
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)