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;“英特尔并不满足于成为市场中…