spring集成redis配置

jedis是redis的java客户端,spring将redis连接池作为一个bean配置。

redis连接池分为两种,一种是“redis.clients.jedis.ShardedJedisPool”,这是基于hash算法的一种分布式集群redis客户端连接池。

另一种是“redis.clients.jedis.JedisPool”,这是单机环境适用的redis连接池。

 

maven导入相关包:

  

 <!-- redis依赖包 -->

    <dependency>

      <groupId>redis.clients</groupId>

      <artifactId>jedis</artifactId>

      <version>2.9.0</version>

    </dependency>


 

ShardedJedisPool是redis集群客户端的对象池,可以通过他来操作ShardedJedis,下面是ShardedJedisPool的xml配置,spring-jedis.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:context="http://www.springframework.org/schema/context"

      xsi:schemaLocation="http://www.springframework.org/schema/beans

      http://www.springframework.org/schema/beans/spring-beans.xsd

      http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">

 

    <!-- 引入jedis的properties配置文件-->

    <!--如果你有多个数据源需要通过<context:property-placeholder管理,且不愿意放在一个配置文件里,那么一定要加上ignore-unresolvable=“true"-->

    <context:property-placeholderlocation="classpath:properties/redis.properties" ignore-unresolvable="true"/>

 

    <!--shardedJedisPool的相关配置-->

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">

        <!--新版是maxTotal,旧版是maxActive-->

        <property name="maxTotal">

            <value>${redis.pool.maxActive}</value>

        </property>

        <property name="maxIdle">

            <value>${redis.pool.maxIdle}</value>

        </property>

        <property name="testOnBorrow" value="true"/>

        <property name="testOnReturn" value="true"/>

    </bean>

 

    <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"  scope="singleton">

        <constructor-arg index="0" ref="jedisPoolConfig"/>

        <constructor-arg index="1">

            <list>

                <bean class="redis.clients.jedis.JedisShardInfo">

                   <constructor-argname="host" value="${redis.uri}"/>

                </bean>

            </list>

        </constructor-arg>

    </bean>

</beans>


 

下面是单机环境下redis连接池的配置:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:context="http://www.springframework.org/schema/context"

      xsi:schemaLocation="http://www.springframework.org/schema/beans

      http://www.springframework.org/schema/beans/spring-beans.xsd

      http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">

 

    <!-- 引入jedis的properties配置文件-->

    <!--如果你有多个数据源需要通过<context:property-placeholder管理,且不愿意放在一个配置文件里,那么一定要加上ignore-unresolvable=“true"-->

    <context:property-placeholderlocation="classpath:properties/redis.properties" ignore-unresolvable="true"/>

 

    <!--Jedis连接池的相关配置-->

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">

        <!--新版是maxTotal,旧版是maxActive-->

        <property name="maxTotal">

            <value>${redis.pool.maxActive}</value>

        </property>

        <property name="maxIdle">

            <value>${redis.pool.maxIdle}</value>

        </property>

        <property name="testOnBorrow" value="true"/>

        <property name="testOnReturn" value="true"/>

    </bean>

 

    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">

        <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>

        <constructor-arg name="host" value="${redis.host}"/>

        <constructor-arg name="port" value="${redis.port}" type="int" />

        <constructor-arg name="timeout" value="${redis.timeout}" type="int" />

        <constructor-arg name="password" value="${redis.password}"/>

        <constructor-arg name="database" value="${redis.database}" type="int" />

    </bean>

</beans>

对应的classpath:properties/redis.properties.xml为:

#最大分配的对象数

redis.pool.maxActive=200

#最大能够保持idel状态的对象数

redis.pool.maxIdle=50

redis.pool.minIdle=10

redis.pool.maxWaitMillis=20000

#当池内没有返回对象时,最大等待时间

redis.pool.maxWait=300

 

#格式:redis://:[密码]@[服务器地址]:[端口]/[db index]

redis.uri = redis://:12345@127.0.0.1:6379/0

 

redis.host = 127.0.0.1

redis.port = 6379

redis.timeout=30000

redis.password = 12345

redis.database = 0


 

二者操作代码类似,都是先注入连接池,然后通过连接池获得jedis实例,通过实例对象操作redis。

ShardedJedis操作:

   @Autowired

    private ShardedJedisPool shardedJedisPool;//注入ShardedJedisPool

 

   @RequestMapping(value ="/demo_set",method = RequestMethod.GET)

   @ResponseBody

    public String demo_set(){

       //获取ShardedJedis对象

       ShardedJedis shardJedis =shardedJedisPool.getResource();

       //存入键值对

       shardJedis.set("key1","hello jedis");

       //回收ShardedJedis实例

       shardJedis.close();

 

       return "set";

    }

 

   @RequestMapping(value ="/demo_get",method = RequestMethod.GET)

   @ResponseBody

    public String demo_get(){

       ShardedJedis shardedJedis = shardedJedisPool.getResource();

       //根据键值获得数据

        Stringresult = shardedJedis.get("key1");

       shardedJedis.close();

 

       return result;

    }

 

Jedis操作:

   @Autowired

    private JedisPool jedisPool;//注入JedisPool

 

   @RequestMapping(value ="/demo_set",method = RequestMethod.GET)

   @ResponseBody

    public String demo_set(){

       //获取ShardedJedis对象

        Jedis jedis= jedisPool.getResource();

       //存入键值对

       jedis.set("key2","hello jedis one");

       //回收ShardedJedis实例

       jedis.close();

 

       return "set";

    }

 

   @RequestMapping(value ="/demo_get",method = RequestMethod.GET)

   @ResponseBody

    public String demo_get(){

       Jedis jedis =jedisPool.getResource();

       //根据键值获得数据

        Stringresult = jedis.get("key2");

       jedis.close();

 

       return result;

    }


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值