从零开始教你舒服的使用RedisTemplate操作Redis数据
SpringBoot快速操作Redis数据
在SpringBoot框架中提供了spring-boot-starter-data-redis的依赖组件进行操作Redis服务,当引入了该组件之后,只需要配置Redis的配置即可进行链接Redis服务并且进行操作Redis服务数据。
针对于不同的版本有了不同的底层客户端的支持的底层客户端框架是不同的:目前常见的客户端为Jedis和Lettuce。低版本SpringBoot支持的Jedis
Jedis是很常用的Redis的Java 实现的客户端。支持基本的数据类型如:String、Hash、List、Set、Sorted Set。
特点:使用阻塞的 I/O,方法调用同步,程序流需要等到 socket 处理完 I/O 才能执行,不支持异步操作。Jedis 客户端实例不是线程安全的,需要通过连接池来使用 Jedis。高版本版本SpringBoot支持的Lettuce
Lettuce客户端主要用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
基于 Netty 框架的事件驱动的通信层,其方法调用是异步的。Lettuce 的 API 是线程安全的,所以可以操作单个 Lettuce 连接来完成各种操作。spring-data-redis针对jedis提供了如下功能:
Spring Boot 的 spring-boot-starter-data-redis 为 Redis 的相关操作提供了一个高度封装的 RedisTemplate 类,而且对每种类型的数据结构都进行了归类,实现连接池自动管理,提供了一个高度封装的"RedisTemplate"类。 针对jedis/Lettuce客户端中大量api进行了归类封装,将同一类型操作封装为operation接口。通用的接口类型工厂方法
提供了对key的"bound"(绑定)便捷化操作API,可以通过bound封装指定的key,然后进行一系列的操作而无须"显式"的再次指定Key,即BoundKeyOperations:
ValueOperations - BoundValueOperations:String类型的简单K-V操作SetOperations - BoundSetOperations:set类型数据操作ZSetOperations - BoundListOperations:zset类型数据操作HashOperations - BoundSetOperations:针对map类型的数据操作ListOperations - BoundHashOperations:针对list类型的数据操作序列化/反序列化的扩展机制
针对数据的"序列化/反序列化",提供了多种可选择策略(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工具支持】Jackson2JsonRedisSerializer
使用Jackson库将对象序列化为JSON字符串。优点是速度快,序列化后的字符串短小精悍,不需要实现Serializable接口。但缺点也非常致命,那就是此类的构造函数中有一个类型参数,必须提供要序列化对象的类型信息(.class对象)。 通过查看源代码,发现其只在反序列化过程中用到了类型信息。OxmSerializer
提供了将javabean与xml之间的转换能力,目前可用的三方支持包括jaxb,apache-xmlbeans;redis存储的数据将是xml工具。不过使用此策略,编程将会有些难度,而且效率最低;不建议使用。【需要spring-oxm模块的支持】扩展第三方序列化工具
当然了除了以上这几种基本的序列化器之外您还可以进行自定义一些更加优秀、速度更块的序列化方式,例如:FastJsonRedisSerializer和KryoRedisSerializer、FSTRedisSerializer等。RedisSerializer接口
RedisSerializer 基础接口定义了将对象转换为字节数组(二进制数据)的序列化和反序列化方法。建议将实现设计为在序列化和反序列化端处理空对象/空字节数组。注意,Redis 不接受空键或空值,但可以返回 null(对于不存在的键)。RedisSerializer 接口方法定义
序列化
序列化方法定义如下:
javabyte[] serialize(T t)
该方法将给定对象 t 序列化为二进制数据,及字节数组。注意:对象 t 和返回值可以为 null。反序列化
反序列化方法定义如下:
javaT deserialize(byte[] bytes)
该方法将从给定的二进制数据(字节数组)反序列化为一个对象。注意:bytes 字节数组和返回值 T 均可以为 null。
注意:如果上面的 serialize() 和 deserialize() 方法在执行时报错,将抛出org.springframework.data.redis.serializer.SerializationException 异常。引入spring-boot-starter-data-redis组件
springboot 与redis的整合,pom文件,依赖如下:
xml org.springframework.boot spring-boot-starter-data-redis 配置对应的application.properties文件
针对于配置我们按照jedis的配置为基础案例,如下所示。
properties# Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0 对应的SpringBoot-Redis的核心配置类
此处需要定义RedisTemplate对象的配置类,其中需要配置对应的RedisConnectionFactory对象类以及对应类型的序列化和反序列化组件起。如下所示定义对应的redisTemplate对象类
默认是JDK的序列化策略,这里配置redisTemplate采用的是Jackson2JsonRedisSerializer的序列化策略,参数为redisConnectionFactory。
java @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) Jackson2JsonRedisSerializer
特工王妃楚乔传,赵丽颖饰演的楚乔是洛河之女是嘛?楚乔应该就是洛河之女。时间脉络是这样的小时候的楚乔一直在跟随一个女人练武,这个女人就是楚乔的妈妈,两个人有同样的彼岸花纹身,所以说明有可能属于同一个组织。后来这个楚乔的妈妈出于某种
有哪些好看的间谍剧可以推荐?今天我们就来聊一聊那些真正好看的谍战剧吧。小编经过筛选,最终选定下面8部谍战剧。需要指出的是,下面8部真正好看的谍战剧在豆瓣上的评分都高于8分。一黎明之前豆瓣评分9。2黎明之前由吴
名爵领航的油耗高吗?这个和驾驶习惯,路况有关系,每个人都不一样的,一般综合油耗都在78个左右吧,名爵领航的油耗还是可以的。名爵领航这个车子的油耗不高,我开这个车在市区跑也只是7个油左右,可以说是很经济
价格在五六百两瓶的酱香型白酒有什么推荐?感谢邀请。酱香型五六百的选择性还是很多的,比如茅台系列的。1茅台王子酱香经典市场价325元茅台酱香经典酒是53度的高度酒,价格定位在300元左右。采用了茅台独特的酿酒工艺,搭配传统
有声绘本世界为谁存在让孩子对世界满怀感恩和敬意乐爸导读今天分享的绘本故事叫世界为谁存在,故事讲述了世界为谁存在?狮子宝宝问爸爸。呃,看看你的四周,爸爸回答,这个世界有那么多绿油油的草原,让你跑跳奔放,每一只斑马羚羊与大象,帮助
宝宝打嗝不停,你可以这样做姐妹们有没有遇到过这种情况,就是小宝宝喝完奶后常常打嗝不止。新生儿打嗝要特别注意,必须要细心呵护才行。新生儿打嗝的原因主要有很多,针对不同原因处理的方法也是不同的,一般新生儿打嗝不
出生半年数次遭遇病危通知,这个漂洋过海求医的异域宝宝,在这里转危为安出生17天,就遭遇抽搐呼吸心跳骤停出生2个月时,医生已数次下达病危通知小亚当来到这个世界的前200多天,几乎都是在医院度过。不愿就此放弃的亚当父母带着孩子辗转多地,终于在中国遇到优
英超死敌红军与红魔英格兰足球历史上,利物浦和曼联是两支不可忽视的劲旅。这两支球队不仅在球场上的竞争引人瞩目,而且在历史地缘政治和文化方面也有着诸多联系。本文将从多个角度来探究这两支球队之间的关系。历
湖人3换1报价方案,有意得到杰伦布朗,提升球队整体实力据NBA名记Shams报道,凯尔特人的布朗先后拒绝了球队提供的3年1。19亿和4年1。82亿的续约合同,他想要5年2。82亿的超级顶薪合同。这让双方的谈判陷入僵局,如果绿军不能提供
你觉得用什么办法才能拯救国足?该拯救的是中国的男孩!用死刑犯,踢进世界一百名,改成20年有期徒刑。踢进三十名,改成十年有期徒刑。踢进世界杯,改成三年有期徒刑。世界杯夺冠,当场释放。这个问题提得很搞笑,国家都不在
中国几亿男人为什么都凑不到11个人踢好足球?不是凑不到11个人,很简单,会踢球,有技术,有体力,有拼博,有拼劲的球员因为沒有关糸,进不了国家队,有关糸有靠山的上场又没技术更没体力。问题在于体制探索尚未完成,机制塑造不够完备。