国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

深入理解Spring Redis的使用 (二)、RedisTemplate事務(wù)支持、序列化

2019-11-15 00:51:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
深入理解SPRing Redis的使用 (二)、RedisTemplate事務(wù)支持、序列化

上一篇文章我們講解了RedisTemplate的基本使用,通過RedisCallback來(lái)獲得connection,然后去操作Redis。網(wǎng)上的教程,大部分也都是這樣的操作。

這個(gè)類似于HibernateTemplate里面提供的executeWithNativesession方法,是java中的一種同步回調(diào)機(jī)制。在方法的前后,系統(tǒng)替我們打開關(guān)閉連接,設(shè)置事務(wù)等。

RedisTemplateapi詳解

1. RedisTemplate的事務(wù)
    private boolean enableTransactionSupport = false;    private boolean exposeConnection = false;    private boolean initialized = false;    private boolean enableDefaultSerializer = true;    private RedisSerializer<?> defaultSerializer = new JdkSerializationRedisSerializer();    private RedisSerializer keySerializer = null;    private RedisSerializer valueSerializer = null;    private RedisSerializer hashKeySerializer = null;    private RedisSerializer hashValueSerializer = null;    private RedisSerializer<String> stringSerializer = new StringRedisSerializer();    private ScriptExecutor<K> scriptExecutor;    // cache singleton objects (where possible)    private ValueOperations<K, V> valueOps;    private ListOperations<K, V> listOps;    private SetOperations<K, V> setOps;    private ZSetOperations<K, V> zSetOps;

enableTransactionSupport:是否啟用事務(wù)支持。我們?cè)诖a中搜索下用到這個(gè)變量的地方,會(huì)看到,在調(diào)用RedisCallback之前,有一行代碼是如果啟用事務(wù)支持,那么conn = RedisConnectionUtils.bindConnection(factory, enableTransactionSupport),也就是說(shuō),系統(tǒng)自動(dòng)幫我們拿到了事務(wù)中綁定的連接。可以在一個(gè)方法的多次對(duì)Redis增刪該查中,始終使用同一個(gè)連接。但是,即使使用了同樣的連接,沒有進(jìn)行connection.multi()和connection.exec(),依然是無(wú)法啟用事務(wù)的。

我沒有仔細(xì)的查閱代碼,但是可以知道的是,Spring已經(jīng)對(duì)這個(gè),給了我們一個(gè)更好的支持:@Transactional

在調(diào)用RedisTempalte中的execute()方法的地方,加入這個(gè)注解(是spring包下面提供的,不要引用成rt包下的注解),能讓這個(gè)方法中的所有execute,自動(dòng)加入multi()以及異常的回滾或者是正常運(yùn)行時(shí)候的提交!

2. RedisTempalte的Serializer

用過jedis操作的都知道,所有connection的操作方法,都是傳入字節(jié)數(shù)組。那么,將一個(gè)對(duì)象和字節(jié)相互轉(zhuǎn)換,就需要通過序列化和反序列化。

模版方法中,Spring提供了默認(rèn)的StringSerializer和JdkSerializer,第一個(gè)很簡(jiǎn)單,就是通過String.getBytes()來(lái)實(shí)現(xiàn)的。而且在Redis中,所有存儲(chǔ)的值都是字符串類型的。所以這種方法保存后,通過Redis-cli控制臺(tái),是可以清楚的查看到我們保存了什么key,value是什么。但是對(duì)于JdkSerializationRedisSerializer來(lái)說(shuō),這個(gè)序列化方法就是Jdk提供的了。首先要求我們要被序列化的類繼承自Serializeable接口,然后通過,然后通過Jdk對(duì)象序列化的方法保存。(注:這個(gè)序列化保存的對(duì)象,即使是個(gè)String類型的,在redis控制臺(tái),也是看不出來(lái)的,因?yàn)樗4媪艘恍?duì)象的類型什么的額外信息,)

這么一長(zhǎng)串,其實(shí)就是一個(gè)int類型的123。

keySerializer:這個(gè)是對(duì)key的默認(rèn)序列化器。默認(rèn)值是StringSerializer。

valueSerializer:這個(gè)是對(duì)value的默認(rèn)序列化器,默認(rèn)值是取自DefaultSerializer的JdkSerializationRedisSerializer。

hashKeySerializer:對(duì)hash結(jié)構(gòu)數(shù)據(jù)的hashkey序列化器,默認(rèn)值是取自DefaultSerializer的JdkSerializationRedisSerializer。

hashValueSerializer:對(duì)hash結(jié)構(gòu)數(shù)據(jù)的hashvalue序列化器,默認(rèn)值是取自DefaultSerializer的JdkSerializationRedisSerializer。

除此之外,我們?cè)谠擃愔校€發(fā)現(xiàn)了valueOps和hashOps等操作類,這是spring給我們提供的可以直接使用來(lái)操作Redis的類,非常方便。下一篇我們將講解這些類。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临湘市| 彭州市| 平定县| 油尖旺区| 青海省| 邳州市| 丹阳市| 太康县| 井研县| 油尖旺区| 扬中市| 东乌珠穆沁旗| 松滋市| 灵台县| 吉木萨尔县| 乐山市| 四川省| 桐柏县| 蕲春县| 临清市| 双鸭山市| 临清市| 磐安县| 浑源县| 邳州市| 安化县| 新竹县| 稷山县| 文化| 安阳县| 高雄县| 明水县| 铜梁县| 彭水| 阜南县| 泰安市| 通城县| 五台县| 大竹县| 乐安县| 雷州市|