springBoot整合Redis(二、RedisTemplate操作Redis)

        Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。

        springboot项目中一般不直接使用Jedis进行redis连接等操作了,因为集成了Spring-data-redis,所以一般直接使用Spring-data-redis即可,非常得方便。

     

一、RedisTemplate 简单使用

        1)引入依赖:

<!--redis相关的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
<!--spring2.0集成redis所需common-pool2--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

        2) 配置文件:

spring:redis:port: 6379# Redis服务器地址host: localhost# Redis数据库索引(默认为0)database: 0# Redis服务器连接密码(默认为空)password: 123456# 连接超时时间(毫秒)timeout: 5000ms# 连接池最大连接数(使用负值表示没有限制)jedis:pool:max-active: 8# 连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1ms# 连接池中的最大空闲连接max-idle: 8# 连接池中的最小空闲连接min-idle: 0

        3) 简单调用

        实际上引入依赖 以及 添加好配置文件之后就可以进行api调用了,调用方式很简单只需要使用@Autowired注解将RedisTemplate进行注入即可:

   @Autowiredprivate RedisTemplate redisTemplate;@GetMapping("/aaa")public boolean test() {redisTemplate.opsForValue().set("name", "123456");return true;}

        简单写个接口demo,上面的语句就是设置一个key为name,value为123456得数据。这样就可以了。但是虽然存储成功了,去redis中查看发现,存储是这样的:
        

左边得是key,右边得是value,会发现存储得类型是一串很奇怪得数据。

这是因为redis序列化方式得问题,需要简单说一下redisTemplate的序列化机制。

二、RedisTemplate序列化方式 

        1)RedisTemplate源码:

序列化需要注意的是这四个属性:

keySerializer:

1、用途:这个属性定义了 RedisTemplate 如何序列化和反序列化 Redis 键(key)的数据类型。

2、默认值:默认为 null,如果不设置,会使用 RedisTemplate 的默认键序列化器。

valueSerializer:

1、用途:这个属性定义了 RedisTemplate 如何序列化和反序列化 Redis 值(value)的数据类型。

2、默认值:默认为 null,如果不设置,会使用 RedisTemplate 的默认值序列化器。

hashKeySerializer:

1、用途:这个属性定义了 RedisTemplate 如何序列化和反序列化 Redis 哈希的键的数据类型(在使用 Hash 类型时)。

2、默认值:默认为 null,如果不设置,会使用 RedisTemplate 的默认哈希键序列化器。

hashValueSerializer:

1、用途:这个属性定义了 RedisTemplate 如何序列化和反序列化 Redis 哈希的值的数据类型(在使用 Hash 类型时)

2、默认值:默认为 null,如果不设置,会使用 RedisTemplate 的默认哈希值序列化器。

       这四个属性就是redis在存取数据时对应的序列化的方式。会发现这个四个属性都是RedisSerializer类型的,所以如果要设置对应的序列化属性,我们就需要使用RedisSerializer对应的实现类即可。

         2)RedisSerializer 接口的实现类 

        RedisSerializer 接口的实现类 有如下几种:

        也就是说我们要设置序列化方式,使用上面的实现类进行实现即可。

        归类一下可以分为:

  • JDK 序列化方式 (默认)
  • String 序列化方式
  • SON 序列化方式
  • XML 序列化方式

        3)序列化方式 :

        1.JDK 序列化方式 (默认)

   org.springframework.data.redis.serializer.JdkSerializationRedisSerializer ,默认情况下,RedisTemplate 使用该数据列化方式。
        Spring Boot 自动化配置 RedisTemplate Bean 对象时,就未设置默认的序列化方式。绝大多数情况下,不推荐使用 JdkSerializationRedisSerializer 进行序列化。主要是不方便人工排查数据。上面的demo种就是这样,我们会发现KEY 前面带着奇怪的 16 进制字符 , VALUE 也是一串奇怪的 16 进制字符。所以序列化成这样非常不方便我们进行排查。

        2)String 序列化方式

        org.springframework.data.redis.serializer.StringRedisSerializer ,字符串和二进制数组的直接转换

        一般我们key值都是使用 String 类型得序列化方式。

        3)JSON 序列化方式

        org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer 使用 Jackson 实现 JSON 的序列化方式,并且从 Generic 单词可以看出,是支持所有类。

        这里需要简单得讲解一下,先看一下使用这个类序列化后得结果:
        标准得json格式:

{"id": 100,"name": "小工匠","sex": "Male"
}

        使用GenericJackson2JsonRedisSerializer 后得序列化格式:

{"@class": "com.artisan.domain.Artisan","id": 100,"name": "小工匠","sex": "Male"
}

      会发现同一个对象,序列化后的内容不太一样,其实可以简单理解为,GenericJackson2JsonRedisSerializer  在序列化对象时,会将对象的对应的全类名也存储下来,这样在反序列化时,就可以直接通过全类名,直接反序列化为对应的对象类型。

        4.XML 序列化方式

  org.springframework.data.redis.serializer.OxmSerializer使用 Spring OXM 实现将对象和 String 的转换,从而 String 和二进制数组的转换。 没见过哪个项目用过,不啰嗦了

        

 https://www.cnblogs.com/csjoz/p/16337145.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505295.html

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

相关文章

【 C++ 】空间配置器

1、什么是空间配置器 空间配置器&#xff0c;顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的&#xff0c;在默默地工作。虽然在常规使用STL时&#xff0c;可能用不到它&#xff0c;但站在学习研究的角度&#xff0c;学习它的实现原理对我们有很大的帮助。 2、为什…

vector原理及注意事项

先来看一下本篇文章思维导图&#xff0c;如下&#xff1a; 一. vector的实现原理 1. vector的基类介绍 先看一下class vector的声明&#xff0c;截取头文件stl_vector.h中部分代码&#xff0c;如下&#xff1a; //两个模板参数&#xff0c;第一个是数据类型&#xff0c;第二…

2024最新算法:鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)求解23个基准函数(提供MATLAB代码)

一、鳑鲏鱼优化算法 鳑鲏鱼优化算法&#xff08;Bitterling Fish Optimization&#xff0c;BFO&#xff09;由Lida Zareian 等人于2024年提出。鳑鲏鱼在交配中&#xff0c;雄性和雌性物种相互接近&#xff0c;然后将精子和卵子释放到水中&#xff0c;但这种方法有一个很大的缺…

DDR5内存相比DDR4内存的优势和区别?选择哪一个服务器内存配置能避免丢包和延迟高?

根据幻兽帕鲁服务器的实际案例分析&#xff0c;选择合适的DDR4与DDR5内存大小以避免丢包和延迟高&#xff0c;需要考虑以下几个方面&#xff1a; 性能与延迟&#xff1a;DDR5内存相比DDR4在传输速率、带宽、工作电压等方面都有显著提升&#xff0c;但同时也伴随着更高的延迟。D…

【C++精简版回顾】14.(重载2)流重载

1.流重载 istream ostream 1.class class MM {friend ostream& operator<<(ostream& out, MM& mm);friend istream& operator>>(istream& in, MM& mm); public:MM() {}MM(int age,string name):age(age),name(name) {} private:int age;st…

Tomcat布署及优化二-----Mysql和虚拟机

1.Mysql搭Blog 1.1下载安装包 看一下tomcat状态 1.2放到指定目录 cp jpress-v3.2.1.war /usr/local/tomcat/webapps/ cd /usr/local/tomcat/webapps/ 1.3路径优化 ln -s jpress-v3.2.1 jpress 看jpress权限 1.4生成配置文件 cat >/etc/yum.repos.d/mysql.repo <<E…

数据抽取平台pydatax介绍--实现和项目使用

数据抽取平台pydatax实现过程中&#xff0c;有2个关键点&#xff1a; 1、是否能在python3中调用执行datax任务&#xff0c;自己测试了一下可以&#xff0c;代码如下&#xff1a; 这个str1就是配置的shell文件 try:result os.popen(str1).read() except Exception as …

【机器学习】包裹式特征选择之递归特征消除法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

测试面试精选题:可用性测试主要测试哪些方面,举例说明

1.界面设计&#xff1a; 评估软件的用户界面设计是否直观、美观、易于理解和操作。 测试用例&#xff1a;打开软件&#xff0c;查看界面布局是否合理&#xff0c;各个功能是否容易找到&#xff0c;是否符合用户习惯。 2.导航和布局&#xff1a; 评估用户在软件中导航和查找…

QoS简单配置案例

1、两边两个方向做相同的配置&#xff1a;入口复杂流分类用mqc方式配置&#xff0c;ds内设备入口配简单流分类。 2、两边两个方法做拥塞管理配置&#xff0c;拥塞管理配置思路&#xff1a; 拥塞管理的两种配置方法&#xff08;全部用一种也可以&#xff0c;这里学习就用了两种…

【计算机是怎么跑起来的】软件,体验一次手工汇编

【计算机是怎么跑起来的】软件,体验一次手工汇编 二进制机器语言汇编语言操作码操作数寄存器内存地址和I/O地址参考书:计算机是怎么跑起来的 第三章外设在路上。。。先整理一下本书涉及的理论知识,反正后面做视频也要重写QAQ 程序的作用是驱动硬件工作,所以在编写程序之前必…

硬派越野车之争,坦克400和方程豹5谁值得买

文 | AUTO芯球 ​作者 | 雷歌 堂堂一个2.9吨的硬派越野车&#xff0c;被一辆1吨多重的轿车撞掉了后轮。成了硬派越野车圈的舆论爆炸点。 最近车圈都在吐槽方程豹豹5&#xff0c;车祸是发生在几天前&#xff0c;撞车的是广汽埃安S max&#xff0c;被撞的是豹5。 一个硬派越野…