Java學習--Redis

官網:https://redis.io?中文網:Redis中文網

Redis安裝包分為 Windows 版和 Linux 版:

Windows版下載地址:Releases · microsoftarchive/redis · GitHub

Linux版下載地址: Index of /releases/

一、Redis簡介

Redis是一個基于內存key-value 結構數據庫。

  • 基于內存存儲,讀寫性能高
  • 適合存儲熱點數據(熱點商品、資訊、新聞)
  • 企業應用廣泛

啟動Redis:在Redis安裝目錄cmd以下命令
redis-server.exe redis.windows.conf

連接服務器:redis-cli.exe -h [服務器IP] -p [服務器端口號] -a [密碼]

例如:redis-cli.exe -h localhost -p 6379 -a 123456

二、Redis數據類型

2.1 常用數據類型

Redis存儲的是key-value結構的數據,其中key是字符串類型,value有5種常用的數據類型:

  • 字符串 string
  • 哈希 hash
  • 列表 list
  • 集合 set
  • 有序集合 sorted set / zset

2.2?各種數據類型的特點

三、Redis常用命令

3.1 字符串操作命令

Redis 字符串類型常用命令:

  • SET key value? 設置指定key的值
  • GET key? 獲取指定key的值
  • SETEX key seconds value? 設置指定key的值,并將 key 的過期時間設為 seconds
  • SETNX key value? 只有在 key 不存在時設置 key 的值

示例:

3.2 哈希操作命令

Redis hash 是一個string類型的 field value 的映射表,hash特別適合用于存儲對象,常用命令:

  • HSET key field value ? 將哈希表 key 中的字段 field 的值設為 value
  • HGET key field ? 獲取存儲在哈希表中指定字段的值
  • HDEL key field? 刪除存儲在哈希表中的指定字段
  • HKEYS key ? 獲取哈希表中所有字段
  • HVALS key ? 獲取哈希表中所有值

示例:

3.3 列表操作命令

Redis 列表是簡單的字符串列表,按照插入順序排序,常用命令:

  • LPUSH key value1 [value2] ? 將一個或多個值插入到列表頭部(左邊)
  • LRANGE key start stop ? 獲取列表指定范圍內的元素
  • RPOP key ? 移除并獲取列表最后一個元素(右邊)
  • LLEN key ? 獲取列表長度

示例:

3.4 集合操作命令

Redis set string類型的無序集合。集合成員是唯一的,集合中不能出現重復的數據,常用命令:

  • SADD key member1 [member2] ? 向集合添加一個或多個成員
  • SMEMBERS key ? 返回集合中的所有成員
  • SCARD key ? 獲取集合的成員數
  • SINTER key1 [key2] ? 返回給定所有集合的交集
  • SUNION key1 [key2] ? 返回所有給定集合的并集
  • SREM key member1 [member2] ? 刪除集合中一個或多個成員

3.5 有序集合操作命令

Redis有序集合是string類型元素的集合,且不允許有重復成員。每個元素都會關聯一個double類型的分數。常用命令:

  • ZADD key score1 member1 [score2 member2] ? 向有序集合添加一個或多個成員
  • ZRANGE key start stop [WITHSCORES] ? 通過索引區間返回有序集合中指定區間內的成員
  • ZINCRBY key increment member ? 有序集合中對指定成員的分數加上增量 increment
  • ZREM key member [member ...] ? 移除有序集合中的一個或多個成員

示例:

3.6 通用命令

Redis的通用命令是不分數據類型的,都可以使用的命令:

  • KEYS pattern ? 查找所有符合給定模式( pattern)key
  • EXISTS key ? 檢查給定 key 是否存在
  • TYPE key ? 返回 key 所儲存的值的類型
  • DEL key ? 該命令用于在 key 存在是刪除 key

四、在Java中操作Redis

4.1?Redis的Java客戶端

Redis Java 客戶端很多,常用的幾種:

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring Data Redis 是 Spring 的一部分,對 Redis 底層開發包進行了高度封裝。在 Spring 項目中,可以使用Spring Data Redis來簡化操作。

4.2?Spring Data Redis

操作步驟:

  • 導入Spring Data Redis maven坐標
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 配置Redis數據源
  redis:host: localhostport: 6379#password: 123456database: 10
  • 編寫配置類,創建RedisTemplate對象
@Configuration
@Slf4j
public class RedisConfiguration {//redis的連接工廠對象@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("開始創建redis模板對象");RedisTemplate redisTemplate = new RedisTemplate();//設置redis的連接工廠對象redisTemplate.setConnectionFactory(redisConnectionFactory);//設置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
  • 通過RedisTemplate對象操作Redis

示例:

@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){System.out.println(redisTemplate);ValueOperations valueOperations = redisTemplate.opsForValue();HashOperations hashOperations = redisTemplate.opsForHash();ListOperations listOperations = redisTemplate.opsForList();SetOperations setOperations = redisTemplate.opsForSet();ZSetOperations zSetOperations = redisTemplate.opsForZSet();}
}

4.3?Operation接口

RedisTemplate 針對大量api進行了歸類封裝,將同一數據類型操作封裝為對應的Operation接口,具體分類如下:

? ValueOperations: s tring數據操作
? SetOperations:set類型數據操作
? ZSetOperations:zset類型數據操作
? HashOperations:hash類型的數據操作
? ListOperations:list類型的數據操作

4.4 操作字符串類型

 @Testpublic void testString(){//set get setex setnxredisTemplate.opsForValue().set("city","北京");String city =(String) redisTemplate.opsForValue().get("city");System.out.println(city);redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);//傳入value object類型,會被redis轉換成字符串類型redisTemplate.opsForValue().setIfAbsent("lock","1");redisTemplate.opsForValue().setIfAbsent("lock","2");}

//設置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());

打開Redis可視化界面發現:如果沒有設置key的序列化器會出現上面三條的結果,如果設置就正常;

有關序列化可以參考【Redis】數據序列化器_redis序列化-CSDN博客

4.5 操作哈希類型

示例:

 @Testpublic void testHash(){//hset hget hdel hkeys hvalsHashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("100","name","tom");hashOperations.put("100","age","20");String name = (String) hashOperations.get("100","name");System.out.println(name);Set keys = hashOperations.keys("100");System.out.println(keys);List values = hashOperations.values("100");System.out.println(values);hashOperations.delete("100","age");}

4.6 操作列表類型

    /*** 操作列表類型的數據*/@Testpublic void testList(){//lpush lrange rpop llenListOperations listOperations = redisTemplate.opsForList();listOperations.leftPushAll("mylist","a","b","c");listOperations.leftPush("mylist","d");List mylist = listOperations.range("mylist", 0, -1);System.out.println(mylist);listOperations.rightPop("mylist");Long size = listOperations.size("mylist");System.out.println(size);}

4.7 操作集合類型

    /*** 操作集合類型的數據*/@Testpublic void testSet(){//sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1","a","b","c","d");setOperations.add("set2","a","b","x","y");Set members = setOperations.members("set1");System.out.println(members);Long size = setOperations.size("set1");System.out.println(size);Set intersect = setOperations.intersect("set1", "set2");System.out.println(intersect);Set union = setOperations.union("set1", "set2");System.out.println(union);setOperations.remove("set1","a","b");}

4.8 操作有序集合類型

    /*** 操作有序集合類型的數據*/@Testpublic void testZset(){//zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset1","a",10);zSetOperations.add("zset1","b",12);zSetOperations.add("zset1","c",9);Set zset1 = zSetOperations.range("zset1", 0, -1);System.out.println(zset1);zSetOperations.incrementScore("zset1","c",10);zSetOperations.remove("zset1","a","b");}

4.9 通用命令

    /*** 通用命令操作*/@Testpublic void testCommon(){//keys exists type delSet keys = redisTemplate.keys("*");System.out.println(keys);Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");for (Object key : keys) {DataType type = redisTemplate.type(key);System.out.println(type.name());}redisTemplate.delete("mylist");}

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

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

相關文章

matlab慕課學習3.2+3.3

于20250310 3.2用if語句實現選擇結構 3.2.1什么是選擇結構 用if 語句和switch語句可實現選擇結構 3.2.2單分支if語句 if 條件語句組 %可以是一條也可是多條end 當條件為標量&#xff0c;非0表成立&#xff0c;0表示不成立。 當條件為矩陣時&#xff0c;矩陣非空&#xff…

JavaScript性能優化:DOM操作優化實戰

JavaScript性能優化&#xff1a;DOM操作優化實戰 一 重排與重繪的代價 問題場景 用戶點擊按鈕后&#xff0c;需要動態生成一個包含10,000個選項的下拉列表&#xff0c;但界面出現長達5秒的凍結。 錯誤代碼示例 function createList() {const ul document.getElementById(…

【Java學習】包裝類

面向對象系列九 包裝類變量 一、裝箱 1.實例化包裝對象 2.靜態緩存池 3.寫法 二、拆箱 包裝類變量 每個基本數據類型都有對應的基本類型的包裝類變量&#xff0c;將基本數據類型通過對應的包裝類對象載入著進入到類與對象面向對象體系 一、裝箱 Integer.valueOf(int) —…

【第22節】C++設計模式(行為模式)-Iterator(迭代器)模式

一、問題背景 Iterator 模式是設計模式中最為常見和實用的模式之一。它的核心思想是將對聚合對象的遍歷操作封裝到一個獨立的類中&#xff0c;從而避免暴露聚合對象的內部表示。通過 Iterator 模式&#xff0c;我們可以實現對聚合對象的統一遍歷接口&#xff0c;而不需要關心聚…

02C#基本結構篇(D4_注釋-訪問修飾符-標識符-關鍵字-運算符-流程控制語句)

目錄 一、注釋 1. 單行注釋 2. 多行注釋 3. XML文檔注釋 4. 使用建議和最佳實踐&#xff1a; 二、訪問修飾符 1. public 2. private 3. protected 4. internal 5. protected internal 或 protected and internal 6. private protected 或 private and protected 7.…

【CXX】6.2 str — rust::Str

Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果輸入不是 UTF-8&#xff0c;拋出 std::invalid_argument 異常。Str(const std::string &);Str(const char *);Str(con…

基于windows的MySQL安裝(2025最新,小白可用)

目錄 一&#xff0c;下載官網地址&#xff08;及版本選擇&#xff09;&#xff1a; 二&#xff0c;以安裝程序的方式安裝MySQL 1&#xff0c;安裝過程 2&#xff0c;用客戶端使用MySQL 3&#xff0c;配置環境變量在windows命令行界面使用mysql 下次開機后手動啟用服務 三…

Jenkins實現自動化構建與部署:上手攻略

一、持續集成與Jenkins核心價值 1.1 為什么需要自動化構建&#xff1f; 在現代化軟件開發中&#xff0c;團隊每日面臨以下挑戰&#xff1a; 高頻代碼提交&#xff1a;平均每個開發者每天提交5-10次代碼。多環境部署&#xff1a;開發、測試、預發布、生產環境需頻繁同步。復雜…

4個 Vue 路由實現的過程

大家好&#xff0c;我是大澈&#xff01;一個喜歡結交朋友、喜歡編程技術和科技前沿的老程序員&#x1f468;&#x1f3fb;?&#x1f4bb;&#xff0c;關注我&#xff0c;科技未來或許我能幫到你&#xff01; Vue 路由相信朋友們用的都很熟了&#xff0c;但是你知道 Vue 路由…

數學之快速冪-數的冪次

題目描述 給定三個正整數 N,M,P&#xff0c;求 輸入描述 第 1 行為一個整數 T&#xff0c;表示測試數據數量。 接下來的 T 行每行包含三個正整數 N,M,P。 輸出描述 輸出共 T 行&#xff0c;每行包含一個整數&#xff0c;表示答案。 輸入輸出樣例 示例 1 輸入 3 2 3 7 4…

【JavaEE】多線程進階(2)

【JavaEE】多線程進階&#xff08;2&#xff09; 一、JUC(java.util.concurrent) 的常?類1.1 Callable 接?1.2 ReentrantLock1.3 原子類原子類的特性&#xff1a;常見原子類&#xff1a;原子類的實例&#xff1a; 1.4 線程池1.5 信號量 Semaphore代碼實例 1.6 CountDownLatch…

[漏洞篇]XSS漏洞詳解

[漏洞篇]XSS漏洞 一、 介紹 概念 XSS&#xff1a;通過JS達到攻擊效果 XSS全稱跨站腳本(Cross Site Scripting)&#xff0c;為避免與層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆&#xff0c;故縮寫為XSS。這是一種將任意 Javascript 代碼插入到其他Web用戶頁面里執行以…

越早越好!8 個反直覺的金錢真相|金錢心理學

很多人都追求財富自由&#xff0c;但成功的人少之又少。 這可能是因為&#xff0c;人們往往忽略了一些金錢的真相和常識。 01 金錢常識 & 真相 為了構建健康的金錢觀&#xff0c;我讀了一本有點反直覺&#xff0c;有點像雞湯&#xff0c;但都是財富真相的書。 來自 Morg…

Spring Boot/Spring Cloud 整合 ELK(Elasticsearch、Logstash、Kibana)詳細避坑指南

我們在開發中經常會寫日志&#xff0c;所以需要有個日志可視化界面管理&#xff0c;使用ELK可以實現高效集中化的日志管理與分析&#xff0c;提升性能穩定性&#xff0c;滿足安全合規要求&#xff0c;支持開發運維工作。 下述是我在搭建ELK時遇到的許許多多的坑&#xff0c;希望…

AI編程: 一個案例對比CPU和GPU在深度學習方面的性能差異

背景 字節跳動正式發布中國首個AI原生集成開發環境工具&#xff08;AI IDE&#xff09;——AI編程工具Trae國內版。 該工具模型搭載doubao-1.5-pro&#xff0c;支持切換滿血版DeepSeek R1&V3&#xff0c; 可以幫助各階段開發者與AI流暢協作&#xff0c;更快、更高質量地完…

手機屏幕摔不顯示了,如何用其他屏幕臨時顯示,用來導出資料或者清理手機

首先準備一個拓展塢 然后 插入一個外接的U盤 插入鼠標 插入有數字小鍵盤區的鍵盤 然后準備一根高清線&#xff0c;一端鏈接電腦顯示器,一端插入拓展塢 把拓展塢的連接線&#xff0c;插入手機充電口&#xff08;可能會需要轉接頭&#xff09; 然后確保手機開機 按下鍵盤…

探索鏈表的奧秘:C語言中的查找操作與鏈表打印

目錄 鏈表的基本結構 頭插法 打印鏈表 按位置查找 按值查找 主函數 查找操作 示例運行 輸出示例 總結 在數據結構的學習中&#xff0c;鏈表是一種非常重要的線性結構。它的動態特性使得在插入和刪除操作時比數組更為高效。今天&#xff0c;我們將繼續探討鏈表的操作&…

第八屆藍橋杯單片機省賽

什么&#xff1f;你把最近幾屆省賽真題做完已經無題可做了&#xff0c;那不妨來看看老古董第八屆省賽的題目吧&#xff01; 附件&#xff1a;第八屆藍橋杯單片機省賽 一、數碼管 1.頁面流轉 以上的頁面流轉功能可以用下圖總結&#xff1a; #mermaid-svg-38fdQpdydbMy5CyP {fo…

win10電腦鼠標速度突然變的很慢?

電腦鼠標突然變很慢&#xff0c;殺毒檢測后沒問題&#xff0c;鼠標設置也沒變&#xff0c;最后發現可能是誤觸鼠標的“DPI”調節鍵。 DPI調節鍵在鼠標滾輪下方&#xff0c;再次點擊即可恢復正常鼠標速度。 如果有和-的按鍵&#xff0c;速度變快&#xff0c;-速度變慢。 圖源&…

1-002:MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么區別?

在 MySQL InnoDB 存儲引擎 中&#xff0c;索引主要分為 聚簇索引&#xff08;Clustered Index&#xff09; 和 非聚簇索引&#xff08;Secondary Index&#xff09;。它們的主要區別如下&#xff1a; 1. 聚簇索引&#xff08;Clustered Index&#xff09; 定義 聚簇索引是表數…