首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Redis 入門精華:五大數據結構、Java API 實戰、六大經典應用場景與架構優勢

     編輯:Java 綜合教學

前言:為什麼選 Redis?

Redis (REmote DIctionary Server) 是 C 語言開發的高性能鍵值存儲,支持字符串、哈希、列表、集合、有序集合五大數據結構,操作原子、單線程模型極致快 (QPS 10w+)、支持持久化 (RDB/AOF)、主從複製、哨兵/集群高可用。本文面向「菜鳥」系統講解核心概念、Java (Jedis) 實戰、六大經典場景。

一、Redis 核心優勢速覽

特性說明
數據結構豐富String/Hash/List/Set/ZSet,比 Memcached 更通用
操作原子性單命令原子,支持 Lua 腳本多命令原子
高性能純內存 + 單線程無鎖 + I/O 多路復用,讀寫 10w+/s
持久化RDB 快照 + AOF 日志,重啟不丟數據
高可用主從異步複製、哨兵故障轉移、Cluster 分片
語言支持Java/Python/Go/JS/C# 等主流語言客戶端完善

二、五大數據結構與 Java (Jedis) 實戰

1. String — 最基礎,緩存、計數器、分布式鎖

Jedis jedis = new Jedis("192.168.146.129", 6379);
// 基礎 KV
jedis.set("name", "boruoyihao");
jedis.get("name"); // boruoyihao
jedis.exists("name"); // true
jedis.append("name", ",Hello"); // 追加
jedis.del("name"); // 刪除

// 批量操作
jedis.mset("name", "boreyihao", "age", "26");
jedis.mget("name", "age"); // [boreyihao, 26]

// 過期時間 (緩存核心)
jedis.setex("name", 2, "boruo"); // 2秒後過期
Thread.sleep(3000);
jedis.get("name"); // null

// 原子計數器 (線程安全!)
jedis.set("age", "26");
jedis.incr("age"); // 27
jedis.decrBy("age", 3); // 24

2. Hash — 對象存儲首選,字段級更新

Map user = new HashMap<>();
user.put("name", "Tom"); user.put("major", "Software"); user.put("age", "43");
jedis.hmset("user:1", user); // 寫入整個對象

jedis.hmget("user:1", "name"); // [Tom] - 只取需要的字段
jedis.hgetAll("user:1"); // 取全對象
jedis.hkeys("user:1"); jedis.hvals("user:1"); // 字段/值列表

// 字段級原子增減
jedis.hset("user:2", "age", "25");
jedis.hincrBy("user:2", "age", 3); // 28
// 優勢:修改年齡無需讀取整個對象、反序列化、改、序列化、寫回 (Memcached 痛點)

3. List — 雙向鏈表,棧、隊列、消息隊列、最新 N 條

jedis.del("task");
jedis.rpush("task", "do homework", "clean house"); // 右進 (隊列尾)
jedis.lpush("task", "rest", "watch tv");          // 左進 (棧頂/隊列頭)
jedis.llen("task"); // 4
jedis.lrange("task", 0, -1); // [watch tv, rest, do homework, clean house] 全範圍
jedis.lindex("task", 2); // do homework
jedis.lpop("task"); // watch tv (左出)
jedis.rpop("task"); // clean house (右出)
// 應用:微博最新評論 lrange(key, 0, 99) 取前 100,避免 MySQL 全表排序

4. Set — 無序去重、交並差集、標籤系統

jedis.sadd("s1", "4","1","3","20"); // 自動去重、自動排序 (JDK 實現有序)
jedis.smembers("s1"); // [1, 3, 4, 20]
jedis.scard("s1"); // 4

jedis.sadd("s2", "4","11","13","34","3","20");
jedis.sinter("s1","s2"); // 交集 [3, 4, 20]
jedis.sunion("s1","s2"); // 並集 [1, 3, 4, 11, 13, 20, 34]
jedis.sdiff("s1","s2"); // 差集 [1] (s1 有 s2 無)
// 應用:用戶標籤交集推薦、共同好友

5. Sorted Set (ZSet) — 權值排序、排行榜、Top N、延遲隊列

jedis.zadd("rank", 12, "Tom");  // score=12
jedis.zadd("rank", 1, "Jack");
jedis.zadd("rank", 20, "David");
jedis.zadd("rank", 3, "Jim");
jedis.zrange("rank", 0, -1); // [Jack, Jim, Tom, David] 按 score 升序
jedis.zcard("rank"); // 4
jedis.zscore("rank", "Tom"); // 12.0

// 應用:微博熱榜 (score=轉發+評論+點贊)、遊戲排行榜、延遲隊列 (score=執行時間戳)

三、六大經典應用場景

場景核心數據結構關鍵 API業務價值
消息隊列 List LPUSH/RPOP / BRPOP 阻塞 異步解耦、削峰填谷、郵件/通知/任務分發
最新 N 條數據 List LRANGE key 0 99 微博評論/動態流,避免 DB 全表排序
高併發計數器 String / Hash INCR / HINCRBY (原子) 點贊/閱讀數,線程安全無鎖
排行榜 / Top N ZSet ZADD / ZRANGE / ZREVRANGE 遊戲積分榜、熱門商品、熱搜榜
去重 / 集合運算 Set SADD / SINTER / SUNION / SDIFF 標籤系統、共同好友、用戶畫像交集
發布訂閱 Pub/Sub PUBLISH / SUBSCRIBE / PSUBSCRIBE 聊天室、實時通知、配置變更推送

四、架構部署建議

  • 單機:開發/測試/非核心業務,配置 RDB+AOF 混合持久化。
  • 主從 + 哨兵:生產標準高可用,1 主 2 從 + 3 哨兵,自動故障轉移。
  • Cluster 分片:數據量 > 單機內存 / QPS > 單機極限,16384 槽位自動分片。
  • 客戶端優化:Jedis 池配置 (maxTotal/maxIdle/minIdle)、Lettuce 非阻塞、連接池預熱。

五、學習資源推薦

六、總結

Redis = 五大結構 + 原子操作 + 高性能 + 持久化 + 高可用。掌握 String 做緩存/計數、Hash 存對象、List 做隊列/最新列表、Set 去重/集合運算、ZSet 排行榜/延遲隊列,覆蓋 90% 互聯網業務場景。菜鳥起步:先跑通 Try Redis,再寫 Jedis Demo,最後結合業務場景選結構。記住:Redis 不是萬能鑰匙,但解決「快」的問題是專業的。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved