Redis-Spring Data整合Jedis

Spring整合Jedis

1.单实例

step1:毫无疑问,首先需要在pom.xml中配置Jedis依赖

        
            redis.clients
            jedis
            2.9.0
        

step2:在resources中添加settings.properties,配置redis相关属性


#jedisPoolConfig
redis.minIdle=100
redis.maxIdle=500
redis.maxTotal=50000 
redis.maxWaitMillis=10000  
redis.testOnBorrow=true


#jedisPool
redis.host=127.0.0.1
redis.port=6379
redis.timeout=2000

step3:在spring-context.xml配置JedisPoolConfig及JedisPool




    

    
        
            
                classpath:settings.properties
            
        
    

    
        
        
        
        
    

    
        
        
        
    


JedisPool只有简单配置,如果需要增加其它配置项(如密码等),请自行参照JedisPool的构造方法进行配置

Redis-Spring Data整合Jedis_第1张图片
JedisPool.png

step4:在TestController中测试是否连接成功

package controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Controller
public class TestController {

    @Autowired
    private JedisPool jedisPool;

    @RequestMapping(value = "test",method = RequestMethod.GET,produces = "application/json;charset=utf-8")
    @ResponseBody
    public String test(){
        return jedisPool.getResource().ping();
    }

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        System.out.println(jedis.ping());
    }

}

step5:启动、运行、报错

nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig

查看源码发现JedisPoolConfig继承自GenericObjectPoolConfig

package redis.clients.jedis;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

public class JedisPoolConfig extends GenericObjectPoolConfig {
    public JedisPoolConfig() {
        this.setTestWhileIdle(true);
        this.setMinEvictableIdleTimeMillis(60000L);
        this.setTimeBetweenEvictionRunsMillis(30000L);
        this.setNumTestsPerEvictionRun(-1);
    }
}

而GenericObjectPoolConfig在package org.apache.commons.pool2.impl中,所以需要引入commons-pool2依赖

        
            org.apache.commons
            commons-pool2
            2.4.2
        

再次运行,得到“Pong”的response结果,测试成功


Redis-Spring Data整合Jedis_第2张图片
Ping.png
2.配置Redis简单主从复制

Jedis对redis的集群支持也很完善,实例化SharedJedisPool即可




    


    
        
            
                classpath:settings.properties
            
        
    

    
        
        
        
        
        
    



    
        
        
            
                
                    
                    
                    
                    
                
                
                    
                    
                    
                    
                
            
        
    


3.sentinel模式

仅仅配置了主从复制是不够的,没有sentinel就不能实现故障转移,redis集群就失去意义了。
spring-data-redis对sentinel提供了很好的支持,详细配置如下

pom.xml



    4.0.0

    me.com
    springmvc
    1.0-SNAPSHOT

    
        4.3.0.RELEASE
    

    
        
            org.springframework
            spring-core
            ${spring.version}
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
            redis.clients
            jedis
            2.9.0
        
        
            org.apache.commons
            commons-pool2
            2.4.2
        
        
            org.springframework.data
            spring-data-redis
            1.8.0.RELEASE
        
    


settings.properties

#jedisPoolConfig
redis.maxTotal=50000 
redis.maxIdle=500
redis.minIdle=100
redis.maxWaitMillis=10000 
redis.testOnBorrow=true

#redis-sentinel
redis.sentinel=127.0.0.1:26379
redis.master=mymaster

spring-context.xml




    


    
        
            
                classpath:settings.properties
            
        
    

    

    
        
        
        
        
        
    

    
        
        
            
                ${redis.sentinel}
            
        
    

    
        
        
        
    


    
        
    

    


    


TestController

package controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @RequestMapping(value = "test",method = RequestMethod.GET,produces = "application/json;charset=utf-8")
    @ResponseBody
    public String test(){
        stringRedisTemplate.opsForValue().set("key1","v1");
        return stringRedisTemplate.opsForValue().get("key1");
    }

}

另外,特别提醒:
sentinel.conf配置文件中明确说明,需要绑定ip或者解除保护模式(生产环境下建议绑定ip)

# *** IMPORTANT ***
#
# By default Sentinel will not be reachable from interfaces different than
# localhost, either use the 'bind' directive to bind to a list of network
# interfaces, or disable protected mode with "protected-mode no" by
# adding it to this configuration file.
#
# Before doing that MAKE SURE the instance is protected from the outside
# world via firewalling or other means.
#
# For example you may use one of the following:
#
# bind 127.0.0.1 192.168.1.1
#
# protected-mode no

否则会报错:All sentinels down, cannot determine where is mymaster master is running...

4.配置Redis Cluster

Redis Cluster是3.0版本后的一种集群系统,它实现了数据分片,解决了单机数据容量瓶颈问题,同时也实现了高可用。

使用Spring+Jedis配置Redis Cluster也非常简单。

    
        
        
        
        
        
    

    
    
        
            
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
            
        
    

    
        
        
    

org.springframework.data.redis.connection.RedisClusterConfigurationorg.springframework.data.redis.connection.jedis.JedisConnectionFactory已经为我们封装好了所有的设置,再通过org.springframework.data.redis.core.StringRedisTemplate,就可以在代码中很方便地对Redis进行读写!

你可能感兴趣的:(Redis-Spring Data整合Jedis)