Spring集成redis(Spring Data Redis)

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

轉載地址:http://blog.csdn.net/zhu_tianwei/article/details/44923001

Spring-data-redis是spring大家族的一部分,提供了在srping應用中通過簡單的配置訪問redis服務,對reids底層開發包(Jedis, JRedis, and RJC)進行了高度封裝,RedisTemplate提供了redis各種操作、異常處理及序列化,支持發布訂閱,并對spring 3.1 cache進行了實現。?
官網:http://projects.spring.io/spring-data-redis/?
項目地址:https://github.com/spring-projects/spring-data-redis?
一、spring-data-redis功能介紹?
jedis客戶端在編程實施方面存在如下不足:?
1)connection管理缺乏自動化,connection-pool的設計缺少必要的容器支持。?
2)數據操作需要關注“序列化”/“反序列化”,因為jedis的客戶端API接受的數據類型為string和byte,對結構化數據(json,xml,pojo等)操作需要額外的支持。?
3)事務操作純粹為硬編碼。?
4)pub/sub功能,缺乏必要的設計模式支持,對于開發者而言需要關注的太多。?
spring-data-redis針對jedis提供了如下功能:?
1.連接池自動管理,提供了一個高度封裝的“RedisTemplate”類?
2.針對jedis客戶端中大量api進行了歸類封裝,將同一類型操作封裝為operation接口?
ValueOperations:簡單K-V操作?
SetOperations:set類型數據操作?
ZSetOperations:zset類型數據操作?
HashOperations:針對map類型的數據操作?
ListOperations:針對list類型的數據操作?
3.提供了對key的“bound”(綁定)便捷化操作API,可以通過bound封裝指定的key,然后進行一系列的操作而無須“顯式”的再次指定Key,即BoundKeyOperations:?
BoundValueOperations?
BoundSetOperations?
BoundListOperations?
BoundSetOperations?
BoundHashOperations?
4.將事務操作封裝,有容器控制。?
5.針對數據的“序列化/反序列化”,提供了多種可選擇策略(RedisSerializer)?
JdkSerializationRedisSerializer:POJO對象的存取場景,使用JDK本身序列化機制,將pojo類通過ObjectInputStream/ObjectOutputStream進行序列化操作,最終redis-server中將存儲字節序列。是目前最常用的序列化策略。?
StringRedisSerializer:Key或者value為字符串的場景,根據指定的charset對數據的字節序列編碼成string,是“new String(bytes, charset)”和“string.getBytes(charset)”的直接封裝。是最輕量級和高效的策略。?
JacksonJsonRedisSerializer:jackson-json工具提供了javabean與json之間的轉換能力,可以將pojo實例序列化成json格式存儲在redis中,也可以將json格式的數據轉換成pojo實例。因為jackson工具在序列化和反序列化時,需要明確指定Class類型,因此此策略封裝起來稍微復雜。【需要jackson-mapper-asl工具支持】?
OxmSerializer:提供了將javabean與xml之間的轉換能力,目前可用的三方支持包括jaxb,apache-xmlbeans;redis存儲的數據將是xml工具。不過使用此策略,編程將會有些難度,而且效率最低;不建議使用。【需要spring-oxm模塊的支持】?
針對“序列化和發序列化”中JdkSerializationRedisSerializer和StringRedisSerializer是最基礎的策略,原則上,我們可以將數據存儲為任何格式以便應用程序存取和解析(其中應用包括app,hadoop等其他工具),不過在設計時仍然不推薦直接使用“JacksonJsonRedisSerializer”和“OxmSerializer”,因為無論是json還是xml,他們本身仍然是String。如果你的數據需要被第三方工具解析,那么數據應該使用StringRedisSerializer而不是JdkSerializationRedisSerializer。如果你的數據格式必須為json或者xml,那么在編程級別,在redisTemplate配置中仍然使用StringRedisSerializer,在存儲之前或者讀取之后,使用“SerializationUtils”工具轉換轉換成json或者xml,請參見下文實例。?
6.基于設計模式,和JMS開發思路,將pub/sub的API設計進行了封裝,使開發更加便捷。?
7.spring-data-redis中,并沒有對sharding提供良好的封裝,如果你的架構是基于sharding,那么你需要自己去實現,這也是sdr和jedis相比,唯一缺少的特性。?
二、serializer策略?
spring-data-redis提供了多種serializer策略,這對使用jedis的開發者而言,實在是非常便捷。sdr提供了4種內置的serializer:?
JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),數據以字節流存儲?
StringRedisSerializer:字符串編碼,數據以string存儲?
JacksonJsonRedisSerializer:json格式存儲?
OxmSerializer:xml格式存儲?
其中JdkSerializationRedisSerializer和StringRedisSerializer是最基礎的序列化策略,其中“JacksonJsonRedisSerializer”與“OxmSerializer”都是基于stirng存儲,因此它們是較為“高級”的序列化(最終還是使用string解析以及構建java對象)。?
RedisTemplate中需要聲明4種serializer,默認為“JdkSerializationRedisSerializer”:?
1) keySerializer :對于普通K-V操作時,key采取的序列化策略?
2) valueSerializer:value采取的序列化策略?
3) hashKeySerializer: 在hash數據結構中,hash-key的序列化策略?
4) hashValueSerializer:hash-value的序列化策略?
無論如何,建議key/hashKey采用StringRedisSerializer。?
三、使用實例?

轉載于:https://my.oschina.net/u/3611008/blog/1825270

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451534.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中利用re模塊使用正則表達式

Python通過re模塊提供對正則表達式的支持。使用re的一般步驟是先使用re.compile()函數,將正則表達式的字符串形式編譯為Pattern實例,然后使用Pattern實例處理文本并獲得匹配結果(一個Match實例),最后使用Match實例獲得…

Java三大變量分別是類變量、實例變量和局部變量

什么是變量:就是內容可以改變的量,它與常量相對應。而這三大變量實際上是從變量的作用域來定義和劃分的。 1、類變量,是歸屬類的變量,它是通過在定義類的屬性的時,增加static修飾符,所以又稱為靜態變量。類變量不僅可…

路途

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 PS : 這應該是08年寫的了吧.... 像是追尋明天的滄海一束, 不知道什么時候開始走上這樣熟悉的路途. 當天空開始一點一點變…

redux 源碼詳解

redux 單向數據流的由來 Flux將應用分成四個部分;view 視圖層;Action 視圖層發出的消息;(改變store里面的數據)Dispatch(派發器)Store (數據層) : 用來存在應用的狀態(數據),一旦發生變動,就要提醒view更新頁面。redux單向數據流: 具體詳情請…

冒泡排序與快速排序(java實現)

冒泡排序&#xff1a; public class bubbleSort {public static void bubbleSort1(int [] a, int n){int i, j;for(i0; i<n; i){//表示 n 次排序過程。for(j1; j<n-i; j){if(a[j-1] > a[j]){//前面的數字大于后面的數字就交換//交換 a[j-1]和 a[j]int temp;temp a[j…

Python中文編碼問題詳解

中文編碼問題是用中文的程序員經常頭大的問題&#xff0c;在python下也是如此&#xff0c;那么應該怎么理解和解決python的編碼問題呢&#xff1f; 我們要知道python內部使用的是unicode編碼&#xff0c;而外部卻要面對千奇百怪的各種編碼&#xff0c;比如作為中國程序經常要…

PHP環境搭建和Apache HTTP服務器配置

所需軟件: 需要準備Apache HTTP 服務器: http://httpd.apache.org/download.cgi PHP環境下載:http://www.php.net/downloads.php Apache HTTP服務器安裝: 由于最新的 Apache 已經不提供 Windows 的安裝版本了&#xff0c;所以我們這里使用的是解壓版。 下載地址&#xff1a;htt…

ElasticSearch安裝過程中遇到的一些問題

問題1&#xff1a; 安裝Elasticsearch5.X版本&#xff0c;不修改默認配置的情況下&#xff0c;一切還好&#xff0c;能夠正常啟動。但我必須開通外網訪問。然后報錯了&#xff0c;報錯信息如下&#xff1a; ERROR: max file descriptors [1024] for elasticsearch process like…

Java原子操作類AtomicInteger應用場景

參考文章&#xff1a;Java原子操作類AtomicInteger應用場景 感謝作者分享&#xff01;

漂泊的足跡

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 似乎有河一樣的蔓延 流淌過我被陽光翻曬過的身軀 你的足跡 是遙遠的一個小島 從不知名的地方漂泊而來

什么是MD5

MD5是message-digest algorithm 5&#xff08;信息-摘要算法&#xff09;的縮寫&#xff0c;被廣泛用于加密和解密技術上&#xff0c;它可以說是文件的“數字指紋”。任何一個文件&#xff0c;無論是可執行程序、圖像文件、臨時文件或者其他任何類型的文件&#xff0c;也不管它…

selenium使用js進行點擊

WebElement button driver.findElement(By.xpath("/html/body/div[1]/div[3]/h2/div[2]")); JavascriptExecutor js (JavascriptExecutor) driver; js.executeScript("arguments[0].click();", button);當你使用driver原生API如果發現報錯&#xff0c;或…

screenX clientX pageX的區別

screenX:鼠標位置相對于用戶屏幕水平偏移量&#xff0c;而screenY也就是垂直方向的&#xff0c;此時的參照點也就是原點是屏幕的左上角。 clientX:跟screenX相比就是將參照點改成了瀏覽器內容區域的左上角&#xff0c;該參照點會隨之滾動條的移動而移動。 pageX&#xff1a;參照…

進程的五種狀態和線程的六種狀態

參考文章&#xff1a; 進程的狀態轉換和線程的狀態轉換

談談對程序員的培養

這篇文章是我好久以來的想法&#xff0c;有一些感悟&#xff0c;有一些激烈的言辭&#xff0c;我很自豪我就是一名程序員&#xff0c;我希望給程序員或者前程序員們帶來一點啟發。也許你認可我的言辭&#xff0c;也許你不屑我的觀點&#xff0c;無論如何&#xff0c;歡迎談談你…

我記得

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我記得在農村一片一片金色的稻田 , 碧綠的秧苗 , 我想起有風吹過的時候那金穗一層一層的翻滾 ... 是一際熟悉于往昔的海洋 , 那火黃的…

Python實現文件md5校驗

Linux下校驗文件MD5值&#xff0c;最簡單的方法就是執行md5sum命令 md5sum filename 原本打算用subprocess調用系統命令來獲取md5值&#xff0c; [python] view plaincopy print?import subprocess,shlex cmd "md5sum filename" p subprocess(shlex.split(cmd…

Nexus 安裝(Linux 環境)

一、環境準備 安裝 JDK 1.7 二、下載 Nexus 壓縮文件 下載地址&#xff1a;http://www.sonatype.org/nexus/archived/ 三、上傳壓縮文件 四、解壓縮文件 五、配置環境變量 1、臨時配置 mvn clean package -Dmaven.test.skiptrue -Dmaven.javadoc.skiptrue命令&#xff1a;expor…

android 連接指定wifi

本文牽涉kotlin和rxjava的相關知識 //查詢wifi信息需要申請權限&#xff0c;權限工具類就不要在意了&#xff0c;重點在下面 PermissionUtils.permission(PermissionConstants.LOCATION).callback(object : PermissionUtils.SimpleCallback {override fun onGranted() {//通過授…

英特爾預計5年內將成智能手機芯片大廠

北京時間4月26日早間消息&#xff0c;英特爾預計&#xff0c;英特爾在未來5年內將成為智能手機芯片市場的“重要參與者”。過去10年中&#xff0c;英特爾在這一市場的多次嘗試都未能獲得成功。 英特爾CFO斯泰西史密斯(Stacy Smith)表示&#xff1a;“英特爾并不滿足于成為市場中…