当前位置: 首页 > news >正文

SpringBoot——整合Redis

目录

Redis

创建Commodity表

启动MySQL和Redis

新建一个SpringBoot项目

pom.xml

application.properties

Commodity实体类

 ComMapper接口

ComService业务层接口

ComServiceImpl业务接口的实现类

ComController控制器

RedisConfig配置类

SpringbootRdisApplication启动类

启动项目,进行测试 


Redis

  • Redis是一个高性能的 key-value 数据库,支持多种数据结构,常用作缓存、消息代理和配置中心
  • 用途:
    • 1、缓存热点数据
      • 由于Redis的访问速度快、支持的数据类型很丰富,所以很适合用来存储热点数据,其内置的expire可以对缓存的数据设置过期时间,在缓存的数据过期后再设置新的缓存数据
    • 2、计数器
      • Redis的incrby命令是原子性地递增,因此可以运用于商城系统的高并发的秒杀活动、分布式序列号的生成等场景
    • 3、排行榜
      • 可以使用Redis的SortedSet进行热点数据的排序
    • 4、分布式锁
      • Redis的setnx命令的作用是,如果当前的缓存数据,不存在则设置缓存成功并返回1,否则设置缓存失败并返回0。可以利用这个特性在Redis集群中检测锁的有效时间,如果超时,那么等待的进程将有机会获得锁,从而防止项目出现死锁
  • 在SpringBoot中要存储和访问Redis中的数据,可以使用 RedisTemplate 和 StringRedisTemplate 模板类,用模板操作Redis实际就是通过set()/get()方法存取数据
    • StringRedisTemplate 是 RedisTemplate 的子类
    • StringRedisTemplate 只针对键值都是字符串类型的数据,而 RedisTemplate 可以操作对象类型的数据
    • StringRedisTemplate 默认使用 StringRedisSerializer 序列化器,而 RedisTemplate 默认使用 JdkSerializationRedisSerializer 序列化器
    • RedisTemplate 提供了5种数据结构的操作方法
      • opsForValue:操作字符串类型
      • opsForHash:操作哈希类型
      • opsForList:操作列表类型
      • opsForSet:操作集合类型
      • opsForZSet:操作有序集合类型
  • 当数据存储到 Redis中时,键和值都是通过SpringBoot提供的序列化器(Serializer)序列化到内存数据库中

项目总结

  1.  引入依赖:首先,在 pom.xml 文件中引入 Spring Boot Starter Data Redis 依赖,以便使用 Spring Boot 提供的 Redis 支持。
  2. 配置 Redis 连接信息:在 Spring Boot 项目的配置文件(如 application.properties 或 application.yml)中配置 Redis 的连接信息,包括主机地址、端口、密码等。
  3. 编写 Redis 配置类:如果需要自定义 RedisTemplate 的配置,可以创建一个 Redis 配置类,在其中配置 RedisTemplate。你可以自定义键值的序列化器、连接工厂等配置。
  4. 使用 RedisTemplate 进行操作:通过在需要使用 Redis 的地方注入 RedisTemplate,即可使用它来进行 Redis 的操作,包括存储、读取、删除等操作。
    1. 比如本项目中就是在ComServiceImpl业务接口的实现类中编写业务逻辑代码时,使用到了Redis进行数据的存取 
  5. 测试:编写单元测试或集成测试来验证 Redis 的功能是否正常。
  6. 这就是整合 Spring Boot 与 Redis 的基本工作流程和思路。通过这些步骤,你可以在 Spring Boot 项目中方便地使用 Redis 来实现缓存、分布式锁等功能。

创建Commodity表

CREATE DATABASE netshop;
USE netshop;
CREATE TABLE commodity(Pid INT(8) NOT NULL PRIMARY KEY,TCode CHAR(3) NOT NULL,SCode CHAR(8) NOT NULL,PName VARCHAR(32) NOT NULL,PPrice DECIMAL(7,2) NOT NULL,Stocks INT UNSIGNED DEFAULT 0
);
INSERT INTO commodity(Pid,TCode,SCode,PName,PPrice,Stocks) VALUES(1,'11A','SXLC001A','洛川红富士苹果冰糖心10斤箱装',44.80,3601);
INSERT INTO commodity(Pid,TCode,SCode,PName,PPrice,Stocks) VALUES(2,'11A','SXLC002A','烟台红富士苹果10斤箱装',29.80,5698);
INSERT INTO commodity(Pid,TCode,SCode,PName,PPrice,Stocks) VALUES(3,'11A','SXLC003A','库尔勒香梨10斤箱装',69.80,8902);

启动MySQL和Redis

命令行启动MySQL,不要关闭小黑窗

双击redis-server.exe,启动redis服务器

新建一个SpringBoot项目

  • 添加Spring Boot基本框架:Spring Web
  • Lombok模型简化组件:Lombok
  • MyBatis框架:MyBatis Framework
  • MySQL的驱动:MySQL Driver
  • Redis框架:Spring Data Redis(Access+Driver)

项目结构:

pom.xml

  • 常见报错的解决办法:加个版本号<version>,或者降一下版本号
  • 推荐使用spring-boot-starter-data-redis,我查了很多办法也解决不了这个依赖的报错,所以在此用了spring-data-redis,需要手动配置Redis 相关的 bean 和属性。这可能导致配置错误或遗漏,从而导致应用无法正确连接到 Redis。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.study</groupId><artifactId>springboot_redis</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_redis</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><!--推荐使用spring-boot-starter-data-redis,免去手动配置--><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.4.1</version></dependency><!--SpringBoot默认使用Lettuce客户端,相比于Jedis,线程安全且可支持并发访问--><dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>2.2.2</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

application.properties配置文件

# 连接MySQL数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/netshop?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# 连接Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
# Redis数据库索引(默认为0)
spring.redis.database=0

Commodity实体类

package com.study.springboot_redis.model;import lombok.Data;
import java.io.Serializable;@Data //该注解包含了getter,setter,toString()等方法
public class Commodity implements Serializable {//序列化private int pid;//商品号private String tcode;//商品分类编码private String scode;//商家编码private String pname;//商品名称private float pprice;//商品价格private int stocks;//商品库存
}

 ComMapper接口

package com.study.springboot_redis.mapper;import com.study.springboot_redis.model.Commodity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;/*** 这是一个公共接口,定义了与commodity表进行交互的方法*/
@Mapper //这个注解表示该接口是一个Mapper接口,用于与数据库进行交互
public interface ComMapper {//@Param("pid")注解用于将方法参数与SQL语句中的pid参数进行映射@Select("SELECT * FROM commodity WHERE Pid = #{pid}")Commodity queryByPid(@Param("pid") int pid);
}

ComService业务层接口

package com.study.springboot_redis.service;import com.study.springboot_redis.model.Commodity;/*** 业务层*/
public interface ComService {public String getPNameFromRedis(int pid);//从Redis获取商品名称public Commodity getComFromRedis(int pid);//从Redis获取商品记录对象
}

ComServiceImpl业务接口的实现类

package com.study.springboot_redis.service;import com.study.springboot_redis.mapper.ComMapper;
import com.study.springboot_redis.model.Commodity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.data.redis.core.StringRedisTemplate;/*** 业务接口的实现类* 用模板操作Redis实际就是通过set()/get()方法存取数据*/
@Service //将一个类标识为服务层组件
public class ComServiceImpl implements ComService{@AutowiredComMapper comMapper;@AutowiredStringRedisTemplate stringRedisTemplate;//StringRedisTemplate模板用于从Redis存取字符串,注入该模板@AutowiredRedisTemplate<String,Object> redisTemplate;//RedisTemplate模板用于从Redis存取对象,注入该模板@Overridepublic String getPNameFromRedis(int pid) {Commodity commodity = comMapper.queryByPid(pid);//从MyBatis接口读取商品记录stringRedisTemplate.opsForValue().set("pname",commodity.getPname());//使用set()方法存入Redisreturn stringRedisTemplate.opsForValue().get("pname");//使用get()方法从Redis中获取}@Overridepublic Commodity getComFromRedis(int pid) {Commodity commodity = comMapper.queryByPid(pid);redisTemplate.opsForValue().set(String.valueOf(commodity.getPid()),commodity);return (Commodity) redisTemplate.opsForValue().get(String.valueOf(pid));}
}

ComController控制器

package com.study.springboot_redis.controller;import com.study.springboot_redis.model.Commodity;
import com.study.springboot_redis.service.ComServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("com")
public class ComController {@Autowired //注入业务层操作Redis的服务实体ComServiceImpl comService;@RequestMapping("getpname")//从Redis获取商品名称public String getPNameByPid(int pid){return comService.getPNameFromRedis(pid);}@RequestMapping("getcom")//从Redis获取商品记录对象public Commodity getComByPid(int pid){return comService.getComFromRedis(pid);}
}

RedisConfig配置类

package com.study.springboot_redis.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration //声明该类为配置类
public class RedisConfig {/*** RedisTemplate使用JdkSeriallizationRedisSerializer来序列化数据,以二进制的形式存储,不便可视化,所以在此自定义序列化器* 在此自定义一个JSON格式的序列化类*/@Beanpublic RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setKeySerializer(new StringRedisSerializer());//GenericJackson2JsonRedisSerializer这个序列化器是一个通用的 JSON 序列化器,// 它可以序列化和反序列化任意类型的对象,而不需要指定对象的类型redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(connectionFactory);return redisTemplate;}
}

SpringbootRdisApplication启动类

package com.study.springboot_redis;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringbootRedisApplication {public static void main(String[] args) {SpringApplication.run(SpringbootRedisApplication.class, args);}
}

启动项目,进行测试 

  • 访问网址:http://localhost:8080/com/getpname?pid=1
  • 取出pid=1的商品名称,页面返回一个字符串

  • 访问网址:http://localhost:8080/com/getcom?pid=1 
  • 取出pid=1的商品对象

相关文章:

SpringBoot——整合Redis

目录 Redis 创建Commodity表 启动MySQL和Redis 新建一个SpringBoot项目 pom.xml application.properties Commodity实体类 ComMapper接口 ComService业务层接口 ComServiceImpl业务接口的实现类 ComController控制器 RedisConfig配置类 SpringbootRdisApplication启…...

2024全新Langchain大模型AI应用与多智能体实战开发

2024全新Langchain大模型AI应用与多智能体实战开发 LangChain 就是一个 LLM 编程框架&#xff0c;你想开发一个基于 LLM 应用&#xff0c;需要什么组件它都有&#xff0c;直接使用就行&#xff1b;甚至针对常规的应用流程&#xff0c;它利用链(LangChain中Chain的由来)这个概念…...

【JavaEE 初阶(十)】JVM

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多进阶知识 目录 1.前言2.JVM内存区域划分3.类加载3.1双亲委派模型 4.垃圾回收&#xff08;GC&#xff0…...

【Flutter】AspectRatio组件Card组件按钮组件Wrap组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月25日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…...

【IDEA软件应用篇】IDEA基础开发设置和开发快捷键

IDEA是一种集成开发环境&#xff0c;可以运行java代码。 本篇文章你将收获到下面的知识&#xff1a; &#xff08;1&#xff09;IDEA如何设置字体大小快捷键 &#xff08;2&#xff09;如何解决每次进IDEA时&#xff0c;进去的页面都是上次使用完时的那个页面 &#xff08;3&am…...

机器学习--数学部分笔记

前言 因为周三要考试,所以数学部分写一下笔记 正文 随机事件和随机实验 条件概率 • 在已知事件 &#x1d435; 发生的条件下&#xff0c;事件&#x1d434;发生的概率称为事件 &#x1d434; 的条件概率&#xff0c;记为&#x1d443;(&#x1d434;|&#x1d435;) 全概率…...

基于springboot的在线宠物用品交易网站源码数据库

基于springboot的在线宠物用品交易网站源码数据库 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了在线宠物用品交易网站的开发全过程。通过分析在线宠物用品交易网站管理的不足&#xff0c;创建了一个计算机管理在…...

【Pytorch】13.搭建完整的CIFAR10模型

项目源码 已上传至githubCIFAR10Model&#xff0c;如果有帮助可以点个star 简介 在前文【Pytorch】10.CIFAR10模型搭建我们学习了用Module来模拟搭建CIFAR10的训练流程 本节将会加入损失函数&#xff0c;梯度下降&#xff0c;TensorBoard来完整搭建一个训练的模型 基本步骤 搭建…...

护目镜佩戴自动识别预警摄像机

护目镜佩戴自动识别预警摄像机是一种智能监测设备&#xff0c;专门用于佩戴护目镜的工人进行作业时&#xff0c;能够自动识别有潜在风险的场景&#xff0c;并及时发出预警信号。该摄像机配备人脸识别和智能预警系统&#xff0c;可以检测危险情况并为工人提供实时安全保护&#…...

keep-alive的使用

Vue中的<keep-alive>组件是前端开发中的一个宝藏功能&#xff0c;它如同时光胶囊般保留组件的状态&#xff0c;让组件在切换时仿佛按下暂停键&#xff0c;再次回来时还能继续播放&#xff0c;极大地优化了用户体验和性能。&#x1f680;✨ 作用 状态保留&#xff1a;当包…...

【Linux】中的常见的重要指令(中)

目录 一、man指令 二、cp指令 三、cat指令 四、mv指令 五、more指令 六、less指令 七、head指令 八、tail指令 一、man指令 Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: m…...

营收净利双降、股东减持,大降价也救不了良品铺子

号称“高端零食第一股”的良品铺子(603719.SH)&#xff0c;正遭遇部分股东的“用脚投票”。 5月17日晚间&#xff0c;良品铺子连发两份减持公告&#xff0c;其控股股东宁波汉意创业投资合伙企业、持股5%以上股东达永有限公司&#xff0c;两者均计划减持。 其中&#xff0c;宁…...

【设计模式】设计模式的分类

通常设计模式的分类有创建型、行为型和结构型。 创建型 常用的有&#xff1a;单例模式、工厂模式&#xff08;工厂方法和抽象工厂&#xff09;、建造者模式。 不常用的有&#xff1a;原型模式。 创建型模式涉及到将对象实例化&#xff0c;这类模式都提供一个方法&#xff0c;将…...

TCP/UDP的连接机制

TCP/UDP的连接机制 TCP的连接机制 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的协议&#xff0c;提供可靠的、按顺序的数据传输服务。TCP的连接机制包括连接建立、数据传输和连接终止。 1. 连接建立&#xff08;三次握手&#xff09; TCP通过…...

供应链金融模式学习资料

目录 产生背景 供应链金融的诞生 供应链金额的六大特征...

代码随想录-算法训练营day50【动态规划12:最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费、股票问题总结】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part12● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结309.最佳买卖股票时机含冷冻期 本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰…...

Dilworth 定理

这是一个关于偏序集的定理&#xff0c;事实上它也可以扩展到图论&#xff0c;dp等中&#xff0c;是一个很有意思的东西 偏序集 偏序集是由集合 S S S以及其上的一个偏序关系 R R R定义的&#xff0c;记为 ( S , R ) (S,R) (S,R) 偏序关系&#xff1a; 对于一个二元关系 R ⊂…...

BUUCTF---web---[BJDCTF2020]ZJCTF,不过如此

1、点开连接&#xff0c;页面出现了提示 传入一个参数text&#xff0c;里面的内容要包括I have a dream。 构造&#xff1a;?/textI have a dream。发现页面没有显示。这里推测可能得使用伪协议 在文件包含那一行&#xff0c;我们看到了next.php的提示&#xff0c;我们尝试读取…...

力扣刷题---2206. 将数组划分成相等数对【简单】

题目描述&#x1f357; 给你一个整数数组 nums &#xff0c;它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对&#xff0c;满足&#xff1a; 每个元素 只属于一个 数对。 同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对&#xff0c;请你返回 true &#xf…...

2461. 长度为 K 子数组中的最大和(c++)

给你一个整数数组 nums 和一个整数 k 。请你从 nums 中满足下述条件的全部子数组中找出最大子数组和&#xff1a; 子数组的长度是 k&#xff0c;且子数组中的所有元素 各不相同 。 返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件&#xff0c;返回 0 。 子数…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...