SpringBoot 集成 Redis

一:SpringBoot 集成 Redis 
①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。

②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list

③通过Redis客户端可以使用多种语言在程序中,访问 Redis 数据;java 语言中使用的客户端库有 Jedis,lettuce,  Redisson 等。

④SpringBoot中使用 RedisTemplate(和StringRedisTemplate) 模版类操作 Redis 数据。

⑤Redis只要是运用在Linux服务器上,其中有两个重要的二进制文件

redis-server:服务端:在src目录下,执行./redis-server启动服务器端,不要关闭。

redis-cli:客户端: 在src目录下,执行./redis-cli启动客户端,访问redis中的数据。

第一步:创建SpingBoot项目,选择Web、Redis模块

 pom.xml配置

Redis使用是lettuce客户端

在程序中使用RedisTemplate类的方法去操作redis数据, 实际就是调用的lettuce客户端的中的方法!

第二步:配置核心配置文件 application.properties

打开redis.conf修改配置

编写Controller

 StringRedisTemplate 和 RedisTemplate  

(1)序列化定义

序列化:把对象转化为可传输的字节序列过程称为序列化。

反序列化:把字节序列还原为对象的过程称为反序列化。

注:默认使用的jdk序列化, 可以修改为其它的序列化!

(2)为什么需要序列化?

序列化最终的目的是为了对象可以跨平台存储,和进行网络传输!而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。我们必须在把对象转成字节数组的时候就制定一种规则(序列化),那么我们从IO流里面读出数据的时候再以这种规则把对象还原回来(反序列化)。

(3)序列化的方式

序列化只是一种拆装组装对象的规则,那么这种规则肯定也可能有多种多样,比如现在常见的序列化方式有:JDK(不支持跨语言)、JSON(常用)、XML、Hessian、Kryo(高性能)、Thrift、Protofbuff。

java的序列化:把java对象转为byte[], 二进制数据。

json序列化:json序列化功能将对象转换为 JSON 格式或从 JSON 格式转换对象。例如把一个Student对象转换为JSON字符串{"name":"李四", "age":29} ),反序列化(将JSON字符串 {"name":"李四", "age":29} 转换为Student对象)

(4)设置RedisTemplate或者StringRedisTemplate的序列化方式

注:默认采用的是JDK的序列化机制,引入spring-boot-starter-data-redis依赖后由SpringBoot创建RedisTemplate或者StringRedisTemplate对象!可以设置Key的序列化,可以设置value的序列化,也可以同时设置。

package com.zl.controller;
 
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
 
@RestController
public class RedisController {
    @Resource
    private RedisTemplate redisTemplate;
 
    @PostMapping("/redis/addrstr")
    public String addString(String key,String value){
        // 修改序列化方式
        // 设置key,value为String的序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        // 存数据
        redisTemplate.opsForValue().set(key,value);
        return "定义RedisTemplate对象的key,value的序列化";
    }
}
调用setKeySerializer设置key的序列化,参数是RedisSerializer接口对象

这个接口有很多实现类,其中一个就是默认采用的JDK序列化。

总结:实际上RedisTemplate使用范围比StringRedisTemplate要大。后者采用的就是String的序列化,专门用来处理字符串的。前者比较通用比如当前是一个Java对象,就需要使用RedisTemplate,然后修改序列化的方式即可!

(5) json序列化

第一步:准备一个可序列化的Java类,设置IDEA自动生成

如果我们不想手动输入序列化版本号,想让IDEA自动给我们生成一个怎们办呢?需要进行设置:File--->Settings--->Editor--->Code Style--->Inspections--->JVM languages--->把下面这个打上对勾--->Apply--->OK最终回到我们继承Serializable接口的类名上,alt+Enter即可自动生成序列版本号!

:把Java对象以json格式存储到redis

进行反序列化

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【2024年持续更新】国内ChatGPT-4中文镜像网站整理

目录 一、什么是ChatGPT镜像站? 二、GPT工具跟国内AI大模型整理 三、国内大模型与ChatGPT的区别 四、ChatGPT能做什么? 五、ChatGPT提示词教学 一、什么是ChatGPT镜像站? 镜像网站是指将原始网站的内容复制并放置在另一服务器上的网站。…

在 Hugging Face MTEB 排行榜上比较 ELSER 的检索相关性

作者:来自 Elastic Aris Papadopoulos 及 Serena Chou 本博客对 ELSER 在 Hugging Face MTEB 排行榜上的检索相关性进行了比较。 在 Hugging Face MTEB 排行榜上比较 ELSER 的检索相关性 ELSER(Elastic Learned Sparse EncodeR)是 Elastic …

Linux TFTP服务器搭建

话得多说 先水一波字 TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议。它用于在计算机网络中传输文件,特别适用于在网络设备(如开发板和Linux系统下)代码调试等操作。TFTP使用UDP(User Da…

多模态大语言模型(MLLM)-Blip2深度解读

前言 Blip2是一个多模态大语言模型,因其提出时间较早(2023年),且效果较好,很快成为一个标杆性工作。Blip2中提出的Q-former也成为衔接多模态和文本的重要桥梁。 Blip2发表时间是2023年,现在引用已经3288了…

计算机毕业设计 自习室座位预约系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【2024最新】基于springboot+vue的家具销售电商平台lw+ppt

作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…

Android OpenGLES2.0开发(四):矩阵变换和相机投影

事物的本质是事物本身所固有的、深藏于‌现象背后并决定或支配现象的方面‌。 还记得我们上一篇绘制的三角形吗,我们确实能够顺利用OpenGL ES绘制出图形了,这是一个好的开始,但这还远远不够。我们定义的坐标是正三角形,但是绘制出…

Python网络爬虫从入门到实战

目录 引言 一、网络爬虫的概念 二、 网络爬虫的基本工作流程 (一)过程: (二)安装requests模块和beautifulsoup4模块 (三)requests库的使用 1、requests库的基本介绍 2、导入requests库的…

使用tcpkill断开异常tcp连接

在linux系统中,遇到TCP链接迟迟不能释放的情况,类似FIN_WAIT1、FIN_WAIT2的状态,释放时间不确定,而且对应的程序已经关闭,相应的端口也不再监听,无法通过杀进程来解决,这种情况下,为…

大数据-157 Apache Kylin 背景 历程 特点 场景 架构 组件 详解

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

HarmonyOS NEXT - 表单录入组件封装(TextInput)

demo 地址: https://github.com/iotjin/JhHarmonyDemo 组件对应代码实现地址 代码不定时更新,请前往github查看最新代码 HarmonyOS NEXT - 表单录入组件封装(TextInput) 序JhFormInputCellJhFormSelectCellJhLoginTextField 序 鸿蒙next中有两…

PMP--冲刺题--解题--81-90

文章目录 12.采购管理--1.规划采购管理--在自制或外购分析中,可以使用回收期、投资回报率(ROI)内部报酬率(IRR)、现金流贴现、净现值(NPV)、收益成本净现值(BCA)或其他分…

如何使用ssm实现公司进销存管理系统设计与开发

TOC ssm792公司进销存管理系统设计与开发jsp 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广…

python画图|曲线动态输出基础教程

在前述学习过程中,已经掌握基本的曲线图像画法,并尝试探索过3D动画基础教程。 相关文章可以通过下述链接直达: python画三角函数图|小白入门级教程_正余弦函数画图python-CSDN博客 python动画教程|Animations using Matplotlib-官网教程程…

电玩体验馆计时软件可以倒计时的软件试用版下载 佳易王ps5计时器管理系统使用教程

一、前言 【软件试用版下载可以点击本文章最下方官网卡片】 电玩体验馆计时软件可以倒计时的软件试用版下载 佳易王ps5计时器管理系统使用教程 1、软件能够记录玩家开始的时间和节数时间,从而计算出时长。 2、根据预设的收费标准,软件可以自动计算出…

各省份自然灾害损失造成的直接经济损失数据(2009-2022年)

自然灾害是自然演变过程中不可避免的现象,它们对人类社会构成了巨大的威胁。中国作为一个自然灾害频发的国家,面临着种类繁多的灾害挑战,包括气象灾害、地质灾害、海洋灾害、生物灾害和森林草原火灾等。 数据来源:《中国环境统计…

【GESP】C++一级练习BCQM3030,保留12位小数

浮点数数位保留练习,%m.nf知识点,已在BCQM3027中详细介绍。 题解详见:https://www.coderli.com/gesp-1-bcqm3030/ 【GESP】C一级练习BCQM3030,保留12位小数 | OneCoder浮点数数位保留练习,%m.nf知识点,已在…

培训机构客户管理系统的设计+ssm论文源码调试讲解

2 系统开发环境 2.1微信开发者工具 微信开发者工具现在已经被小程序开发团队开发运行,目前微信开发者工具任然在不断的完善中,在开发小程序时经常要不断的更新。可以使用微信扫码登陆开发者工具,开发者工具将使用这个微信帐号的信息进行小程…

Android车载音频系统概览

目录 1. 什么是Android车载音频系统 2. Android 声音和声音流 2.1 Android 声音 2.2 外部声音流 2.3 输出设备 章节说明:本节内容是Android车载音频系统简介。 1. 什么是Android车载音频系统 官方英文名称是:Automotive audio systems 由于汽车上无论是音频设备的数量还…

QT 实现图片查看工具

QT 实现图片查看工具 1、选择图像文件 单文件选择 QFileDialog::getOpenFileName多文件选择 QFileDialog::getOpenFileNamesQList<QString> imageNames = QFileDialog::getOpenFileNames(this,tr("打开图片"),"",tr("图片文件 (*.png *.jpg *.b…