springboot中使用Redis

在pom.xml中引入redis
<!-- redis -->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

在application.properties中配置
#redis

spring.redis.password=123456

spring.redis.host=192.168.0.100

spring.redis.port=6379

在代码中配置
package com.server.redis;



import com.server.utility.LogUtil;

import org.slf4j.Logger;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

import redis.clients.jedis.JedisSentinelPool;



import java.util.HashSet;

import java.util.Set;



@Configuration

public class RedisConfig {

    Logger log = LogUtil.getLogger(RedisConfig.class);



    @Value("${spring.redis.password}")

    private String password;

    @Value("${spring.redis.host}")

    private String host;

    @Value("${spring.redis.port}")

    private int port;



    @Primary

    public JedisPool gamePoolFactory() {

        JedisPoolConfig config = getJedisPoolConfig();

        //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true

        config.setBlockWhenExhausted(true);

        //设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)

        config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");

        //是否启用pool的jmx管理功能, 默认true

        config.setJmxEnabled(true);

        config.setJmxNamePrefix("pool");

        //是否启用后进先出, 默认true

        config.setLifo(true);

        //最大空闲连接数, 默认8个

        config.setMaxIdle(200);

        //最大连接数, 默认8个

        config.setMaxTotal(200);

        //获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1

        config.setMaxWaitMillis(-1);

        //逐出连接的最小空闲时间 默认1800000毫秒(30分钟)

        config.setMinEvictableIdleTimeMillis(1800000);

        //最小空闲连接数, 默认0

        config.setMinIdle(0);

        //每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3

        config.setNumTestsPerEvictionRun(3);

        //对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出,不再根据MinEvictableIdleTimeMillis判断  (默认逐出策略)

        config.setSoftMinEvictableIdleTimeMillis(1800000);

        //在获取连接的时候检查有效性, 默认false

        config.setTestOnBorrow(false);

        //在空闲时检查有效性, 默认false

        config.setTestWhileIdle(false);

        //逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1

        config.setTimeBetweenEvictionRunsMillis(-1);

        JedisPool jedisPool = new JedisPool(config, host, port, 5000, password);

        return jedisPool;

    }





    private JedisPoolConfig getJedisPoolConfig() {

        JedisPoolConfig poolConfig = new JedisPoolConfig();

        poolConfig.setMaxTotal(2000);

        poolConfig.setMaxIdle(50);

        poolConfig.setMinIdle(8);// 设置最小空闲数

        poolConfig.setMaxWaitMillis(20000);

        poolConfig.setTestOnBorrow(false);

        poolConfig.setTestOnReturn(false);

        // Idle时进行连接扫描

        poolConfig.setTestWhileIdle(true);

        // 表示idle object evitor两次扫描之间要sleep的毫秒数

        poolConfig.setTimeBetweenEvictionRunsMillis(3000);

        // 表示idle object evitor每次扫描的最多的对象数

        poolConfig.setNumTestsPerEvictionRun(10);

        // 表示一个对象至少停留在idle状态的最短时间,然后才能被idle object

        // evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义

        poolConfig.setMinEvictableIdleTimeMillis(60000);

        return poolConfig;

    }



    @Primary

    @Bean(name = "jedisClient")

    public JedisClient jedisClient() {

        JedisClient jedisClient = new JedisClient();

        jedisClient.setJedisPool(gamePoolFactory());

        return jedisClient;

    }

}

Author:

发表评论

电子邮件地址不会被公开。 必填项已用*标注