spring中redis连接池版单节点使用(xml配置及非xml配置)

1.依赖

    <!--引入reids-->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>2.9.0</version>
    </dependency>

2.非xml方式


import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.stereotype.Service;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration //声明一个ApplicationContext集成测试加载WebApplicationContext,作用是模拟ServletContext
@ContextConfiguration(locations={"classpath:spring/spring-application.xml"})
@Service
public class RedisSingleNoXmlServiceImpl {

    private static final Logger logger = Logger.getLogger(RedisSingleNoXmlServiceImpl.class);

    private static JedisPool jedisPool = null;
    static {
        //第一步:配置redis连接池
        if(jedisPool == null) {
            JedisPoolConfig config = new JedisPoolConfig();
            //控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
            //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
            config.setMaxTotal(50);
            //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
            config.setMaxIdle(5);
            //表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;单位毫秒
            //小于零:阻塞不确定的时间,  默认-1
            config.setMaxWaitMillis(1000*100);
            //在borrow(引入)一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
            config.setTestOnBorrow(true);
            //return 一个jedis实例给pool时,是否检查连接可用性(ping())
            config.setTestOnReturn(true);
            //connectionTimeout 连接超时(默认2000ms)
            //soTimeout 响应超时(默认2000ms)
            jedisPool = new JedisPool(config, "127.0.0.1", 6379,  2000);
        }
    }

    @Test
    public void testJedisPool() throws Exception {

    // 第二步:从JedisPool中获得Jedis对象。
    Jedis jedis = jedisPool.getResource();
    // 第三步:使用Jedis操作redis服务器。
    jedis.set("a", "1");
    String result = jedis.get("a");
	System.out.println(result);
    // 第四步:操作完毕后关闭jedis对象,连接池回收资源。
	jedis.close();
    // 第五步:关闭JedisPool对象。
	jedisPool.close();
    }
}

3.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <description>redis cluster configuation</description>
    <!-- 读取jedis配置文件; 这里可以不用配置,-dao已经配置了扫描配置文件 -->
    <!-- <context:property-placeholder location="classpath:/properties/*.properties"/> -->
    <!-- 连接池配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 最大连接数 -->
        <property name="maxTotal" value="30" />
        <!-- 最大空闲连接数 -->
        <property name="maxIdle" value="10" />
        <!-- 每次释放连接的最大数目 -->
        <property name="numTestsPerEvictionRun" value="1024" />
        <!-- 释放连接的扫描间隔(毫秒) -->
        <property name="timeBetweenEvictionRunsMillis" value="30000" />
        <!-- 连接最小空闲时间 -->
        <property name="minEvictableIdleTimeMillis" value="1800000" />
        <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 -->
        <property name="softMinEvictableIdleTimeMillis" value="10000" />
        <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
        <property name="maxWaitMillis" value="1500" />
        <!-- 在获取连接的时候检查有效性, 默认false -->
        <property name="testOnBorrow" value="true" />
        <!-- 在空闲时检查有效性, 默认false -->
        <property name="testWhileIdle" value="true" />
        <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
        <property name="blockWhenExhausted" value="false" />
    </bean>
    <!--jedis客户端单机版 -->
    <bean id="redisClient" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="127.0.0.1"></constructor-arg>
        <constructor-arg name="port" value="6379"></constructor-arg>
        <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
    </bean>


</beans>
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;


@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration //声明一个ApplicationContext集成测试加载WebApplicationContext,作用是模拟ServletContext
@ContextConfiguration(locations={"classpath:spring/spring-application.xml"})
@Service
public class RedisSingleServiceImpl {

    private static final Logger logger = Logger.getLogger(RedisSingleServiceImpl.class);

    @Test
    public void JedisTestMain() {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring/spring-application.xml");
        JedisPool jedisPool = (JedisPool) context.getBean("redisClient");
        Jedis jedis = jedisPool.getResource();
        jedis.set("key1", "1111");
        String str = jedis.get("key1");
        System.out.println("--:" + str);
        jedis.close();
        jedisPool.close();
        }
}

4.持久化配置

可以将RDB于AOF方式一同使用:

修改redis.windows.conf文件 内容:

appendonly yes

save 900 1

save 300 10

save 60 10000

编写一个启动脚本startRedisServer.bat 内容:

@echo off
redis-server.exe redis.windows.conf
@pause

猜你喜欢

转载自blog.csdn.net/qq_27127145/article/details/84301692
今日推荐