redis與spring整合使用的步驟實(shí)例教程
前言
做過大型軟件系統(tǒng)的同學(xué)都知道,隨著系統(tǒng)數(shù)據(jù)越來越龐大,越來越復(fù)雜,隨之帶來的問題就是系統(tǒng)性能越來越差,尤其是頻繁操作數(shù)據(jù)庫帶來的性能損耗更為嚴(yán)重。很多業(yè)績大牛為此提出了眾多的解決方案和開發(fā)了很多框架以優(yōu)化這種頻繁操作數(shù)據(jù)庫所帶來的性能損耗,其中,尤為突出的兩個(gè)緩存服務(wù)器是Memcached和Redis。今天,我們不講Memcached和Redis本身,這里主要為大家介紹Spring與Redis整合使用的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧。
方法如下
第一步,在項(xiàng)目中加入redis的pom代碼:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> </dependency>
第二步,spring中加載redis配置文件:applicationContext-redis.xml,內(nèi)容如下
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxTotal}" /> </bean> <bean class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="poolConfig" /> <constructor-arg index="1"> <list> <bean class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="${redis.node1.host}" /> <constructor-arg index="1" value="${redis.node1.port}" /> </bean> </list> </constructor-arg> </bean> </beans>
第三步,編寫連接redis服務(wù)端的屬性文件:redis.properties
redis.maxTotal=100 redis.node1.host=127.0.0.1 redis.node1.port=6379
第四步,編寫redis的相關(guān)操作方法類,F(xiàn)unction類和RedisService類:
Funcrion類:
package xx.service; /** * 為了抽取相同的操作代碼 * @author yeying *<p>Description:</p> *<p>Company:</p> * @date:2017年12月5日 下午9:02:44 */ public interface Function<T,E> { public T callback(E e); }
RedisService類:
package com.taotao.common.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; /** * redis的相關(guān)操作 * @author yeying *<p>Description:</p> *<p>Company:</p> * @date:2017年12月3日 下午2:11:47 */ @Service public class RedisService { @Autowired(required=false) //需要再注入進(jìn)去 private ShardedJedisPool shardedJedisPool; private <T> T execute(Function<T, ShardedJedis> fun){ ShardedJedis shardedJedis = null; try { // 從連接池中獲取到j(luò)edis分片對(duì)象 shardedJedis = shardedJedisPool.getResource(); // 從redis中獲取數(shù)據(jù) return fun.callback(shardedJedis); } catch (Exception e) { e.printStackTrace(); } finally { if (null != shardedJedis) { // 關(guān)閉,檢測(cè)連接是否有效,有效則放回到連接池中,無效則重置狀態(tài) shardedJedis.close(); } } return null; } /** * 執(zhí)行set操作 * @param key * @param value * @return */ public String set(final String key,final String value){ return this.execute(new Function<String, ShardedJedis>() { @Override public String callback(ShardedJedis e) { return e.set(key, value); } }); } /** * 執(zhí)行set操作,并設(shè)置生存時(shí)間,單位為秒 * @param key * @param value * @param seconds * @return */ public String set(final String key,final String value,final Integer seconds){ return this.execute(new Function<String, ShardedJedis>() { @Override public String callback(ShardedJedis e) { String str =e.set(key, value); e.expire(key, seconds); return str; } }); } /** * 執(zhí)行g(shù)et操作 * @param key * @return */ public String get(final String key){ return this.execute(new Function<String, ShardedJedis>() { @Override public String callback(ShardedJedis e) { return e.get(key); } }); } /** * 執(zhí)行set操作 * @param key * @return */ public Long del(final String key){ return this.execute(new Function<Long, ShardedJedis>() { @Override public Long callback(ShardedJedis e) { return e.del(key); } }); } /** * 設(shè)置生存時(shí)間,單位為秒 * @param key * @param seconds * @return */ public Long expire(final String key, final Integer seconds) { return this.execute(new Function<Long, ShardedJedis>() { @Override public Long callback(ShardedJedis e) { return e.expire(key, seconds); } }); } }
第五步,啟動(dòng)redis服務(wù),redis-server.exe,雙擊打開:
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
一次Spring無法啟動(dòng)的問題排查實(shí)戰(zhàn)之字節(jié)碼篇
最近學(xué)習(xí)了spring相關(guān)知識(shí),公司項(xiàng)目也用到了spring,下面這篇文章主要給大家介紹了一次Spring無法啟動(dòng)的問題排查實(shí)戰(zhàn)之字節(jié)碼篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Eclipse中如何引入JUnit進(jìn)行單元測(cè)試
這篇文章主要介紹了Eclipse中如何引入JUnit進(jìn)行單元測(cè)試問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04Java后端產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java后臺(tái)產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能,本文文字結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06Java Redis Template批量查詢指定鍵值對(duì)的實(shí)現(xiàn)
本文主要介紹了Java Redis Template批量查詢指定鍵值對(duì)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07- 這篇文章主要介紹了Java中的?HTTP?協(xié)議原理詳解,HTTP超文本傳輸協(xié)議,下文簡稱?HTTP,它的作用是用于實(shí)現(xiàn)服務(wù)器端和客戶端的數(shù)據(jù)傳輸?shù)?/div> 2022-07-07
Java實(shí)現(xiàn)的斷點(diǎn)續(xù)傳功能的示例代碼
本篇文章主要介紹了Java實(shí)現(xiàn)的斷點(diǎn)續(xù)傳功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02Java面試題沖刺第十三天--數(shù)據(jù)庫(3)
這篇文章主要為大家分享了最有價(jià)值的三道數(shù)據(jù)庫面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下2021-07-07最新評(píng)論