日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring 极速集成注解 Redis 实践

發(fā)布時(shí)間:2025/3/21 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring 极速集成注解 Redis 实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Redis 做為基于內(nèi)存的 Key-Value 數(shù)據(jù)庫,用來做緩存服務(wù)器性價(jià)比相當(dāng)高。

官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以讓 Java 操作使用 Redis。

Spring 團(tuán)隊(duì)對(duì) Jedis 進(jìn)行了封裝,獨(dú)立為 spring-data-redis 項(xiàng)目,配合 spring 特性并集成 Jedis 的一些命令和方法。

本文重點(diǎn)描述集成過程,能讓你迅速的通過 spring-data-redis 將 redis 集成到 spring 項(xiàng)目中,畢竟大家都忙的。

1. 添加項(xiàng)目依賴

<!--redis 緩存--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>1.8.4.RELEASE</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>

2. 添加 spring-redis-context 配置

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><description>redis 相關(guān)類 Spring 托管</description><!--載入 redis 配置文件--><context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/><!-- 配置 JedisPoolConfig 實(shí)例 --><bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"><property name="maxIdle" value="${redis.maxIdle}"/><property name="maxTotal" value="${redis.maxActive}"/><property name="maxWaitMillis" value="${redis.maxWait}"/><property name="testOnBorrow" value="${redis.testOnBorrow}"/></bean><!-- 配置JedisConnectionFactory --><bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"><property name="hostName" value="${redis.host}"/><property name="port" value="${redis.port}"/><property name="password" value="${redis.pass}"/><property name="database" value="${redis.dbIndex}"/><property name="poolConfig" ref="poolConfig"/></bean><!-- 配置RedisTemplate --><bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"><property name="connectionFactory" ref="jedisConnectionFactory"/></bean><!-- 配置RedisCacheManager --><bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"><constructor-arg name="redisOperations" ref="redisTemplate"/><property name="defaultExpiration" value="${redis.expiration}"/></bean><!-- 配置RedisCacheConfig --><bean id="redisCacheConfig" class="com.rambo.sdh.common.util.RedisCacheConfig"><constructor-arg ref="jedisConnectionFactory"/><constructor-arg ref="redisTemplate"/><constructor-arg ref="redisCacheManager"/></bean> </beans>

JedisConnectionFactory 為 Jedis 連接工廠,配置由單獨(dú)抽象的 JedisPoolConfig 提供。

如果你熟悉 Spring 的 JdbcTemplate 對(duì)象的話,這里大概能猜出來 RedisTemplate 的作用,RedisTemplate 對(duì) RedisConnection 進(jìn)行了封裝。

提供連接管理,序列化等功能,它對(duì) Redis 的交互進(jìn)行了更高層次的抽象,極大的方便和簡化了 Redis 的操作。

RedisCacheManager 做為 redis 統(tǒng)一的調(diào)度和管理者,有興趣可以反編譯源碼看看。

繼承自 org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager 并實(shí)現(xiàn) org.springframework.cache.CacheManager。

3. 添加 redis.properties

#============================# #==== Redis settings ====# #============================# #redis 服務(wù)器 IP redis.host=127.0.0.1#redis 服務(wù)器端口 redis.port=6379#redis 密碼 redis.pass=redis#2017#redis 支持16個(gè)數(shù)據(jù)庫(相當(dāng)于不同用戶)可以使不同的應(yīng)用程序數(shù)據(jù)彼此分開同時(shí)又存儲(chǔ)在相同的實(shí)例上 redis.dbIndex=0#redis 緩存數(shù)據(jù)過期時(shí)間單位秒 redis.expiration=3000#控制一個(gè) pool 最多有多少個(gè)狀態(tài)為 idle 的jedis實(shí)例 redis.maxIdle=300#控制一個(gè) pool 可分配多少個(gè)jedis實(shí)例 redis.maxActive=600#當(dāng)borrow一個(gè)jedis實(shí)例時(shí),最大的等待時(shí)間,如果超過等待時(shí)間,則直接拋出JedisConnectionException; redis.maxWait=1000#在borrow一個(gè)jedis實(shí)例時(shí),是否提前進(jìn)行alidate操作;如果為true,則得到的jedis實(shí)例均是可用的; redis.testOnBorrow=true

當(dāng)然配置文件你也可以硬編碼到程序中,只是在參數(shù)發(fā)生改變的時(shí)候比較痛苦一點(diǎn)而已。

其中大部分配置項(xiàng)都是圍繞著 jedisPool ,如果你對(duì)數(shù)據(jù)庫連接池比較熟,你會(huì)發(fā)現(xiàn)它倆的配置項(xiàng)有點(diǎn)相似。

當(dāng)系統(tǒng) redis 遇到問題出現(xiàn)故障時(shí),理解這里的選項(xiàng)是個(gè)不錯(cuò)的選擇。

更多配置項(xiàng)詳解:

http://www.2cto.com/database/201311/254449.html

4. 編寫自定義 redis 配置類

@Configuration @EnableCaching public class RedisCacheConfig extends CachingConfigurerSupport {protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);private volatile JedisConnectionFactory mJedisConnectionFactory;private volatile RedisTemplate<String, String> mRedisTemplate;private volatile RedisCacheManager mRedisCacheManager;public RedisCacheConfig() {super();}public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {super();this.mJedisConnectionFactory = mJedisConnectionFactory;this.mRedisTemplate = mRedisTemplate;this.mRedisCacheManager = mRedisCacheManager;}public JedisConnectionFactory redisConnectionFactory() {return mJedisConnectionFactory;}public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {return mRedisTemplate;}public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {return mRedisCacheManager;}@Beanpublic KeyGenerator keyGenerator() {return new KeyGenerator() {@Overridepublic Object generate(Object o, Method method, Object... objects) {StringBuilder sb = new StringBuilder();sb.append(o.getClass().getName());sb.append(method.getName());for (Object obj : objects) {sb.append(obj.toString());}return sb.toString();}};} }

該配置類繼承自 org.springframework.cache.annotation.CachingConfigurerSupport 并實(shí)現(xiàn) org.springframework.cache.annotation.CachingConfigurer 的方法。

通俗一點(diǎn),該類告訴 spring 當(dāng)前使用的緩存服務(wù)為 redis 并自定義了緩存 key 生成的規(guī)則。

5. 在你喜歡的地方進(jìn)行注解緩存

緩存一般使用在服務(wù)層,在你想緩存的方法上面添加相應(yīng)的注解即可,下面三個(gè)緩存的注解你得掌握。

  • @Cacheable spring 會(huì)在其被調(diào)用后將返回值緩存起來,以保證下次利用同樣的參數(shù)來執(zhí)行該方法時(shí)可以直接從緩存中獲取結(jié)果,而不需要再次執(zhí)行該方法。

  • @CachePut 標(biāo)注的方法在執(zhí)行前不會(huì)去檢查緩存中是否存在之前執(zhí)行過的結(jié)果,而是每次都會(huì)執(zhí)行該方法,并將執(zhí)行結(jié)果以鍵值對(duì)的形式存入指定的緩存中。

  • @CacheEvict 用來標(biāo)注在需要清除緩存元素的方法或類上的。

當(dāng)然這些注解里面還有很多其他的屬性配置,配合 spring-el 表達(dá)式能做的事情還有很多,大概只有你想不到,沒有做不到。

在業(yè)務(wù)規(guī)則比較復(fù)雜的情況下,緩存 key 的設(shè)計(jì)相當(dāng)重要,設(shè)計(jì)出色可以使你的應(yīng)用飛起來。

整個(gè)集成工作就結(jié)束了,是不是很簡單,上述算是 redis 的冰山一角,還有很多像 redis 路由/分布式/集群….,有機(jī)會(huì)實(shí)踐慢慢體會(huì)。

總結(jié)

以上是生活随笔為你收集整理的Spring 极速集成注解 Redis 实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本一级淫片免费放 | 琪琪色视频 | 日日爽日日操 | 免费看黄20分钟 | 日本五十熟hd丰满 | 日本a∨视频 | 精品久久久无码中文字幕 | 成人午夜在线 | 蜜桃久久久久久久 | 一本久道在线 | av的天堂 | 成片免费观看视频大全 | 一区二区不卡免费视频 | 中文一区在线 | 久艹在线观看 | 黄色高清视频在线观看 | 美女裸体跪姿扒开屁股无内裤 | 天天色视频 | 成人动漫在线观看免费 | 小情侣高清国产在线播放 | 欧美成人不卡 | 亚洲黄色一级 | 欧美日韩高清免费 | 黄色三级a | 精品一区二区三区不卡 | 精品熟妇无码av免费久久 | 一区二区三区在线观看 | 百合sm惩罚室羞辱调教 | 日韩不卡在线观看 | gogo人体做爰aaaa | 男人天堂a在线 | 亚洲国产精品成人 | 日本一道本在线 | 日韩视频在线免费 | 可以在线观看的av网站 | 国产精品视频在线观看 | 五月综合在线 | 小小姑娘电影大全免费播放 | 一级在线播放 | av免费播放 | 中文字幕无码精品亚洲资源网久久 | 无码人妻一区二区三区免费 | 国产一二三区在线 | 日韩激情一区二区 | 亚洲AV无码国产精品 | 成人网在线播放 | 一区二区视频免费在线观看 | 天天躁夜夜躁 | 日韩中文字幕国产 | 亚洲精品一二三区 | 你操综合| 久久免费在线视频 | 欧美国产一区二区 | 色久av| 四虎影成人精品a片 | 国产精品丝袜一区 | 国产片网址 | 久久九九精品视频 | 我们的生活第五季在线观看免费 | 亚洲国产成人一区 | 黄色一级免费片 | 91看片免费看 | 欲色视频 | 性欧美极品另类 | 国产精品sm| 91天天操 | 国产第八页 | 中文字幕第20页 | 亲子乱子伦xxxx | 深夜视频一区二区 | 日韩在线第二页 | 在线视频一区二区 | 日本黄色激情视频 | 特淫毛片| 三级黄色网 | 浓精喷进老师黑色丝袜在线观看 | 五月网婷婷 | 嫩草影院久久 | 大肉大捧一进一出好爽视频 | 日本一区免费电影 | 后入内射欧美99二区视频 | 丰满少妇xbxb毛片日本 | 久久久久久91亚洲精品中文字幕 | 免费看的av网站 | 日韩黄色三级 | 日本免费一区二区三区四区 | 色妞色| 日韩三级一区 | 亚洲区 欧美区 | 成人激情视频在线播放 | 香蕉久久av一区二区三区 | 日本天堂网在线 | 狠狠搞狠狠干 | 最近2018年手机中文字幕版 | 国产特级黄色录像 | 一级片免费网址 | 强行挺进白丝老师里呻吟 | 国产欧美日韩中文字幕 | 一节黄色片 |