激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring使用RedisTemplate的操作類訪問Redis

spring使用RedisTemplate的操作類訪問Redis

2020-10-20 10:20最好時光 Java教程

本篇文章主要介紹了spring使用RedisTemplate的操作類訪問Redis,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

?
1
2
3
4
private ValueOperations<K, V> valueOps;
private ListOperations<K, V> listOps;
private SetOperations<K, V> setOps;
private ZSetOperations<K, V> zSetOps;

1. RedisOperations接口說明

這個接口的實現類就是RedisTemplate本身,主要提供了一些對Redis鍵,事務,運行腳本等命令的支持,不負責數據的讀寫。
我們選一段代碼看下:

?
1
2
3
4
5
6
7
8
9
10
11
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);
}

這個是事務的監視命令,可以看出,里面的實現也是用的回調RedisCallback。這些api都是通過connection的api來進行了封裝。 

2. ValueOperations接口說明

這個接口的實現類為DefaultValueOperations,default這個類同時繼承AbstractOperation,我們來看下這個類的構造函數:

?
1
2
3
DefaultValueOperations(RedisTemplate<K, V> template) {
  super(template);
}

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

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

是不是很奇怪,毫無父子兄弟關系的兩個類,怎么能互相注入呢?這個是Spring的Editor機制,搜索下ValueOperationsEditor這個類就知道了,Spring在注入的時候調用了Editor的setValue方法。了解Spring源碼的應該知道。我也是看別人的文章才理解的。

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

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

另外,對于成員listOps,setOps,zSetOps這接個操作類,就不再贅述,原理同ValueOperations,是其他幾種數據類型的實現。

3. HashOperations接口說明

這個接口并沒有定義成員變量,猜測是因為對于Hash來說,又增加了額外的Key和Value,泛型無法在成員前額外定義,所以直接提供了方法。不過所幸里面用的是JdkSerializer,所以這個定義了什么類型的泛型都不會產生運行異常。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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);
}

這個是基本的put方法,可以看出key和hashkey這兩個,調用了不同的序列化方法。進行方法查看,看到序列化hashkey用的是template里的hashkeyserializer,默認是jdkserializer,這個會導致在redis控制臺,看不出來存了什么key。如果不喜歡,可以通過redistemplate.sethashkeyserializer()來進行設置。

對于hash結構所有的api,也都在這個類里進行了封裝,比如hset變為了put,hget變為get。需要自行去查看api。不要被誤導。

4. 總結

到這里為止,已經把基本的使用都說完了。說的很粗糙,只是把我覺得容易出現誤解的點進行了重點說明,基礎的操作還需要大家自己稍微看下。權作一個拋磚引玉的作用吧。接下來,可能會總結下在這兩個月用Redis遇到的一些問題進行說明。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/lxb15959168136/article/details/52280003

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: chinesexxxx刘婷hd 黄色片网站在线免费观看 国产免费高清在线 | 国产精品久久久久久久久久电影 | 激情综合婷婷久久 | 欧美一区二区三区不卡免费观看 | 国产毛片aaa一区二区三区视频 | 国产在线精品区 | 国产免费网站视频 | av免费av | 久久久www成人免费精品 | 2021国产精品视频 | 3级毛片 | 国产午夜精品视频免费不卡69堂 | 婷婷一区二区三区四区 | av不卡免费在线 | 九一看片. | 日韩av电影免费看 | 爱福利视频网 | 曰本三级日本三级日本三级 | 久久久免费观看完整版 | 羞羞视频免费入口网站 | 亚洲精品永久视频 | 萌白酱福利视频在线网站 | 97中文| 精品一区二区三区在线观看国产 | 婷婷久久网 | free台湾极品性hd | 最新福利在线 | 国产成人av在线 | 久久久久久久亚洲精品 | 99在线啪 | 欧美精品一级 | 午夜精品毛片 | 日韩av手机在线免费观看 | 黄色的视频免费观看 | 亚洲va久久久噜噜噜久牛牛影视 | 密室逃脱第一季免费观看完整在线 | 日韩在线激情 | h视频在线观看免费 | 亚洲成人福利在线 | 久久精品成人影院 | 国产91久久精品一区二区 |