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

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

相关文章

Android:BitmapFactory.decodeStream Bitmap的内存优化OutOfMemory异常以后Crash闪退

自己项目中使用如下方法&#xff0c;有的手机上会奔溃报错&#xff0c;原因是BitmapFactory.decodeStream部分没有使用options参数改变内存大小 改成如下形式后正常了&#xff1b;正确解决方案&#xff1a;设置inSampleSize 一&#xff09;Android BitmapFactory.decodeStream(…

C++利用汇编挖掘编程语言的本质..

1.谬论 很多非一手的资料特别是中文资料其实并不可靠 因为很多作者都是直接通过转载他人的作品 也不管他人作品真与假 而且有一部分的作品中的言论和官方描述相去甚远 有的则是翻译的过程中出现了问题 比如sizeof很多人认为是一个函数 其实他并不是一个函数 而是一个运算符 是…

档案数字化验收流程

档案数字化验收流程通常包括以下步骤&#xff1a; 1. 确定验收标准&#xff1a;制定档案数字化验收标准&#xff0c;明确要求检查的内容、质量要求、验收标准等。 2. 准备验收环境&#xff1a;为档案数字化验收准备合适的环境&#xff0c;包括验收场所、设备、人员等。 3. 准备…

vscode 引入外部依赖包

背景 我要在vscode中写一些antlr代码生成的cpp代码&#xff0c;但是在引入头文件#include "antlr4-runtime.h"的时候&#xff0c;出现报错&#xff0c;显示没有这个头文件&#xff0c;显然这是我们没有导入相关的包&#xff0c;因此我首先尝试了将antlr4的依赖源码在…

Semantic human matting

1.introduction 数据集包括&#xff0c;时尚模特数据集&#xff0c;超过18.8w张模特图&#xff0c;从中选出35311张图片&#xff0c;DIM数据集&#xff0c;仅包含人类的图像&#xff0c;202个前景图像&#xff0c;背景来自coco数据集和互联网&#xff0c;背景图不含人类&#x…

python 基础知识点(蓝桥杯python科目个人复习计划56)

今日复习内容&#xff1a;做题 例题1&#xff1a;最小的或运算 问题描述&#xff1a;给定整数a,b&#xff0c;求最小的整数x&#xff0c;满足a|x b|x&#xff0c;其中|表示或运算。 输入格式&#xff1a; 第一行包括两个正整数a&#xff0c;b&#xff1b; 输出格式&#…

小乌龟操作Git

1、选择小乌龟作为git客户端 最近使用idea来操作git的时候频频出现问题&#xff0c;要么是提交代码的时候少了某些文件&#xff0c;导致克隆下来无法运行&#xff0c;要么是提交速度太慢。 反正是在idea中操作git体验非常不好&#xff0c;所以决定来换一种方式来操作git。从网…

蓝桥杯算法题汇总

一.线性表&#xff1a;链式 例题&#xff1a;旋转链表 二.栈&#xff1a; 例题&#xff1a;行星碰撞问题 三.队列 三.数组和矩阵 例题&#xff1a;

FPGA-VGA成像原理与时序

什么是VGA: VGA, Video Graphics Array。即视频图形阵列,具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口,同样也是LCD液晶显示设备的标准接口,具有广泛的应用范围。在FGPA中,常广泛用于图像处理等领域。 VGA 显示器成像原理 在 VGA 标准刚兴…

C语言 vs Rust应该学习哪个?

C语言 vs Rust应该学习哪个&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&am…

linux系统如何安装nginx

首先下载nginx安装包 wget -c http://nginx.org/download/nginx-1.23.1.tar.gz然后解压安装包 tar -zxvf nginx-1.23.1.tar.gz如果服务器没有wget&#xff0c;可以安装一下&#xff0c;有的话可以跳过 yum install -y wget 然后安装相关依赖 yum install -y gcc-c zlib zl…

最新企微hook开源版

免费的企微框架 支持文本消息&#xff0c;图片消息&#xff0c;视频消息&#xff0c;文件消息。 其他可自行下载测试。 有兴趣可以进群交流。720192224 。群内不定期开源气味hook源码 BOOL WxWorkSendData(string data) { WX_GETOBJDATA obj { 0 }; //参数结构…

MATLAB练习题:排队论问题的模拟

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 下面我们来看一道排队论的题目。假设某银行工作时间内只有一个…

Kubernetes/k8s的核心概念

一、什么是 Kubernetes Kubernetes&#xff0c;从官方网站上可以看到&#xff0c;它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语&#xff0c;它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词&#xff0c;也就是“k8s”&#xff…

如何解决代理ip服务器连接问题

在当今的数字化时代&#xff0c;互联网连接已成为生活和工作中不可或缺的一部分。然而&#xff0c;在尝试访问互联网资源时&#xff0c;用户有时会遇到“代理服务器可能有问题&#xff0c;或地址不正确(你尚未连接)”的错误提示。这种情况通常表明计算机的网络设置存在问题&…

python统计分析——广义线性模型的评估

参考资料&#xff1a;用python动手学统计学 残差是表现数据与模型不契合的程度的重要指标。 1、导入库 # 导入库 # 用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入绘图的库 import matplotlib.pyplot as plt i…

面经 | Java创建线程的三种方式

利用JUC包创建线程的三种方式&#xff1a; 通过继承Thread类创建线程类实现Runnable接口创建线程类通过Callable和Future接口创建线程 继承Thread类创建线程 class Thread1 extends Thread {Overridepublic void run() {System.out.println("启动线程1");} }实现R…

第七篇:微信小程序的跳转页面

前提&#xff1a;建议还没学HTML、CSS、JavaScript、JSON、vue、Ajax的兄弟姐妹们&#xff0c;先去把这些基础补好过一遍&#xff0c;不然不好理解微信小程序 前面这一篇已经讲过一次<navigator>跳转页面的用法了&#xff0c;今天详细讲解一下 回顾&#xff1a; 小程序…

Lesson 1 introduction of machine /deep learning

听课&#xff08;李宏毅老师的&#xff09;笔记&#xff0c;方便梳理框架&#xff0c;以作复习之用。本节课主要介绍了什么是机器学习&#xff0c;机器学习的类型和流程&#xff0c;用一个现实中的例子详细地展示了整个工作流程。 1. 机器学习的定义 2. 不同的函数类型 预测数…

MyBatis 学习(四)之 SQL 映射文件

目录 1 SQL 映射文件介绍 2 select 元素 3 insert 元素 4 update 和 delete 元素 5 sql 元素 6 parameterType 元素 7 resultType 元素 8 resultMap 元素&#xff08;重要&#xff09; 9 参考文档 1 SQL 映射文件介绍 映射器是 MyBatis 中最复杂并且是最重要的…