spring boot配置和使用Redis高效快取
阿新 • • 發佈:2018-12-30
現在的程式當中,由於對效能的要求越來越高,傳統的資料庫已經不能夠應對需求,所以出現了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的訪問配置
第三步:在config這個包裡面,增加RedisConfig.java這個類。# 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
第四步:在程式裡面去使用JedisPool,首先注入jedisPoolimport 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.getResource()這個方法從連線池裡面獲取一個連線,然後取得連線之後就可以進行各種操作了。