• 基础篇:讲解Redis常用数据结构
  • 实战篇:黑马点评实战
  • 高级篇:Redis高级知识点
  • 原理篇:Redis原理
  • 面试篇:Redis八股

⭕️第一章:基础篇⭕️

1. Redis介绍

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样。最重要的是5种基本类型。String, Hash, List, Set和SortedSet。

Redis通用命令

2. String

String类型,也就是字符串类型,是Redis中最简单的存储类型。

  • String
    • string: 普通字符串
    • int: 整数类型,可以做自增、自减操作
    • float: 浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m。

String类型常见的命令

3. Hash

4. List

5. Set

6. SortedSet

7. Redis的Java客户端

7.1 客户端对比

  • Spring擅长整合,SpringDataRedis底层既可以用Jedis实现也可以用Lettuce实现
  • 很多企业喜欢用旧的Jedis
  • 如果要实现分布式锁,会用到Redisson

因此,后面主要介绍三种Redis的Java客户端:

  1. Jedis:传统Redis的Java客户端
  2. SpringDataRedis: 整合了传统的Jedis和Lettuce
  3. Redisson:分布式锁使用

7.2 Jedis

7.2.1 Jedis使用的基本步骤

  1. 引入Jedis依赖
  2. 创建Jedis对象,建立连接
  3. 使用Jedis,方法名与Redis命令一致
  4. 释放资源

(1)创建Maven工程,引入Jedis依赖

<dependencies><!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency><!--单元测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.7.0</version><scope>test</scope></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-launcher</artifactId><version>1.7.0</version><scope>test</scope></dependency>
</dependencies>

(2)使用Jedis对象操作Redis

package com.heima.test;import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;public class JedisTest {private Jedis jedis;@BeforeEachvoid setUp(){// 1. 建立连接jedis = new Jedis("192.168.31.20", 6379);// 2. 设置密码jedis.auth("123456");// 3. 选择库jedis.select(4);}@Testvoid testString(){// 存入数据String result = jedis.set("name", "xxx");System.out.println("result = " + result);// 获取数据String name = jedis.get("name");System.out.println("name = " + name);}@AfterEachvoid tearDown(){if (jedis != null){jedis.close();}}
}

7.2.2 Jedis的连接池

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此我们推荐大家使用Jedis连接池代替Jedis的直连方式。

7.3 SpringDataRedis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis,官网地址:https://spring.io/projects/spring-data-redis

  • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现

SpringDataRedis快速入门

(1)创建SpringBoot项目

创建SpringBoot工程的时候,引入LombokSpring Data Redis依赖

(2)引入依赖

注意:spring-boot-starter-data-redis依赖在上一步创建SpringBoot工程时已经引入。

(3)配置文件

spring:data:redis:host: 192.168.31.20port: 6379password: 123456database: 5lettuce:pool:max-active: 8 # 最大连接max-idle: 8 # 最大空闲连接min-idle: 0 # 最小空闲连接max-wait: 100 # 连接等待时间

(4)使用

@SpringBootTest
class RedisSemoApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid testString(){// 写入一条String数据redisTemplate.opsForValue().set("name", "虎");// 获取String数据Object name = redisTemplate.opsForValue().get("name");System.out.println(name);}
}

 Java默认采用JdkSerializationRedisSerializer来序列化。

7.3.2 RedisSerializer

  • GenericJackson2JsonRedisSerializer:建议value使用该序列化器,将 Java 对象序列化为 JSON 字符串 存入 Redis。
  • StringRedisSerializer: 建议key使用该序列化器,直接将 String 编码为 UTF-8 字节流,反向解码也简单。
  • JdkSerializationRedisSerializer:使用 Java 原生序序列化机制将对象(ObjectOutputStream / ObjectInputStream)序列化为二进制字节流。

RedisTemplate有两种序列化实践方案:自定义RedisTemplate使用StringRedisTemplate

7.3.3 自定义RedisTemplate

  • key使用string序列化
  • value使用json序列化

缺点:

优点:可以直接将Java对象序列化成Json字符串

7.3.4 StringRedisTemplate

缺点:需要手动序列化Java对象为Json字符串

优点:不会带来额外的内存

StringRedisTemplate使用步骤:

@SpringBootTest
class RedisSemoApplicationTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testvoid testString(){// 写入一条String数据stringRedisTemplate.opsForValue().set("name", "虎哥");// 获取String数据Object name = stringRedisTemplate.opsForValue().get("name");System.out.println(name);}private  static final ObjectMapper objectMapper = new ObjectMapper();@Testvoid testSaveUser() throws JsonProcessingException {// 创建Java对象User user = new User("小明",18);// 手动序列化对象String jsonUser = objectMapper.writeValueAsString(user);System.out.println(jsonUser);// 写入数据stringRedisTemplate.opsForValue().set("user", jsonUser);// 获取数据String jsonUser1 = stringRedisTemplate.opsForValue().get("user");// 手动反序列化User user1 = objectMapper.readValue(jsonUser1, User.class);System.out.println(user1);}
}

⭕️第二章:实战篇⭕️

0. 项目环境

  • MySQL配置
    • ip: 192.168.31.20
    • port: 3306
    • username: mysql_gtc
    • password: gtc123
  • Redis配置
    • ip: 192.168.31.20
    • port: 6379
    • password: 123456
  • 项目后端配置
    • ip: localhost(192.168.31.10)
    • port: 8081
  • 项目前端配置
    • ip: 192.168.31.20
    • port: 8080

1. 短信登录

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

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

相关文章

WPS文字和Word文档如何选择多个不连续的行、段

要选择Word或WPS文字中不连续的多行、多段&#xff0c;使用鼠标加键盘即可快速搞定。Word和WPS文字中选择多行的操作一样&#xff0c;选择多段的方法略有不同。选中以后&#xff0c;可以对这些内容进行删除、复制、剪切、查找、替换、设置格式等操作。一、在Word和WPS文字中选择…

嵌入式C/C++面试大全

基础语法 1.在main执⾏之前和之后执⾏的代码可能是什么&#xff1f; main函数执⾏之前&#xff0c;主要就是初始化系统相关资源&#xff1a; 设置栈指针&#xff0c;其中栈存放的局部变量、函数参数、函数调用的返回地址初始化静态 static 变量和 global 全局变量&#xff0c;即…

Java应用架构实战指南:主流模式解析与Spring落地实践

在Java开发的世界里,选对应用架构不是纸上谈兵,而是项目成败的关键。 今天,我想和大家聊聊四种主流架构模式——分层、微服务、事件驱动和六边形架构。这些模式在实战中各有千秋,我会结合代码示例和架构图,带大家看清它们的内核。无论你是新手还是老手,这篇文章都能帮你…

重学JS-002 --- JavaScript算法与数据结构(二)JavaScript 基础知识

文章目录加入jsjs 的位置控制台变量关键字DOMbutton注释CSS转义函数参数对象属性属性访问数组Math加入js 首先创建一个 script 元素。 此元素用于将 JavaScript 加载到 HTML 文件中。 <script src"./script.js"></script>js 的位置 script 标签位于 HTML…

计算机视觉--opencv(代码详细教程)(二)

一、图片的边界填充在 OpenCV 中&#xff0c;cv2.copyMakeBorder()是用于给图像添加边框&#xff08;边缘&#xff09;的核心 API&#xff0c;其完整语法和参数说明如下&#xff1a;函数完整定义cv2.copyMakeBorder(src, top, bottom, left, right, borderType, valueNone)参数…

FPGA实现Aurora 64B66B视频点对点传输,基于GTX高速收发器,提供4套工程源码和技术支持

目录 1、前言Aurora 64B66B是啥&#xff1f;官方有Example&#xff0c;为何要用你这个&#xff1f;工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 GT 高速接口解决方案本方案在Aurora 8B10B上的应用 3、工程详细设…

【软件安装|1】CentOS7最新可用国内 yum 镜像源配置和Linux版MySQL8.0安装及其相关知识

文章目录一.更换yum镜像源二.安装并配置MySQL8.0安装配置相关知识什么是yum&#xff1f;什么是镜像源&#xff1f;相关知识请看最后&#xff0c;首先来更换yum镜像源 更换前需要准备好VmwareWorkstation和Finalshell&#xff0c;开启虚拟机&#xff0c;切换到root用户 Vmware和…

【深度学习】深度学习的四个核心步骤:从房价预测看机器学习本质

文章目录基础概念与原理第一步&#xff1a;准备数据 - 构建学习的基础数据生成与特征工程&#xff08;选择对预测有用的特征&#xff09;数据集划分的重要性第二步&#xff1a;设计模型 - 建立数学表达线性回归模型的数学表达损失函数的设计哲学第三步&#xff1a;训练优化 - 自…

Java使用Apache POI读取Excel文件

一、下载jar包 Apache POI有提供下载地址&#xff1a;Apache Archive Distribution Directory&#xff0c;直接打开链接并选择所需的版本下载即可(双击last modified可按最新更新时间排序)&#xff0c;本文章以poi-bin-4.1.1-20191023.zip为例&#xff0c;进入官网下载链接后&…

VLMs开发——基于Qwen2.5-VL 实现视觉语言模型在目标检测中的层级结构与实现方法

概述 目标检测作为计算机视觉领域的核心任务&#xff0c;传统方法依赖于 YOLO 等视觉模型对预定义类别进行位置预测。然而&#xff0c;此类方法受限于预训练类别体系&#xff0c;难以实现灵活的视觉交互。视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;的…

Spring Boot + Redis + 布隆过滤器防止缓存穿透

✅ 项目概述 在高并发系统中&#xff0c;缓存穿透 是一个经典问题&#xff1a;当恶意请求或业务逻辑查询一个数据库中不存在的 Key&#xff0c;由于缓存中也没有&#xff0c;请求会直接打到数据库&#xff0c;导致数据库压力激增&#xff0c;甚至宕机。 本项目使用 Spring Bo…

电子电路学习日记

这里的 K 表示 千欧&#xff08;kilo-ohm&#xff09;&#xff0c;而 F 在很多国产 EDA 软件&#xff08;比如立创EDA、Altium 的一些中文封装库&#xff09;里用来标注精度&#xff08;公差&#xff09;&#xff0c; F 代表 1% 精度&#xff08;英文 Fine tolerance&#xff0…

oracle 怎么实现读一致性

​ Oracle 数据块读一致性判断流程&#xff08;正确版&#xff09; 假设&#xff1a;Query SCN 查询开始的 SCN&#xff08;Query SCN&#xff09; lastSubbmit SCN 行中最新的提交scn Row SCN 行最后修改的 SCN&#xff08;存储在行头&#xff0c;通过 ITL 推导&#xff09…

ISTA为什么要加上软阈值激活函数?r若没有L1 正则化也要加其他激活函数吗?

一、加上软阈值函数&#xff08;Soft-thresholding&#xff09;是因为 LISTA&#xff08;以及它的前身 ISTA&#xff09;本质上是在求解一个 带 L1 正则化的稀疏优化问题&#xff1a; min⁡x12∥y−Ax∥22λ∥x∥1 \min_x \frac{1}{2} \|y - Ax\|_2^2 \lambda \|x\|_1 xmin​2…

线程P4 | 线程安全问题及解决方法

何为线程安全&#xff1f;要谈及何为线程安全&#xff0c;总得说来&#xff0c;我们可以用一句话来概况&#xff1a;如果在多线程环境下代码运行结果和我们预期是相符的&#xff0c;即和单线程环境下的运行结果相同&#xff0c;那么我们就称这个程序是线程安全的&#xff0c;反…

水印消失术!JavaAI深度学习去水印技术深度剖析

一、飞算JavaAI平台概述1.1 飞算JavaAI定位与技术特色 飞算JavaAI是国内领先的智能化Java开发平台&#xff0c;通过AI技术赋能软件开发全流程&#xff0c;特别针对小程序、Web应用等轻量级开发场景提供*零基础编程→高质量交**的一站式解决方案。其核心优势体现在&#xff1a; …

醋酸钆:医学影像与科技创新中的重要角色

醋酸钆是一种由钆元素和醋酸根离子组成的化合物。钆是稀土金属之一&#xff0c;常常用于医学影像、核磁共振成像&#xff08;MRI&#xff09;以及某些工业应用。醋酸钆作为钆的盐之一&#xff0c;具有许多独特的性质&#xff0c;尤其在医学和科学研究领域表现突出。一、醋酸钆的…

插入排序专栏

插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;其思想源于我们日常生活中整理扑克牌的方式。本文将详细解析插入排序的工作原理&#xff0c;通过 Java 实现代码进行分析&#xff0c;深入探讨其时间复杂度的计算过程&#xff0c;并阐述其…

高效Unicode字符表示:一种创新的词表构建策略分析

在自然语言处理中&#xff0c;处理多语言和特殊字符的表示始终是一项挑战。本文将分析一种创新的词表构建策略&#xff0c;该策略通过数学优化和双token机制&#xff0c;在保持词表紧凑的同时实现了对Unicode字符的全面覆盖。 词表构建的核心逻辑 该策略包含四个关键步骤&#…

python与物联网基础知识

软件准备&#xff1a;软件&#xff1a;thonny-4.0.1-windows-portable(win10,11系统64位)驱动&#xff1a;CP210x_Windows_Drivers固件&#xff1a;esp8266-1m-20220618-v1.19.1.bin物料准备&#xff1a;面包板、开发板、电源线一、安装与调试&#xff1a;1.在软件文件中找到th…