Redis:我可以将jedis实例初始化为静态最终字段吗?

时间:2013-12-14 07:24:03

标签: java redis jedis

我需要在Java中使用Redis作为数据源,所以我决定使用代码:

public class RedisService {
    private static final Jedis jedis = new Jedis("host",6400);;

    public static Device getDevice(String key) {
        // Do something use redis.
        return null;
    }

}
我认为服务器会自动初始化Jedis(Redis API for Java),这是使用Jedis的好方法吗?

2 个答案:

答案 0 :(得分:1)

看看我们如何使用Jedis:

  1. 通过传递主机和端口信息创建单例org.springframework.data.redis.connection.jedis.JedisConnectionFactory实例

  2. 通过将连接工厂传递给它来创建单例org.springframework.data.redis.core.RedisTemplate实例

  3. 在您的服务中使用上面创建的redisTemplate,使用Redistemplate的好处是您可以使用它对redis提供的所有数据结构执行操作( list,set,hashes
  4. 仅供您参考,这里是执行相同的弹簧代码,您可以使用如果您正在使用spring,则可以使用java代码创建相同的

    <!-- Create Factory -->
    <bean id="jedisFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
       <property name="hostName" value="localhost" />
       <property name="port" value="6370" />
       <property name="timeout" value="5000" />
    </bean> 
    
    <!-- Create Redis Template -->
    <bean id="redisRemplate" class="org.springframework.data.redis.core.RedisTemplate" >
        <property name ="connectionFactory" ref="jedisFactory" />
    </bean>
    
    <!-- Your Service class -->
    <bean id="serviceClass" class="RedisService" >
        <property name ="redisTemplate" ref="redisRemplate" />
    </bean>
    
    public class RedisService 
    {
        private final RedisTemplate redisTemplate = /* get from  store or  inject using spring */;
    
        public static Device getDevice(String key) {
            // Do something use Redis.
            return null;
        }
    }
    

答案 1 :(得分:0)

正如Santosh Joshi试图解释的那样:最好使用JedisFactory。您的单身人士Jedis可能因网络,过载等而“死亡”......您将不得不重新启动应用程序以获得与Redis的新连接。

为了解决这个问题,你可以定义一个Jedis Pool,如果你不想使用Spring(Santosh的解决方案所基于的),你可以使用Jedis提供的JedisPool类。然后,您可以将其定义为单例(例如静态final或通过Spring)并从中获取Jedis实例。

由于它是一个池,你可以一次获得超过1个与Redis的连接(你可以配置它),并且它支持处理断开的连接:它会在一个死的时候创建新的新的Jedis。