(七)Spring Boot學習——Redis使用

有部分內容是常用的,為了避免每次都查詢數據庫,將部分數據存入Redis。

一、?下載并安裝 Redis

Windows 版的 Redis 官方已不再維護,你可以使用 微軟提供的 Redis for Windows 版本 或者 使用 WSL(Windows Subsystem for Linux)安裝 Redis

  1. 下載 Redis for Windows

    • 點擊這里下載 Redis for Windows(推薦下載 Redis-x64-3.2.100.msi
    • 下載完成后,進行安裝,安裝路徑建議:C:\Redis\
  2. 解壓并進入 Redis 目錄

    cd C:\Redis

  3. 啟動 Redis 服務器

    redis-server.exe redis.windows.conf

  4. 驗證 Redis 是否啟動 打開另一個 命令行窗口(CMD),輸入:

    redis-cli.exe ping

    如果返回:

    PONG

    說明 Redis 服務器已成功啟動 🎉。

二、?配置 Redis

1. 添加 Redis 依賴

如果使用 Maven,在 pom.xml 添加:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> 
</dependency>

?? Spring Boot 2.0+ 默認使用 Lettuce,而不是 Jedis。如果要使用 Jedis,需要額外添加依賴

<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> 
</dependency>

? 2. 配置 Redis 連接

application.ymlapplication.properties 配置 Redis 連接信息。

🔹 application.properties?配置

#配置redis
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.password=
spring.data.redis.database=0
spring.data.redis.timeout=5000ms
spring.data.redis.lettuce.pool.max-active=8
spring.data.redis.lettuce.pool.max-idle=8
spring.data.redis.lettuce.pool.min-idle=0
spring.data.redis.lettuce.pool.max-wait=-1ms

?? 注意:

  • host:Redis 服務器地址
  • port:Redis 端口(默認 6379)
  • password:如果 Redis 沒有密碼,保持為空
  • database:選擇 Redis 數據庫(默認 0)
  • timeout:連接超時時間(5 秒)

? 3. 編寫 Redis 工具類

可以使用 RedisTemplate 來操作 Redis。

🔹 RedisConfig.java

創建一個 Redis 配置類,注入 RedisTemplate


@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);// 使用 String 序列化 key,避免亂碼redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

? 4. 在 Service 中使用 Redis

你可以直接在 RedisService 中使用 RedisTemplate 提供的方法來存取數據。

🔹 (1) 操作字符串

Redis 的 opsForValue() 主要用于存取字符串數據:


@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 存儲字符串數據public void setString(String key, String value, long timeout) {redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);}// 獲取字符串數據public String getString(String key) {return (String) redisTemplate.opsForValue().get(key);}// 刪除 Keypublic void deleteKey(String key) {redisTemplate.delete(key);}
}

? 2. 操作哈希表(Hash)

Redis 的 opsForHash() 適用于存儲對象、鍵值對等。


@Service
public class RedisHashService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 設置 Hash 值public void setHash(String key, String field, String value) {redisTemplate.opsForHash().put(key, field, value);}// 獲取 Hash 值public Object getHash(String key, String field) {return redisTemplate.opsForHash().get(key, field);}// 獲取整個 Hash 對象public Map<Object, Object> getAllHash(String key) {return redisTemplate.opsForHash().entries(key);}// 刪除 Hash 字段public void deleteHashField(String key, String field) {redisTemplate.opsForHash().delete(key, field);}
}

示例

redisHashService.setHash("user:1001", "name", "Tom"); String name = redisHashService.getHash("user:1001", "name"); // "Tom"


? 3. 操作列表(List)

Redis opsForList() 適用于存儲列表數據(如消息隊列、排行榜等)。

@Service
public class RedisListService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 左側推入列表public void leftPush(String key, String value) {redisTemplate.opsForList().leftPush(key, value);}// 右側推入列表public void rightPush(String key, String value) {redisTemplate.opsForList().rightPush(key, value);}// 獲取列表范圍public List<Object> getListRange(String key, long start, long end) {return redisTemplate.opsForList().range(key, start, end);}// 彈出左側元素public Object leftPop(String key) {return redisTemplate.opsForList().leftPop(key);}
}

示例

redisListService.leftPush("queue", "task1");

redisListService.leftPush("queue", "task2");

List<Object> tasks = redisListService.getListRange("queue", 0, -1); // ["task2", "task1"]


? 4. 操作集合(Set)

Redis opsForSet() 適用于存儲無序唯一集合(如標簽、好友列表等)。


@Service
public class RedisSetService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 添加集合元素public void addToSet(String key, String value) {redisTemplate.opsForSet().add(key, value);}// 獲取集合中的所有元素public Set<Object> getSetMembers(String key) {return redisTemplate.opsForSet().members(key);}// 刪除集合中的某個元素public void removeFromSet(String key, String value) {redisTemplate.opsForSet().remove(key, value);}
}

示例

redisSetService.addToSet("users", "Alice");

redisSetService.addToSet("users", "Bob");

Set<Object> users = redisSetService.getSetMembers("users"); // ["Alice", "Bob"]


? 5. 在 Controller 中調用

你可以在 Controller 里調用 RedisService 來測試 Redis 的使用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate RedisService redisService;// 存儲 Key-Value@PostMapping("/set")public String setKey(@RequestParam String key, @RequestParam String value) {redisService.setString(key, value, 3600);return "存儲成功";}// 獲取 Key 的值@GetMapping("/get")public String getKey(@RequestParam String key) {return redisService.getString(key);}// 刪除 Key@DeleteMapping("/delete")public String deleteKey(@RequestParam String key) {redisService.deleteKey(key);return "刪除成功";}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72482.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72482.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS NEXT 聲明式UI語法學習筆記-創建自定義組件

基礎語法概述 ArkTS的基本組成 裝飾器&#xff1a;用于裝飾類、結構、方法以及變量&#xff0c;并賦予其特殊含義。如上圖都是裝飾器&#xff0c;Component表示自定義組件&#xff0c;Entry表示表示自定義組件的入口組件&#xff0c;State表示組件中的狀態變量&#xff0c;當狀…

【ElasticSearch】學習筆記

一、lucene的組成 segment是一個具備完整搜索功能的最小單元。 多個segment組成了一個單機文本檢索庫lucene。 inverted index:倒排索引&#xff0c;用于快速根據關鍵詞找到對應的文章term index: 構建出關鍵詞的目錄樹&#xff0c;解決了term dictionary數據量過大&#xff…

SSL/TLS 1.2過程:Client端如何驗證服務端證書?

快速回顧非對稱加密和對稱加密 首先快速說一下非對稱加密和對稱加密。非對稱加密&#xff0c;就是有一個公鑰和私鑰(成對存在)。 公鑰對一段文本A加密得到文本B&#xff0c;只有對應的私鑰能對B解密得到A。 私鑰對一段文本C加密得到文本D&#xff0c;只有對應的公鑰能對D解密得…

ChatGPT、DeepSeek、Grok:AI 語言模型的差異與應用場景分析

&#x1f4dd;個人主頁&#x1f339;&#xff1a;一ge科研小菜雞-CSDN博客 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 1. 引言 人工智能&#xff08;AI&#xff09;語言模型正在快速發展&#xff0c;ChatGPT&#xff08;OpenAI&#xff09;、DeepSe…

正點原子[第三期]Arm(iMX6U)Linux移植學習筆記-4 uboot目錄分析

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“Arm(iMX6U)Linux系統移植和根文件系統構鍵篇”視頻的學習筆記&#xff0c;在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。 引用&#xff1a; …

matlab 控制系統GUI設計-PID控制超前滯后控制

1、內容簡介 matlab164-控制系統GUI設計-PID控制超前滯后控制 可以交流、咨詢、答疑 2、內容說明 略 3、仿真分析 略 4、參考論文 略

介紹HTTP協議基本結構與Linux中基本實現HTTPServer

介紹HTTP協議基本結構與基本實現HTTPServer HTTP協議 前面已經了解了協議的重要性并且已經定義了屬于我們自己的協議&#xff0c;但是在網絡中&#xff0c;已經有一些成熟的協議&#xff0c;最常用的就是HTTP協議 在互聯網世界中&#xff0c;HTTP&#xff08;HyperText Tran…

Linux和RTOS簡析

以下是針對 Linux驅動開發、RTOS&#xff08;實時操作系統&#xff09;任務狀態&#xff08;就緒態&#xff09; 以及 互斥鎖 的詳細解釋&#xff1a; 一、Linux設備驅動 1. 什么是設備驅動&#xff1f; 定義&#xff1a;設備驅動是操作系統內核的一部分&#xff0c;用于管理…

docker 常用命令大全(二),docker 鏡像操作 ,持續更新

docker 相關的命令 在公共倉庫中下載 docker pull bitnami/postgresql:12.8.0查看鏡像 docker images |grep postgresql打tag推送到本地倉庫 docker tag postgresql:12.8.0 docker.公司域名.com/library/postgresql:12.8.0推送到本地倉庫 docker push docker.公司域名com…

Git使用和原理(3)

1.遠程操作 1.1分布式版本控制系統 我們?前所說的所有內容&#xff08;?作區&#xff0c;暫存區&#xff0c;版本庫等等&#xff09;&#xff0c;都是在本地&#xff01;也就是在你的筆記本或者 計算機上。?我們的 Git 其實是分布式版本控制系統&#xff01;什么意思呢&a…

[本周五題]Javascript面試常考題手撕場景UR緩存、new關鍵字、大數相加、最長遞增子序列、高并發請求、大文件上傳和WebWorks

LUR緩存實現 以下是 JavaScript 實現 LRU 緩存的詳細解析&#xff0c;結合核心原理與代碼實現&#xff0c;并標注來源&#xff1a; 一、LRU 緩存核心原理 LRU&#xff08;Least Recently Used&#xff09;緩存淘汰策略的核心思想是&#xff1a;當緩存容量滿時&#xff0c;優先…

c語言zixue

該文主要是記錄我學習中遇到的一些重點、易出問題的內容 教材p16.17 先從一個簡單的例子開始吧 #include <stdio.h> //編譯預處理命令 int main() //程序的主函數 {printf("To C"); //輸出語句return 0; //返回語句 } #include <stdio.h>是編譯預…

卷積神經網絡(CNN)的主要架構

卷積神經網絡&#xff08;CNN, Convolutional Neural Networks&#xff09;是深度學習中最重要的模型之一&#xff0c;廣泛應用于計算機視覺、目標檢測、語義分割等任務。自 LeNet 誕生以來&#xff0c;CNN 結構經歷了多個重要發展階段&#xff0c;出現了許多經典架構&#xff…

【開源代碼解讀】AI檢索系統R1-Searcher通過強化學習RL激勵大模型LLM的搜索能力

關于R1-Searcher的報告&#xff1a; 第一章&#xff1a;引言 - AI檢索系統的技術演進與R1-Searcher的創新定位 1.1 信息檢索技術的范式轉移 在數字化時代爆發式增長的數據洪流中&#xff0c;信息檢索系統正經歷從傳統關鍵詞匹配到語義理解驅動的根本性變革。根據IDC的統計…

從0到1入門Docker

一、快速入門 Docker run命令中的常見參數 -d&#xff1a;讓容器后臺運行--name&#xff1a;給容器命名&#xff08;唯一&#xff09;-e&#xff1a;環境變量-p&#xff1a;宿主機端口映射到容器內端口鏡像名稱結構&#xff1a;Repository &#xff1a;TAG&#xff08;鏡像名&…

接口自動化入門 —— Jmeter實現在接口工具中關聯接口處理方案

1. JMeter 接口關聯處理的核心概念 接口關聯是指在多個接口請求之間共享數據&#xff0c;例如將一個接口的返回值作為另一個接口的輸入參數。常見的場景包括&#xff1a; 使用登錄接口返回的 Token 作為后續接口的認證信息。 將一個接口返回的 ID 作為另一個接口的請求參數。…

Flink-學習路線

最近想學習一下Flink&#xff0c;公司的實時需求還是不少的&#xff0c;因此結合ai整理了一份學習路線&#xff0c;記錄一下。 當然&#xff0c;公司也有Scala版本Flink框架&#xff0c;也學習了一下。這里只說Java版本 1. Java基礎 目標: 掌握Java編程語言的基礎知識。 內容…

ranger集成starrock報錯

org.apache.ranger.plugin.client.HadoopException: initConnection: Unable to connect to StarRocks instance, please provide valid value of field : {jdbc.driverClassName}.. com.mysql.cj.jdbc.Driver. 可能的原因 JDBC 驅動缺失&#xff1a;運行環境中沒有安裝 MySQL …

python Jsonpath表達式語法取值

python Jsonpath 語法規則&#xff1a; 演示數據&#xff1a;{"status":"0","msg":"成功","data": [ {"foo1": "bar1"},{"foo1": "bar2"}]} 根節點&#xff1a;$ $.status $.…

Blender-MCP服務源碼2-依賴分析

Blender-MCP服務源碼2-依賴分析 有個大佬做了一個Blender-MCP源碼&#xff0c;第一次提交代碼是【2025年3月7號】今天是【2025年月15日】也就是剛過去一周的時間&#xff0c;所以想從0開始學習這個代碼&#xff0c;了解一下大佬們的開發思路 1-核心知識點 from mcp.server.fas…