Redis知識點+項目+面試八股

  • 基礎篇:講解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…