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.mzph.cn/news/451534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP环境搭建和Apache HTTP服务器配置

所需软件: 需要准备Apache HTTP 服务器: http://httpd.apache.org/download.cgi PHP环境下载:http://www.php.net/downloads.php Apache HTTP服务器安装: 由于最新的 Apache 已经不提供 Windows 的安装版本了,所以我们这里使用的是解压版。 下载地址:htt…

ElasticSearch安装过程中遇到的一些问题

问题1: 安装Elasticsearch5.X版本,不修改默认配置的情况下,一切还好,能够正常启动。但我必须开通外网访问。然后报错了,报错信息如下: ERROR: max file descriptors [1024] for elasticsearch process like…

进程的五种状态和线程的六种状态

参考文章: 进程的状态转换和线程的状态转换

Nexus 安装(Linux 环境)

一、环境准备 安装 JDK 1.7 二、下载 Nexus 压缩文件 下载地址:http://www.sonatype.org/nexus/archived/ 三、上传压缩文件 四、解压缩文件 五、配置环境变量 1、临时配置 mvn clean package -Dmaven.test.skiptrue -Dmaven.javadoc.skiptrue命令:expor…

java.util.UnknownFormatConversionException: Conversion = ‘,‘ 解决

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 报错&#xff1a; 2. 原因&#xff1a; 出错代码&#xff1a; if(info.getRiceCount() < 0){ ... } 事实上 对象的riceCoun属性值…

Map转为String

Map转为String 最近在做redis缓存时&#xff0c;需要将一个Map<String,Object>的对象转换为String对象存入redis&#xff0c;用的时候需从redis中取出来后并转为Map<String,Objcet>对象。 之前的做法直接就是Map对象的toString()存入redis,后面取出是就是用再转换为…

PowerBI分析Exchange服务器IIS运行日志

只要是基于Windows Server 的IIS来提供Web服务的应用&#xff0c;其实都可以对IIS的日志W3C进行分析&#xff0c;这样可以快速的了解整个web站点的运行情况&#xff0c;特别是对一些请求页面响应时间有要要求的&#xff0c;都可以从这些日志中分析问题出在哪&#xff0c;下面我…

java中 4 种取整函数

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如下&#xff1a; round 函数可以特别注意一下&#xff1a;

section8

本章节的目的是 【明确目标用户群】 &#xff0c;以更好的服务现有用户。 【知识点】 1.作图 显示中文plt.rcParams[font.sans-serif] [SimHei] # 步骤一&#xff08;替换sans-serif字体&#xff09; plt.rcParams[axes.unicode_minus] False # 步骤二&#xff08;解决坐标轴…

排查腾讯云服务器被挖矿病毒【pnscan】挟持

一、问题发现 最新在使用腾讯云部署项目应用&#xff0c;具体方式为docker部署。今天早上发现腾讯云发来一条报警信息&#xff1a; 看到信息中说到攻击行为&#xff0c;怀疑是否中了病毒&#xff0c;决定排查一下问题。 二、排查过程 首先登录腾讯云服务器控制台&#xff0…

redis 操作

一、自动分配&#xff08;redis&#xff09; 数据放缓存了&#xff0c;为的是速度快 redis是支持持久化的&#xff0c;如果关机了以后&#xff0c;数据已经会放在文件里了 先买上一台电脑&#xff1a;装上redis服务器软件 - 这个服务器有个工网IP&#xff1a;47.93.4.198 - 端口…

从另一个角度看大数据量处理利器:布隆过滤器

思路&#xff1a;从简单的排序谈到BitMap算法&#xff0c;再谈到数据去重问题&#xff0c;谈到大数据量处理利器&#xff1a;布隆过滤器。 情景1&#xff1a;对无重复的数据进行排序 给定数据&#xff08;2&#xff0c;4&#xff0c;1&#xff0c;12&#xff0c;9&#xff0c…

例题练习

1,购物车 功能要求&#xff1a;要求用户输入自己拥有总资产&#xff0c;例如&#xff1a;2000显示商品列表&#xff0c;让用户根据序号选择商品&#xff0c;加入购物车购买&#xff0c;如果商品总额大于总资产&#xff0c;提示账户余额不足&#xff0c;否则&#xff0c;购买成功…

并行计算的强大

最近在处理一批数据&#xff0c;10的8次方&#xff0c;处理完毕大概要一个月&#xff0c;并且这个程序占用的CPU只有一个&#xff08;我从来没有注意到这个问题啊啊啊&#xff09;。 突然师兄提醒我可以把10的8次方条数据拆成10个10的7次方&#xff0c;作为10条任务并行处理&a…

Kubernetes集群(概念篇)

Kubernetes介绍 2013年docker诞生&#xff0c;自此一发不可收拾&#xff0c;它的发展如火如荼&#xff0c;作为一个运维如果不会docker&#xff0c;那真的是落伍了。 而2014年出现的kubernetes&#xff08;又叫k8s&#xff09;更加炙手可热&#xff0c;我想大部分人仅仅是听说过…

$(“#addLowForm“).serialize()同时提交其它参数的写法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 原本写法&#xff1a; 2. 不光传表单参数&#xff0c;还有别的参数的写法&#xff1a;

JAVA自学笔记25

JAVA自学笔记25 1、GUI 1&#xff09;图形用户接口&#xff0c;以图形的方式&#xff0c;来显示计算机操作的界面&#xff0c;更方便更直观 2&#xff09;CLI 命令行用户接口&#xff0c;就是常见的Dos&#xff0c;操作不直观 3&#xff09; 类Dimension 类内封装单个对象…

Map是不是集合?

Map是不是集合&#xff1f; 一、起因 今天在一个群里跟几位朋友就“map是不是集合“”争执了起来&#xff1b;几位朋友一致认为map不是集合&#xff0c;他们说只有Collection接口下的才是集合&#xff0c;而我认为Collection和Map下的实现类都是集合类。二、发展 于是我开始在…

简单安装ELK分析日志及使用心得

ELK是由Elasticsearch、Logstash、Kibana三个组件组成的。Elasticsearch&#xff1a;是ELK的核心插件&#xff0c;是一个基于Lucene的搜索服务器&#xff0c;它提供一个分布式多用户能力的全文搜索引擎&#xff0c;能够达到实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0…

JS单引号嵌套的问题,怎么改才能对呢!

JS单引号嵌套的问题&#xff0c;怎么改才能对呢&#xff01; https://zhidao.baidu.com/question/416584343.html document.getElementById(celbid).innerHTML<inputname""type"text"οnblur"celchangeb(celaid,celbid);">;这段代码是JS显…