首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JedisSentinelPool是线程安全的吗?

JedisSentinelPool是线程安全的吗?
EN

Stack Overflow用户
提问于 2017-01-21 09:43:44
回答 1查看 644关注 0票数 0

我知道jredis不是线程安全的,在互联网上应该说使用JedisSentinelPool,它是线程安全的,但是我使用的时候,发现不是这样的,我不知道使用是否有问题。

代码语言:javascript
复制
private static Logger logger = LoggerFactory.getLogger(Redis.class);
private JedisSentinelPool pool;

private static Redis instance = null;
public static Redis getInstance(){
    if (instance == null) {
        throw  new RuntimeException("Do not initialize!!!");
    }
    return instance;
}
public static void buildInstance(Map conf) {
    if (instance == null) {
        synchronized (Redis.class) {
            instance = new Redis();
            instance.init(conf);
        }
    }
}

private Redis() {}

private void init(Map conf){
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxIdle(Integer.valueOf(String.valueOf(conf.get("redis.max_idle"))));
    config.setTestOnBorrow(Boolean.valueOf(String.valueOf(conf.get("redis.isTest"))));
    config.setMaxTotal(Integer.valueOf(String.valueOf(conf.get("redis.maxTotal"))));
    String node = String.valueOf(conf.get("redis.node"));
    int timeOut = Integer.valueOf(String.valueOf(conf.get("redis.timeout")));
    String[] addressArr = String.valueOf(conf.get("redis.server")).split(",");
    Set<String> sentinels = new HashSet<String>();
    for (String str : addressArr) {
        sentinels.add(str);
    }
    pool = new JedisSentinelPool(node, sentinels, config, timeOut);
}

private Jedis getRedisTemplate() {
    Jedis resource = pool.getResource();
    return resource;
}

/** public */void setValue(byte[] key, byte[] value) {
    Jedis jedis = null;
    try {
        jedis = getRedisTemplate();
        jedis.set(key, value);
        closeJedis(jedis);
    } catch (Exception e) {
        e.printStackTrace();
        closeBreakJedis(jedis);
    }
}
代码语言:javascript
复制
java.lang.ClassCastException: java.lang.Long cannot be cast to [B
    at redis.clients.jedis.Connection.getBinaryBulkReply(Connection.java:216)
    at redis.clients.jedis.Connection.getBulkReply(Connection.java:205)
    at redis.clients.jedis.Jedis.hget(Jedis.java:622)
    at com.mapbar.flash.common.cache.Redis.getHashValue(Redis.java:300)
    at com.mapbar.flash.common.cache.TerminalCache.getCityCodeArray(TerminalCache.java:35)
    at com.mapbar.flash.core.bolt.ElectronicFenceBolt.doExecute(ElectronicFenceBolt.java:106)
    at com.mapbar.flash.core.bolt.ElectronicFenceBolt.doExecute(ElectronicFenceBolt.java:1)
    at com.mapbar.flash.core.bolt.BaseBolt.execute(BaseBolt.java:79)
    at backtype.storm.topology.BasicBoltExecutor.execute(BasicBoltExecutor.java:49)
    at com.alibaba.jstorm.task.execute.BoltExecutors.processTupleEvent(BoltExecutors.java:183)
    at com.alibaba.jstorm.task.execute.BoltExecutors.onEvent(BoltExecutors.java:161)
    at backtype.storm.utils.DisruptorQueueImpl.consumeBatchToCursor(DisruptorQueueImpl.java:191)
    at backtype.storm.utils.DisruptorQueueImpl.consumeBatchWhenAvailable(DisruptorQueueImpl.java:159)
    at com.alibaba.jstorm.task.execute.BoltExecutors.run(BoltExecutors.java:137)
    at com.alibaba.jstorm.callback.AsyncLoopRunnable.run(AsyncLoopRunnable.java:95)
    at java.lang.Thread.run(Thread.java:745)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-08 15:46:27

是我的代码问题,在一个方法中,我在查询之前返回jredis。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41774927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档