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.rhkb.cn/news/444315.html

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

相关文章

初阶C语言-结构体

一.结构体的声明 1.结构体类型的声明 1.1结构的基础知识 结构是一些值的集合,这些值称为称为变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag //struct是结构体关键字,tag是结构体类型名称 { member - list;//成员变…

D26【python 接口自动化学习】- python 基础之判断与循环

day26 语句嵌套 学习日期:20241003 学习目标:判断与循环﹣-36 语句嵌套:如何处理多重嵌套的问题? 学习笔记: 语句嵌套的用途 在条件语句中使用另外一个条件语句 在循环中使用条件语句 多重循环 总结 1…

linux查看k8s的开机启动状态 systemctl is-enabled 查看开机启动状态

查看k8s的开机启动状态 在Kubernetes中,通常使用systemd来管理服务的启动。但是,Kubernetes节点上的服务可能不是由systemd直接管理,而是通过kubelet服务来管理。因此,检查Kubernetes节点的开机启动状态,你需要检查ku…

Unity网络开发 - C#开源网络通信库PESocket的使用

概述 在现代多人在线游戏中,稳定且高效的网络通信是确保游戏体验的关键。本文将探讨如何利用C#开源网络通信库PESocket来构建一个简单的Unity客户端与.NET控制台服务器之间的实时消息传递系统。通过本例,读者不仅能够了解PESocket的基本用法&#xff0c…

稀土抗紫外屏蔽剂的用途

稀土抗紫外屏蔽剂具有光、热稳定性好,可高效吸收/有效屏蔽280-400nm范围内的紫外线,无二次氧化过程的缺点,彻底解决产品因紫外线原因造成的变质和老化问题,并且具有添加量小、无毒、不易析出等优点。 稀土抗紫外屏蔽剂的用途只要有…

安全网络架构

网络安全解决方案是指通过一系列技术和措施来保护网络系统和数据的安全。它涉及多个方面,包括网络设备的防护、数据的加密和备份、安全策略的制定和执行等。以下是一些常见的网络安全解决方案: 防火墙:防火墙是一种硬件或软件设备&#xff0c…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl,那么我们就可以直接用了,这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…

Leetcode 买卖股票的最佳时机

这段代码的目的是解决“买卖股票的最佳时机”这个问题,即在给定的股票价格数组中,找到一次买入和卖出所能获得的最大利润。 算法思想: 定义两个变量: minPrice: 这个变量用于记录迄今为止遇到的最小股票价格(买入价格…

RandLA-Net 基于 Tensorflow , 训练自定义数据集

搭建 RandLA-Net 训练环境, 生成自定义训练数据集, 训练自定义数据集. Code: https://github.com/QingyongHu/RandLA-Net 搭建训练环境 Clone the repositorygit clone --depth=1 https://github.com/QingyongHu

初学java练习题【1】

import java.util.Scanner;public class HelloWorld{public static void main(String[] args){Scanner scannernew Scanner(System.in);//输入工资System.out.println("请输入您的工资:");double d1scanner.nextDouble();System.out.println("请输入…

npm运行时出现npm ERR! builtins is not a function报错!

项目场景: 项目运行时什么都没动都没改突然运行不起来了,报错 TypeError: builtins is not a function 代码什么都没动,不是代码问题,排查后只有可能是node和npm的问题,所以卸载掉node重装重启 解决方案: …

Python RabbitMQ 入门 pika

Python RabbitMQ 入门 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均…

前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用

☘️ 项目简介 Vue3 Admin 是一个前端基于 Soybean Admin 二次开发,后端基于 Nest.js 的全栈后台应用,适合学习全栈开发的同学参考学习。 🍁 前端技术栈: Vue3.5、Ant Design Vue、UnoCSS、Pinia 🍁 后端技术栈&…

小程序智能视频制作SDK解决方案,云端智能视频制作

无论是个人分享生活的点滴,还是企业展示品牌故事,一段精心制作的视频总能迅速抓住观众的眼球,传递无限价值。专业视频制作往往门槛较高,不仅需要专业的技能和设备,还耗费大量时间和精力。面对这一挑战,美摄…

jmeter入门: 安装

前提: 安装jdk1.8, 并设置java_home 和path环境变量。 ​​​​​​1. download Apache JMeter - Download Apache JMeter 2. 解压jmeter包 3. 安装插件Install :: JMeter-Plugins.org 下载jar包,放到lib/ext目录 4. 打开jmeter &#xff0…

wpf加载带材料的3D模型(下载的3D预览一样有纹理)

背景:最近真的是忙啊,累出汁水了 整体效果: 放大可以看清砖头: 1、需要自己准备好3D模型,比如我这里是下载的这里的3D Warehouse,下载Collada File格式文件 2、解压可以看到一个model.dae和材料的文件夹&…

科研绘图系列:R语言绘制SCI文章图2

文章目录 介绍加载R包导入数据图a图b图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码 加载R包 library(ggplot2) library(dplyr) library(readxl) library(ggpmisc)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度网盘下载链接: https://pan.baid…

小猿口算APP脚本(协议版)

小猿口算是一款专注于数学学习的教育应用,主要面向小学阶段的学生。它提供多种数学练习和测试,包括口算、速算、应用题等。通过智能化的题目生成和实时批改功能,帮助学生提高数学计算能力。此外,它还提供详细的学习报告和分析,帮助家长和教师了解学生的学习进度和薄弱环节…

YOLOv11训练自己数据集_笔记1

一、前言 yolov11代码地址 分析YOLO11的关键改进点 YOLO11 相比之前版本,带来了五大关键改进: 增强特征提取:通过改进Backbone和Neck架构,新增了C3k2和C2PSA等组件,提升了目标检测的精度。 优化效率和速度&#xff1…

Java面试宝典-Java集合01

Java面试宝典-Java集合01 目录 Java面试宝典-Java集合01 1、Java中常用的集合有哪些? 2、Collection 和 Collections 有什么区别? 3、为什么集合类没有实现 Cloneable 和 Serializable 接口? 4、数组和集合有什么本质区别? 5、数组…