【redis】在 Spring中操作 Redis

文章目錄

  • 基礎設置
    • 依賴
    • StringRedisTemplate
    • 庫的封裝
  • 運行
    • String
    • List
      • 刪庫
    • Set
    • Hash
    • Zset

基礎設置

依賴

  • 需要選擇這個依賴 image.png|322

StringRedisTemplate

// 后續 redis 測試的各種方法,都通過這個 Controller 提供的 http 接口來觸發  
@RestController  
public class MyController {  private StringRedisTemplate redisTemplate;  
}

前面使用 Jedis,是通過 Jedis 對象里的各種方法來操作 Redis 的。此處 Spring 中則是通過 StringRedisTemplate 來操作 Redis

  • 最原始提供的類是 RedisTemplate 類,StringRedisTemplate 是其子類,專門用來處理文本數據
  • 這個類提供的方法,相比與 Jedis 中的各種方法,還是存在較大差異

庫的封裝

image.png|290

此處 RedisTemplate 是把這些 redis 的方法,分成了幾個類別,分門別類的來組織的

  • 做了進一步封裝
    • 比如 opsForList 就是得到了一個專門來操作 List 的對象
    • 比如 opsForSet 就是得到了一個專門來操作 Set 的對象
  • 后續該類型涉及到的相關操作,都是以這個對象來組織的

此處提供的一些接口風格,和原生的 Redis 命令就有一定的差異了

  • 初心是希望,通過上述的重新封裝,讓接口用起來更簡單

運行

String

// 后續 redis 測試的各種方法,都通過這個 Controller 提供的 http 接口來觸發  
@RestController  
public class MyController {  @Autowired  private StringRedisTemplate redisTemplate;  @GetMapping("/testString")  @ResponseBody  public String testString(){  redisTemplate.opsForValue().set("key1", "111");  redisTemplate.opsForValue().set("key2", "222");  redisTemplate.opsForValue().set("key3", "3");  String value = redisTemplate.opsForValue().get("key1");  System.out.println("value: " + value);  return "OK";  }  
}

啟動服務器之后,在瀏覽器上輸入對應的路徑 image.png|334
隨后觀察日志:image.png|358

List

刪庫

RedisTemplate 留了一個后手,讓我們隨時能夠執行到 Redis 的原生命令—— execute 方法image.png

  • 相當于函數式接口,也就是回調函數。就在回調里,寫我們要執行的 Redis 命令,這個回調就會被 RedisTemplate 執行image.png
  • 這里的 RedisConnection 就代表了 Redis 連接,對標 Jedis 對象
@GetMapping("/testList")  
@ResponseBody  
public String testList() {  // 清楚之前的數據  redisTemplate.execute((RedisConnection connection) -> {  connection.flushAll();  return null;  });  redisTemplate.opsForList().leftPush("key1", "111");  redisTemplate.opsForList().leftPush("key2", "222");  redisTemplate.opsForList().leftPush("key3", "333");  System.out.println(redisTemplate.opsForList().leftPop("key1"));  System.out.println(redisTemplate.opsForList().leftPop("key2"));  System.out.println(redisTemplate.opsForList().leftPop("key3"));  return "OK";  
}
  • connection. 里面都是我們熟悉的原生命令

Set

@ResponseBody  
@GetMapping("/testSet")  
public String testSet() {  redisTemplate.execute((RedisConnection connetion) -> {  connetion.flushAll();  return null;  });  redisTemplate.opsForSet().add("key", "111", "222", "333");  Set<String> result = redisTemplate.opsForSet().members("key");  System.out.println(result);  Boolean exists = redisTemplate.opsForSet().isMember("key", "111");  System.out.println("exists:" + exists);  Long count = redisTemplate.opsForSet().size("key");  System.out.println("count: " + count);  redisTemplate.opsForSet().remove("key", "111", "222");  result = redisTemplate.opsForSet().members("key");  System.out.println("result: " + result);  return "OK";  
}   

image.png|319
image.png|309

Hash

@ResponseBody  
@GetMapping("/testHash")  
public String testHash() {  redisTemplate.execute((RedisConnection connection) -> {  connection.flushAll();  return null;  });  redisTemplate.opsForHash().put("key1", "field1", "111");  redisTemplate.opsForHash().put("key2", "field2", "222");  redisTemplate.opsForHash().put("key3", "field3", "333");  String value = (String) redisTemplate.opsForHash().get("key1", "field1");  System.out.println("value: " + value);  Boolean exists = redisTemplate.opsForHash().hasKey("key1", "field1");  System.out.println("exists:" + exists);  redisTemplate.opsForHash().delete("key1", "dield1", "field2");  Long size = redisTemplate.opsForHash().size("key");  System.out.println("size: " + size);  return "OK";  
}

image.png|402
image.png|415

Zset

@GetMapping("/testZset")  
@ResponseBody  
public String testZset(){  redisTemplate.execute((RedisConnection connection) -> {  connection.flushAll();  return null;  });  redisTemplate.opsForZSet().add("key1", "111", 100);  redisTemplate.opsForZSet().add("key2", "222", 98);  redisTemplate.opsForZSet().add("key3", "333", 95);  Set<String> members = redisTemplate.opsForZSet().range("key1", 0, -1);  System.out.println("members: " + members);  Set<ZSetOperations.TypedTuple<String>> membersWithSocres = redisTemplate.opsForZSet().rangeWithScores("key", 0, -1);  System.out.println("membersWithScores: " + membersWithSocres);  Double score = redisTemplate.opsForZSet().score("key1", "111");  System.out.println("score: " + score);  Long size = redisTemplate.opsForZSet().size("key1");  System.out.println("size: " + size);  Long rank = redisTemplate.opsForZSet().rank("key1", "111");  System.out.println("rank: " + rank);  return "OK";  
}

image.png|306

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

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

相關文章

微服務》》Kubernetes (K8S) 集群 安裝

關閉交換空間 # 切換 超級管理員身份 # 查看交換空間 free -h # 關閉交換空間 swapoff -a避免開啟啟動交換空間 # 注釋swap開頭的行 vim /etc/fstab關閉防火墻 # 關閉防火墻 # 因為K8S 是集群形式存在的 至少三臺 一主二從 &#xff08;一個master 兩個node&#xff09…

HTTP和RPC的區別

RPC和 HTTP是兩種常見的通信方式&#xff0c;它們在設計目標、使用場景和技術實現上有顯著區別。以下是它們的詳細對比&#xff1a; 1. 定義與核心思想 特性RPCHTTPRemote Procedure Call遠程過程調用HyperText Transfer Protocol超文本傳輸協議定義一種協議或框架&#xff0…

MySQL 簡記

MySQL 簡記 mysql中的數據存儲的結構是B樹 其與B樹的相同點是&#xff0c;B樹一個節點也可以存放多條數據&#xff0c;并且從左到右依次增大&#xff1b;不同點是&#xff0c;B樹的葉子結點之間也能相互連接。那么實際上是采取利用空間換區時間的策略。 那么B樹的樹結構like…

十七、實戰開發 uni-app x 項目(仿京東)- 后端指南

前面我們已經用uniappx進行了前端實戰學習 一、實戰 開發uni-app x項目(仿京東)-規劃-CSDN博客 二、實戰 開發uni-app x項目(仿京東)-項目搭建-CSDN博客 三、實戰開發 uni-app x 項目(仿京東)- 技術選型-CSDN博客 四、實戰開發 uni-app x 項目(仿京東)- 頁面設計-C…

Infura 簡介

文章目錄 Infura 簡介Infura 的主要功能Infura 的替代方案&#xff08;類似服務&#xff09;AlchemyQuickNodeAnkrMoralisPocket Network 什么時候選擇 Infura&#xff1f; Infura 簡介 Infura 是一個 區塊鏈基礎設施即服務&#xff08;BaaS, Blockchain as a Service&#xf…

TouchSocket TcpService:構建高性能Tcp服務的終極利器

這里寫目錄標題 TouchSocket TCPService&#xff1a;構建高性能TCP服務的終極利器引言TCPService核心特性快速入門&#xff1a;5分鐘搭建TCP服務1. 創建基礎TCP服務2. 自定義插件處理數據 高級用法實戰1. 客戶端連接管理 性能與穩定性保障示例與源碼結語 TouchSocket TCPServic…

Android Fresco 框架緩存模塊源碼深度剖析(二)

一、引言 在 Android 應用開發中&#xff0c;圖片加載和處理是常見且重要的功能。頻繁的圖片加載不僅會消耗大量的網絡流量&#xff0c;還會影響應用的性能和響應速度。因此&#xff0c;有效的緩存機制對于提升圖片加載效率和用戶體驗至關重要。Fresco 是 Facebook 開源的一款…

springboot使用163發送自定義html格式的郵件

springboot使用163發送html格式的郵件 效果: 下面直接開始教學 注冊郵箱&#xff0c;生成授權碼 獲取163郵箱的授權碼&#xff0c;可以按照以下步驟操作&#xff1a; 登錄163郵箱 打開瀏覽器&#xff0c;訪問 163郵箱登錄頁面。 使用你的郵箱賬號和密碼登錄。進入郵箱設置 登…

【Kafka】深入了解Kafka

集群的成員關系 Kafka使用Zookeeper維護集群的成員信息。 每一個broker都有一個唯一的標識&#xff0c;這個標識可以在配置文件中指定&#xff0c;也可以自動生成。當broker在啟動時通過創建Zookeeper的臨時節點把自己的ID注冊到Zookeeper中。broker、控制器和其他一些動態系…

C#使用SnsPictureBox.dll繪制點,線段、圓、折線、多邊形、測量尺等多種圖形。

CSDN下載地址&#xff1a;https://download.csdn.net/download/sns1991sns/87726867 gitee下載地址:https://gitee.com/linsns/SnsPictrueBox 支持2種繪制方式&#xff1a;響應式和等待式。 一、使用響應式繪制圖形 1、在窗口構造函數里添加繪制圖形的完成響應函數 public…

Hugging Face預訓練GPT微調ChatGPT(微調入門!新手友好!)

Hugging Face預訓練GPT微調ChatGPT&#xff08;微調入門&#xff01;新手友好&#xff01;&#xff09; 在實戰中&#xff0c;?多數情況下都不需要從0開始訓練模型&#xff0c;?是使?“??”或者其他研究者開源的已經訓練好的?模型。 在各種?模型開源庫中&#xff0c;最…

Redis BitMap 用戶簽到

Redis Bitmap Bitmap&#xff08;位圖&#xff09;是 Redis 提供的一種用于處理二進制位&#xff08;bit&#xff09;的特殊數據結構&#xff0c;它基于 String 類型&#xff0c;每個 bit 代表一個布爾值&#xff08;0 或 1&#xff09;&#xff0c;可以用于存儲大規模的二值狀…

Spring Boot 3 新特性實戰:從理論到實踐

引言 Spring Boot 自發布以來&#xff0c;憑借其簡潔的配置和強大的功能&#xff0c;迅速成為 Java 開發者的首選框架。隨著 Spring Boot 3 的發布&#xff0c;開發者們迎來了更多令人興奮的新特性。本文將深入探討 Spring Boot 3 的新特性&#xff0c;并通過實戰示例展示如何…

Nodejs使用redis

框架&#xff1a;koa&#xff0c;通過koa-generator創建 redis: 本地搭建&#xff0c;使用默認帳號&#xff0c;安裝說明地址以及默認啟動設置&#xff1a;https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/ 中間件&#x…

調研報告:Hadoop 3.x Ozone 全景解析

Ozone 是 Hadoop 的分布式對象存儲系統,具有易擴展和冗余存儲的特點。 Ozone 不僅能存儲數十億個不同大小的對象,還支持在容器化環境(比如 Kubernetes)中運行。 Apache Spark、Hive 和 YARN 等應用無需任何修改即可使用 Ozone。Ozone 提供了 Java API、S3 接口和命令行接口…

AI學習——卷積神經網絡(CNN)入門

作為人類&#xff0c;我們天生擅長“看”東西&#xff1a;一眼就能認出貓狗、分辨紅綠燈、讀懂朋友的表情……但計算機的“眼睛”最初是一片空白。直到卷積神經網絡&#xff08;CNN&#xff09;?的出現&#xff0c;計算機才真正開始理解圖像。今天&#xff0c;我們就用最通俗的…

除自身以外數組的乘積——面試經典150題(力扣)

題目 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法&#xff0c;且在 O(n) 時…

?算法OJ?二叉樹的前序遍歷【樹的遍歷】(C++實現)Binary Tree Preorder Traversal

?算法OJ?二叉樹的中序遍歷【樹的遍歷】&#xff08;C實現&#xff09;Binary Tree Inorder Traversal Given the root of a binary tree, return the preorder traversal of its nodes’ values. Example 1: Input: root [1,null,2,3] Output: [1,2,3]Explanation: Exam…

計算機二級MS之Excel

聲明&#xff1a;跟著大貓和小黑學習隨便記下一些筆記供大家參考&#xff0c;二級考試之前將持續更新&#xff0c;希望大家二級都能輕輕松松過啦&#xff0c;過了二級的大神也可以在評論區留言給點建議&#xff0c;感謝大家&#xff01;&#xff01; 文章目錄 考題難點&#x…

【Linux】VMware Workstation Pro 17 安裝教程

目錄 安裝 VMware Workstation Pro 17 一、CDS Repository 獲取安裝包 二、網盤獲取安裝包 三、Broadcom官方獲取安裝包 后續安裝過程沒啥特殊要求 安裝 VMware Workstation Pro 17 目前VMware Workstation pro 17已經對個人用戶免費開放使用。 Broadcom官網地址&#x…