Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Redis:我能把绝地实例初始化为静态的最终场吗?_Java_Redis_Jedis - Fatal编程技术网

Java Redis:我能把绝地实例初始化为静态的最终场吗?

Java Redis:我能把绝地实例初始化为静态的最终场吗?,java,redis,jedis,Java,Redis,Jedis,我需要使用Redis作为Java中的数据源,因此我决定使用以下代码: public class RedisService { private static final Jedis jedis = new Jedis("host",6400);; public static Device getDevice(String key) { // Do something use redis. return null; } } 我以为服务器会

我需要使用Redis作为Java中的数据源,因此我决定使用以下代码:

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

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

}

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

看看我们是如何使用绝地的:

  • 通过传递主机和端口信息,创建一个singleton
    org.springframework.data.redis.connection.jedis.JedisConnectionFactory
    实例

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

  • 在您的服务中使用上面创建的redisTemplate,使用redisTemplate的好处是您可以使用它跨redis提供的所有数据结构执行操作(列表、集合、散列)
  • 仅供参考,这里的spring代码也有同样的功能,如果您使用的是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;
        }
    }
    
    
    公共类再贴现服务
    {
    私有最终RedisTemplate RedisTemplate=/*使用spring从存储区获取或注入*;
    公共静态设备getDevice(字符串键){
    //用Redis做点什么。
    返回null;
    }
    }
    
    正如桑托什·乔希试图解释的那样:最好使用绝地工厂。你的绝地武士可能会因为网络、过载等原因而“死亡”。。。您必须重新启动应用程序才能与Redis建立新连接

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

    由于它是一个池,你一次可以连接到Redis超过1个(你可以配置),并且它支持处理断开的连接:当一个绝地死了,它会创造新的绝地