最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring使用RedisTemplate的操作類訪問Redis

 更新時(shí)間:2017年05月20日 14:57:56   作者:最好時(shí)光  
本篇文章主要介紹了spring使用RedisTemplate的操作類訪問Redis,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

事務(wù)需要開啟enableTransactionSupport,然后使用@transactional注解,里面直接通過回調(diào)的connection,就不需要自己進(jìn)行multi和exec的事務(wù)開啟提交了。但是通過回調(diào)去獲取connection,完全沒有達(dá)到一個(gè)模版類的功能。所以這篇我們會(huì)講下幾種Operations接口提供的方法。

  private ValueOperations<K, V> valueOps;
  private ListOperations<K, V> listOps;
  private SetOperations<K, V> setOps;
  private ZSetOperations<K, V> zSetOps;

1. RedisOperations接口說明

這個(gè)接口的實(shí)現(xiàn)類就是RedisTemplate本身,主要提供了一些對(duì)Redis鍵,事務(wù),運(yùn)行腳本等命令的支持,不負(fù)責(zé)數(shù)據(jù)的讀寫。
我們選一段代碼看下:

  public void watch(K key) {
    final byte[] rawKey = rawKey(key);

    execute(new RedisCallback<Object>() {

      public Object doInRedis(RedisConnection connection) {
        connection.watch(rawKey);
        return null;
      }
    }, true);
  }

這個(gè)是事務(wù)的監(jiān)視命令,可以看出,里面的實(shí)現(xiàn)也是用的回調(diào)RedisCallback。這些api都是通過connection的api來進(jìn)行了封裝。 

2. ValueOperations接口說明

這個(gè)接口的實(shí)現(xiàn)類為DefaultValueOperations,default這個(gè)類同時(shí)繼承AbstractOperation,我們來看下這個(gè)類的構(gòu)造函數(shù):

  DefaultValueOperations(RedisTemplate<K, V> template) {
    super(template);
  }

非公開的,需要傳入template來構(gòu)造。但是我們是無法訪問的。不過不要急,在RedisTemplate中,已經(jīng)提供了一個(gè)工廠方法:opsForValue()。這個(gè)方法會(huì)返回一個(gè)默認(rèn)的操作類。另外,我們可以直接通過注解@Resource(name = "redisTemplate")來進(jìn)行注入。

  @Resource(name = "redisTemplate")
  private ValueOperations<String, Object> vOps;

是不是很奇怪,毫無父子兄弟關(guān)系的兩個(gè)類,怎么能互相注入呢?這個(gè)是Spring的Editor機(jī)制,搜索下ValueOperationsEditor這個(gè)類就知道了,Spring在注入的時(shí)候調(diào)用了Editor的setValue方法。了解Spring源碼的應(yīng)該知道。我也是看別人的文章才理解的。

其實(shí)除了可以通過template注入ValueOperations,還可以注入 上面的其他幾種operations以及HashOperations.
DefaultValueOperations提供了所有Redis字符串類型的操作api。比如set,get,incr等等。使用這些方法,可以方便的直接存儲(chǔ)任意的java類型,而不需要自己去將存儲(chǔ)的東西序列化以及反序列化。

注意:泛型的類型,以及序列化器都是來自RedisTemplate。如果要自行進(jìn)行json或者其他的序列化,就需要在RedisTemplate中進(jìn)行更改。

另外,對(duì)于成員listOps,setOps,zSetOps這接個(gè)操作類,就不再贅述,原理同ValueOperations,是其他幾種數(shù)據(jù)類型的實(shí)現(xiàn)。

3. HashOperations接口說明

這個(gè)接口并沒有定義成員變量,猜測(cè)是因?yàn)閷?duì)于Hash來說,又增加了額外的Key和Value,泛型無法在成員前額外定義,所以直接提供了方法。不過所幸里面用的是JdkSerializer,所以這個(gè)定義了什么類型的泛型都不會(huì)產(chǎn)生運(yùn)行異常。

  public void put(K key, HK hashKey, HV value) {
    final byte[] rawKey = rawKey(key);
    final byte[] rawHashKey = rawHashKey(hashKey);
    final byte[] rawHashValue = rawHashValue(value);

    execute(new RedisCallback<Object>() {

      public Object doInRedis(RedisConnection connection) {
        connection.hSet(rawKey, rawHashKey, rawHashValue);
        return null;
      }
    }, true);
  }

這個(gè)是基本的put方法,可以看出key和hashkey這兩個(gè),調(diào)用了不同的序列化方法。進(jìn)行方法查看,看到序列化hashkey用的是template里的hashkeyserializer,默認(rèn)是jdkserializer,這個(gè)會(huì)導(dǎo)致在redis控制臺(tái),看不出來存了什么key。如果不喜歡,可以通過redistemplate.sethashkeyserializer()來進(jìn)行設(shè)置。

對(duì)于hash結(jié)構(gòu)所有的api,也都在這個(gè)類里進(jìn)行了封裝,比如hset變?yōu)榱藀ut,hget變?yōu)間et。需要自行去查看api。不要被誤導(dǎo)。

4. 總結(jié)

到這里為止,已經(jīng)把基本的使用都說完了。說的很粗糙,只是把我覺得容易出現(xiàn)誤解的點(diǎn)進(jìn)行了重點(diǎn)說明,基礎(chǔ)的操作還需要大家自己稍微看下。權(quán)作一個(gè)拋磚引玉的作用吧。接下來,可能會(huì)總結(jié)下在這兩個(gè)月用Redis遇到的一些問題進(jìn)行說明。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java利用位運(yùn)算實(shí)現(xiàn)比較兩個(gè)數(shù)的大小

    Java利用位運(yùn)算實(shí)現(xiàn)比較兩個(gè)數(shù)的大小

    這篇文章主要為大家介紹了,在Java中如何不用任何比較判斷符(>,==,<),返回兩個(gè)數(shù)( 32 位整數(shù))中較大的數(shù),感興趣的可以了解一下
    2022-08-08
  • 解析Mybatis延遲加載問題

    解析Mybatis延遲加載問題

    這篇文章主要介紹了Mybatis的延遲加載問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Java連接合并2個(gè)數(shù)組(Array)的5種方法例子

    Java連接合并2個(gè)數(shù)組(Array)的5種方法例子

    最近在寫代碼時(shí)遇到了需要合并兩個(gè)數(shù)組的需求,突然發(fā)現(xiàn)以前沒用過,于是研究了一下合并數(shù)組的方式,這篇文章主要給大家介紹了關(guān)于Java連接合并2個(gè)數(shù)組(Array)的5種方法,需要的朋友可以參考下
    2023-12-12
  • SpringMVC框架實(shí)現(xiàn)圖片上傳與下載

    SpringMVC框架實(shí)現(xiàn)圖片上傳與下載

    這篇文章主要為大家詳細(xì)介紹了SpringMVC框架實(shí)現(xiàn)圖片上傳與下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • spring boot 自定義starter的實(shí)現(xiàn)教程

    spring boot 自定義starter的實(shí)現(xiàn)教程

    下面小編就為大家分享一篇spring boot 自定義starter的實(shí)現(xiàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 基于@RequestParam name和value屬性的區(qū)別

    基于@RequestParam name和value屬性的區(qū)別

    這篇文章主要介紹了@RequestParam name和value屬性的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解決JD-GUI for mac big sur打不開問題

    解決JD-GUI for mac big sur打不開問題

    這篇文章主要介紹了解決JD-GUI for mac big sur打不開問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java 字符串截取的實(shí)例詳解

    java 字符串截取的實(shí)例詳解

    這篇文章主要介紹了java 字符串截取的實(shí)例詳解的相關(guān)資料,這里提供了實(shí)例代碼幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • springboot 動(dòng)態(tài)數(shù)據(jù)源的實(shí)現(xiàn)方法(Mybatis+Druid)

    springboot 動(dòng)態(tài)數(shù)據(jù)源的實(shí)現(xiàn)方法(Mybatis+Druid)

    這篇文章主要介紹了springboot 動(dòng)態(tài)數(shù)據(jù)源的實(shí)現(xiàn)方法(Mybatis+Druid),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java下載https文件并上傳阿里云oss服務(wù)器

    Java下載https文件并上傳阿里云oss服務(wù)器

    這篇文章主要介紹了Java下載https文件并上傳到阿里云oss服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論

喜德县| 志丹县| 秀山| 青川县| 海口市| 遵义县| 承德县| 本溪市| 闻喜县| 三河市| 鞍山市| 乌鲁木齐县| 会宁县| 巴里| 陈巴尔虎旗| 济源市| 依安县| 铁岭市| 贵州省| 利津县| 东宁县| 布尔津县| 阜新| 吴堡县| 寻乌县| 卓资县| 洛川县| 桐柏县| 清涧县| 余江县| 汉沽区| 高密市| 宁河县| 金山区| 永川市| 阜南县| 施秉县| 克山县| 祁东县| 富源县| 尉犁县|