1. 程式人生 > >spring boot配置和使用Redis高效快取

spring boot配置和使用Redis高效快取

    現在的程式當中,由於對效能的要求越來越高,傳統的資料庫已經不能夠應對需求,所以出現了nosql,其中的redis就是其中比較優秀的一個。以下為redis的優勢:

(1) 速度快,因為資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1)

(2) 支援豐富資料型別,支援string,list,set,sorted set,hash

(3) 支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行

(4) 豐富的特性:可用於快取,訊息,按key設定過期時間,過期後將會自動刪除

由於redis各種優勢,可能會作為大部分java程式設計師nosql的首選,那麼,我們使用想在程式當中使用redis,首先需要進行配置。

我們如何在spring boot 程式當中對redis進行配置?(假設已經安裝好了redis)

第一步:maven引入相應的jar包

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
第二步:我們在application.properties檔案當中,新增redis的訪問配置
# REDIS (RedisProperties)
# Redis資料庫索引(預設為0)
spring.redis.database=0
# Redis伺服器地址
spring.redis.host=127.0.0.1
# Redis伺服器連線埠
spring.redis.port=6379
# Redis伺服器連線密碼(預設為空)
#spring.redis.password=
# 連線池最大連線數(使用負值表示沒有限制)
spring.redis.poolMaxActive=20
# 連線池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.poolMaxWait=-1
# 連線池中的最大空閒連線
spring.redis.poolMaxIdle=8
# 連線池中的最小空閒連線
spring.redis.poolMinIdle=0
# 連線超時時間(毫秒)
spring.redis.timeout=5000
第三步:在config這個包裡面,增加RedisConfig.java這個類。


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
public class RedisConfig {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    //Logger logger = LoggerFactory.getLogger(RedisConfig.class);
    @Value("${spring.redis.host}")
    private String host;

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

    @Value("${spring.redis.timeout}")
    private int timeout;

    @Value("${spring.redis.poolMaxIdle}")
    private int maxIdle;

    @Value("${spring.redis.poolMaxWait}")
    private long maxWaitMillis;

    /*@Value("${spring.redis.password}")
    private String password;*/

    @Bean
    @Scope("singleton")
    public JedisPool redisPoolFactory() {
        System.out.println("jedispool");
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, null);
        logger.info("host:"+host);
        logger.info("port:"+port);
        logger.info("timeout:"+timeout);
        return jedisPool;
    }
}
第四步:在程式裡面去使用JedisPool,首先注入jedisPool

第五步:通過jedisPool.getResource()這個方法從連線池裡面獲取一個連線,然後取得連線之後就可以進行各種操作了。