SpringBoot 操作Redis、創建Redis文件夾、遍歷Redis文件夾

文章目錄

  • 前言
  • 依賴
  • 連接 Redis
  • Redis 配置文件
  • Redis 工具類
  • 操作 Redis
    • 創建 Redis 文件夾
    • 查詢數據
    • 遍歷 Redis 文件夾


前言

Redis 是一種高性能的鍵值存儲數據庫,支持網絡、可基于內存亦可持久化的日志型,而 Spring Boot 是一個簡化了開發過程的 Java 框架。將兩者結合,可以輕松地在 Spring Boot 項目中使用 Redis 來實現數據緩存、會話管理和分布式鎖等功能。

Redis 本身是一個內存數據庫,在應用中可以充當緩存,提高系統數據查詢性能。

一般用于在較短的時間段對相同數據頻繁讀取的場合,將讀取頻度較高的數據放入緩存,直接從緩存取數據,以提高效率。

使用場景如:實時排名、秒殺系統等等,并可設置數據自動過期,大大提高效率。


依賴

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

連接 Redis

application.yml 配置文件

spring:data:redis:# Redis服務器地址host: localhost# Redis服務器端口,默認為6379port: 6379# Redis連接的數據庫,默認為0(Redis默認有16個數據庫,0~15)database: 0# Redis服務器連接密碼,默認為空password:# 連接超時時間(毫秒)timeout: 2000jedis:pool:# 連接池最大連接數,若為負值則表示沒有任何限制max-active: 10# 連接池中的最大空閑連接max-idle: 6# 連接池中的最小空閑連接min-idle: 2# 連接池最大阻塞等待時間,若為負值則表示沒有任何限制max-wait: 1000lettuce:# 超時時間關閉shutdown-timeout: 100

Redis 配置文件

新建Redis配置類

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.*;/*** Redis 配置*/
@Configuration
public class RedisConfig {/*** Redis 序列化配置*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);// 使用GenericJackson2JsonRedisSerializer替換默認序列化GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();// 設置 Key 和 Value 的序列化規則redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// 初始化 RedisTemplate 序列化完成redisTemplate.afterPropertiesSet();return redisTemplate;}}

Redis 工具類

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;import java.util.*;
import java.util.concurrent.TimeUnit;/*** spring redis 工具類**/
@SuppressWarnings(value = {"unchecked", "rawtypes"})
@Component
public class RedisCache {@Autowiredpublic RedisTemplate redisTemplate;/*** 緩存基本的對象,Integer、String、實體類等** @param key   緩存的鍵值* @param value 緩存的值*/public <T> void setCacheObject(final String key, final T value) {redisTemplate.opsForValue().set(key, value);}/*** 緩存基本的對象,Integer、String、實體類等** @param key      緩存的鍵值* @param value    緩存的值* @param timeout  時間* @param timeUnit 時間顆粒度*/public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {redisTemplate.opsForValue().set(key, value, timeout, timeUnit);}/*** 設置有效時間** @param key     Redis鍵* @param timeout 超時時間* @return true=設置成功;false=設置失敗*/public boolean expire(final String key, final long timeout) {return expire(key, timeout, TimeUnit.SECONDS);}/*** 設置有效時間** @param key     Redis鍵* @param timeout 超時時間* @param unit    時間單位* @return true=設置成功;false=設置失敗*/public boolean expire(final String key, final long timeout, final TimeUnit unit) {return redisTemplate.expire(key, timeout, unit);}/*** 獲取有效時間** @param key Redis鍵* @return 有效時間*/public long getExpire(final String key) {return redisTemplate.getExpire(key);}/*** 判斷 key是否存在** @param key 鍵* @return true 存在 false不存在*/public Boolean hasKey(String key) {return redisTemplate.hasKey(key);}/*** 獲得緩存的基本對象。** @param key 緩存鍵值* @return 緩存鍵值對應的數據*/public <T> T getCacheObject(final String key) {ValueOperations<String, T> operation = redisTemplate.opsForValue();return operation.get(key);}/*** 刪除單個對象** @param key*/public boolean deleteObject(final String key) {return redisTemplate.delete(key);}/*** 刪除集合對象** @param collection 多個對象* @return*/public boolean deleteObject(final Collection collection) {return redisTemplate.delete(collection) > 0;}/*** 緩存List數據** @param key      緩存的鍵值* @param dataList 待緩存的List數據* @return 緩存的對象*/public <T> long setCacheList(final String key, final List<T> dataList) {Long count = redisTemplate.opsForList().rightPushAll(key, dataList);return count == null ? 0 : count;}/*** 獲得緩存的list對象** @param key 緩存的鍵值* @return 緩存鍵值對應的數據*/public <T> List<T> getCacheList(final String key) {return redisTemplate.opsForList().range(key, 0, -1);}/*** 緩存Set** @param key     緩存鍵值* @param dataSet 緩存的數據* @return 緩存數據的對象*/public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);Iterator<T> it = dataSet.iterator();while (it.hasNext()) {setOperation.add(it.next());}return setOperation;}/*** 獲得緩存的set** @param key* @return*/public <T> Set<T> getCacheSet(final String key) {return redisTemplate.opsForSet().members(key);}/*** 緩存Map** @param key* @param dataMap*/public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {if (dataMap != null) {redisTemplate.opsForHash().putAll(key, dataMap);}}/*** 獲得緩存的Map** @param key* @return*/public <T> Map<String, T> getCacheMap(final String key) {return redisTemplate.opsForHash().entries(key);}/*** 往Hash中存入數據** @param key   Redis鍵* @param hKey  Hash鍵* @param value 值*/public <T> void setCacheMapValue(final String key, final String hKey, final T value) {redisTemplate.opsForHash().put(key, hKey, value);}/*** 獲取Hash中的數據** @param key  Redis鍵* @param hKey Hash鍵* @return Hash中的對象*/public <T> T getCacheMapValue(final String key, final String hKey) {HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();return opsForHash.get(key, hKey);}/*** 獲取多個Hash中的數據** @param key   Redis鍵* @param hKeys Hash鍵集合* @return Hash對象集合*/public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {return redisTemplate.opsForHash().multiGet(key, hKeys);}/*** 刪除Hash中的某條數據** @param key  Redis鍵* @param hKey Hash鍵* @return 是否成功*/public boolean deleteCacheMapValue(final String key, final String hKey) {return redisTemplate.opsForHash().delete(key, hKey) > 0;}/*** 獲得緩存的基本對象列表** @param pattern 字符串前綴* @return 對象列表*/public Collection<String> keys(final String pattern) {return redisTemplate.keys(pattern);}
}

操作 Redis

創建 Redis 文件夾

編寫測試用例

: 分割字符串即可創建文件夾,示例如下:

import com.chh.api.utils.redis.RedisCache;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RedisTest {@Autowiredprivate RedisCache redisCache;@Testvoid contextLoads() {redisCache.setCacheObject(getCacheKey("test"), "測試");}/*** 設置cache key** @param configKey 參數鍵* @return 緩存鍵key*/public static String getCacheKey(String configKey) {return "chh-api:data:" + configKey;}
}

運行測試用例,效果如圖:

在這里插入圖片描述

只有一條數據的時候,不顯示文件夾

再寫入一條數據,key命名為test2

    @Testvoid contextLoads() {redisCache.setCacheObject(getCacheKey("test2"), "測試2");}

運行測試用例,效果如圖:

在這里插入圖片描述

查詢數據

    @Testvoid getData() {// 判斷鍵是否存在if (redisCache.hasKey("chh-api:data:test")) {Object object = redisCache.getCacheObject("chh-api:data:test");System.out.println(object);} else {System.out.println("不存在");}}

運行測試用例,效果如圖:

在這里插入圖片描述

遍歷 Redis 文件夾

    @Testvoid getAllData() {Collection<String> keys = redisCache.keys("chh-api:data:*");for (String key : keys) {Object object = redisCache.getCacheObject(key);System.out.println(object);}}

運行測試用例,效果如圖:

在這里插入圖片描述

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

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

相關文章

【TA 挖坑02】RayMarching SDF 物體黏合

寫在前面 由于實習和忙著論文很久沒經營博客了&#xff0c;最近以各種方式收集到了一些想實現的效果&#xff0c;其中一個就是卡通云融合、變大變小、聚散收攏的效果如何實現的問題&#xff0c;這就不得不提擱置了很久的RayMarching... 挖坑&#xff01;整理一下有幫助的文章…

AWS WAF實戰、優勢對比和缺陷解決

文章目錄 挑戰和目標AWS WAF的優勢AWS WAF的不足我是怎么做的?什么是比較好的AWS WAF設計? 筆者為了解決公司Web站點防御性問題&#xff0c;較為深入的研究AWS WAF的相關規則。面對上千萬的沖突&#xff0c;筆者不得設計出一種能漂亮處理沖突數據WAF規則。 AWS WAF開發人員在…

Cocos2d 項目問題記錄

環境搭建 正常運行 Android 端的 Cocos2d 項目&#xff0c;本機至少需要 Android SDK、NDK 環境、Android Studio 項目報錯總結 CMake Error: CMake was unable to find a build program corresponding to "Ninja" 默認創建工程的 gradle.tools 版本為 3.1.0&…

微服務08-多級緩存

1.什么是多級緩存 傳統的緩存策略一般是請求到達Tomcat后,先查詢Redis,如果未命中則查詢數據庫,如圖: 存在下面的問題: ?請求要經過Tomcat處理,Tomcat的性能成為整個系統的瓶頸 ?Redis緩存失效時,會對數據庫產生沖擊 多級緩存就是充分利用請求處理的每個環節,分…

卷積操作后特征圖尺寸,感受野,參數量的計算

文章目錄 1、輸出特征圖的尺寸大小2、感受野的計算3、卷積核的參數量 1、輸出特征圖的尺寸大小 如果包含空洞卷積&#xff0c;即擴張率dilation rate不為1時&#xff1a; 2、感受野的計算 例如&#xff0c;圖像經過兩個3*3&#xff0c;步長為2的卷積后感受野為&#xff1a; co…

Centos7多臺服務器免密登錄

準備四臺服務器: docker0 docker1 docker2 docker3 在docker0服務器上生成公鑰和私鑰 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…

在Gazebo中添加懸浮模型后,利用鍵盤控制其移動方法

前段時間寫了文章&#xff0c;通過修改sdf、urdf模型的方法&#xff0c;在Gazebo中添加懸浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;在Gazebo中添加懸浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;修改sdf、urdf模型_sagima_sdu的博客-CSDN博客 今天講…

Leetcode32 最長有效括號

給你一個只包含 ( 和 ) 的字符串&#xff0c;找出最長有效&#xff08;格式正確且連續&#xff09;括號子串的長度。 代碼如下&#xff1a; class Solution {public int longestValidParentheses(String str) {Stack<Integer> s new Stack<>();int res 0;int st…

GrapeCity Documents for Excel, Java Edition Crack

GrapeCity Documents for Excel, Java Edition Crack 增加了對SpreadJS.sjs文件格式的支持&#xff1a; 更快地將大型Microsoft Excel文件轉換為.sjs格式。 使用較小的占用空間保存導出的文件。 將Excel/SpreadJS功能導入SpreadJS/從SpreadJS導出。 從.sjs文件中壓縮的JSON文件…

JVM——JDK 監控和故障處理工具總結

文章目錄 JDK 命令行工具jps:查看所有 Java 進程jstat: 監視虛擬機各種運行狀態信息 jinfo: 實時地查看和調整虛擬機各項參數jmap:生成堆轉儲快照**jhat**: 分析 heapdump 文件**jstack** :生成虛擬機當前時刻的線程快照 JDK 可視化分析工具JConsole:Java 監視與管理控制臺連接…

手撕單鏈表

目錄 鏈表的概念和結構 單鏈表的實現 申請新結點 打印 尾插 頭插 尾刪 頭刪 ?編輯 查找 在pos位置前插入元素 在pos位置后插入元素 刪除pos位置的元素 刪除pos位置之后的位置的元素?編輯 完整代碼 SListNode.h SListNode.c 鏈表的概念和結構 鏈表是一種物理存儲…

【JavaSE】Java方法的使用

【本節目標】 1. 掌握方法的定義以及使用 2. 掌握方法傳參 3. 掌握方法重載 4. 掌握遞歸 目錄 1.方法概念及使用 1.1什么是方法(method) 1.2 方法定義 1.3 方法調用的執行過程 1.4 實參和形參的關系 2. 方法重載 2.1 為什么需要方法重載 2.2 方法重載概念 3. 遞歸 3.…

【uni-app報錯】獲取用戶收貨地址uni.chooseAddress()報錯問題

chooseAddress:fail the api need to be declared in …e requiredPrivateInf 原因&#xff1a; 小程序配置 / 全局配置 (qq.com) 解決&#xff1a; 登錄小程序后臺申請接口 按照流程申請即可 在項目根目錄中找到 manifest.json 文件&#xff0c;在左側導航欄選擇源碼視圖&a…

杭電比賽總結

我們的隊伍&#xff1a;team013 另外兩隊&#xff1a;team014、team015 ? 今天是我第一次打杭電&#xff0c;發現杭電多數都是猜結論題 先給一下我們的提交數據 Submit TimeProblem IDTimeMemoryJudge Status4:59:59101115 MS1692 KWrong Answer4:59:55101115 MS1684 KWrong…

Java算法_ 檢查對稱樹(LeetCode_Hot100)

題目描述&#xff1a;給你一個二叉樹的根節點 &#xff0c; 檢查它是否軸對稱。root 獲得更多&#xff1f;算法思路:代碼文檔&#xff0c;算法解析的私得。 運行效果 完整代碼 /*** 2 * Author: LJJ* 3 * Date: 2023/8/17 8:47* 4*/ public class SymmetricTree {static class…

vue之動態表單(優化)

代碼資源在這兒 ↑ vue之動態表單優化 vue2js動態表單優化vue3ts動態表單優化 vue2js動態表單優化 效果圖 目錄結構 五個文件的完整代碼: 以下是App.vue <template><div><router-view></router-view><Formpage /></div> </templa…

【LeetCode】647.回文子串

題目 給你一個字符串 s &#xff0c;請你統計并返回這個字符串中 回文子串 的數目。 回文字符串 是正著讀和倒過來讀一樣的字符串。 子字符串 是字符串中的由連續字符組成的一個序列。 具有不同開始位置或結束位置的子串&#xff0c;即使是由相同的字符組成&#xff0c;也會…

web連接桌面打開gptmap

一&#xff1a;環境配置 需要的材料&#xff1a; python-3.10.4 我使用的是這個版本的&#xff0c;3.8.10 該版本和以下版本組件組合&#xff0c;驗證過能正常運行&#xff08;python 3.6.8測試異常&#xff09; websockify 該項目有python版本和node js版本 noVNC 形式的app…

Qt Designer設計的界面如何顯示、即運行顯示窗口界面

首先利用Qt Designer設計.ui文件&#xff0c;然后采用Tools->External Tools->PyUIC轉換成.py文件。這個.py文件是.ui文件編譯而來的&#xff0c;將這種文件由.ui文件編譯而來的.py文件稱之為界面文件。由于界面文件每次編譯時候都會初始化&#xff0c;所以需要新建一個.…

Android 13 添加自定義分區,恢復出廠設置不被清除

需求: 客戶有些文件或數據,需要做得恢復出廠設置還存在,故需新增一個分區存儲客戶數據。 要求: a) 分區大小為50M b) 應用層可讀可寫 c) 恢復出廠設置后不會被清除 d) 不需要打包.img e) 不影響OTA升級 缺點: 1).通過代碼在分區創建目錄和文件,會涉及到SeLinux權限的修…