国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

為什么大廠都禁用 SET 存儲(chǔ)用戶?Redis避坑指南

0
分享至

Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎(chǔ)、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計(jì)、大廠真題等,在線隨時(shí)刷題!

Redis對(duì)象存儲(chǔ)選擇:字符串 vs 哈希
場(chǎng)景模擬

假設(shè)我們要存儲(chǔ)用戶信息:

{
"id": 1001,
"name": "張三",
"age": 28,
"vip": true
}

方案1:字符串存儲(chǔ)

SET user:1001 '{"id":1001,"name":"張三","age":28,"vip":true}'

方案2:哈希存儲(chǔ)

HSET user:1001 id 1001 name 張三 age 28 vip 1
用一個(gè)電商用戶系統(tǒng)的場(chǎng)景,對(duì)比兩種存儲(chǔ)方案的差異 代碼案例對(duì)比

用戶對(duì)象定義

public class User {
private int id;
private String name;
private int age;
private boolean vip;
// 省略構(gòu)造函數(shù)和getter/setter
// JSON序列化方法
public String toJson() {
return new Gson().toJson(this);
}
// JSON反序列化方法
public static User fromJson(String json) {
return new Gson().fromJson(json, User.class);
}
}
方案1:字符串存儲(chǔ)(JSON序列化)

public class StringStorageDemo {
private static final Jedis jedis = new Jedis("localhost");
// 存儲(chǔ)用戶
public void saveUser(User user) {
jedis.set("user:" + user.getId(), user.toJson());
}
// 獲取用戶(需要反序列化)
public User getUser(int id) {
String json = jedis.get("user:" + id);
return User.fromJson(json);
}
// 更新年齡(需要完整讀寫(xiě))
public void updateAge(int id, int newAge) throws Exception {
// 非原子操作!
String key = "user:" + id;
User user = User.fromJson(jedis.get(key));
user.setAge(newAge);
jedis.set(key, user.toJson());
}
}
方案2:哈希存儲(chǔ)(字段級(jí)存儲(chǔ))

public class HashStorageDemo {
private static final Jedis jedis = new Jedis("localhost");
// 將User對(duì)象轉(zhuǎn)換為Map
private Map toMap(User user) {
Map map = new HashMap<>();
map.put("id", String.valueOf(user.getId()));
map.put("name", user.getName());
map.put("age", String.valueOf(user.getAge()));
map.put("vip", user.isVip() ? "1" : "0");
return map;
}
// 存儲(chǔ)用戶(批量操作)
public void saveUser(User user) {
jedis.hset("user:" + user.getId(), toMap(user));
}
// 獲取用戶(自動(dòng)轉(zhuǎn)換)
public User getUser(int id) {
Map map = jedis.hgetAll( "user:" + id);
return new User(
Integer.parseInt(map.get("id")),
map.get("name"),
Integer.parseInt(map.get("age")),
map.get("vip").equals("1")
);
}
// 更新年齡(直接操作字段)
public void updateAge(int id, int newAge) {
jedis.hset("user:" + id, "age", String.valueOf(newAge));
}
}
性能測(cè)試建議

使用redis-benchmark測(cè)試對(duì)比:

# 測(cè)試10萬(wàn)次寫(xiě)操作
redis-benchmark -n 100000 -t set,hset
壓測(cè)數(shù)據(jù)參考(10000次操作)

操作類(lèi)型

字符串方案

哈希方案

提升幅度

寫(xiě)入耗時(shí)

4200ms

850ms

395%

讀取耗時(shí)

3800ms

650ms

485%

網(wǎng)絡(luò)流量

12MB

2.3MB

422%


什么時(shí)候用字符串?

  • ? 需要設(shè)置過(guò)期時(shí)間的簡(jiǎn)單值

  • ? 計(jì)數(shù)器等單值場(chǎng)景

  • ? 需要存儲(chǔ)序列化二進(jìn)制數(shù)據(jù)

為什么推薦哈希存儲(chǔ)? 1. 內(nèi)存優(yōu)化(內(nèi)存警察)

Redis的哈希表采用特殊內(nèi)存結(jié)構(gòu):

  • ? 使用ziplist壓縮列表(字段數(shù)<512且值<64字節(jié)時(shí))

  • ? 自動(dòng)轉(zhuǎn)換為hashtable當(dāng)數(shù)據(jù)量增大 內(nèi)存對(duì)比(使用redis-rdb-tools分析):

    • ? 字符串存儲(chǔ):約120字節(jié)

    • ? 哈希存儲(chǔ):約65字節(jié)(節(jié)省45%+)

2. 操作效率(速度狂魔)

操作類(lèi)型

字符串方案

哈希方案

讀取單個(gè)字段

GET + 反序列化 + 解析

HGET

修改單個(gè)字段

GET + 反序列化 + 修改 + SET

HSET

批量操作

需要多次操作

HMSET/HMGET 單次完成


3. 并發(fā)安全(原子衛(wèi)士)

# 非原子操作示例(字符串方案)
GET user:1001 → 修改age → SET user:1001
# 原子操作示例(哈希方案)
HSET user:1001 age 29
4. 擴(kuò)展靈活(未來(lái)先知)

當(dāng)需要新增字段時(shí):

# 哈希方案直接追加
HSET user:1001 city 北京
# 字符串方案需要完整替換
GET → 修改 → SET

通過(guò)這個(gè)對(duì)比,可以明顯看出哈希存儲(chǔ)在對(duì)象存儲(chǔ)場(chǎng)景下的綜合優(yōu)勢(shì)。就像整理行李箱,哈希存儲(chǔ)是「分格收納」,而字符串存儲(chǔ)是「胡亂塞滿」,哪個(gè)更高效一目了然!

關(guān)鍵差異圖解

操作類(lèi)型

字符串存儲(chǔ)方案

哈希存儲(chǔ)方案

更新單個(gè)字段

1. 獲取整個(gè)JSON

2. 反序列化為對(duì)象

3. 修改字段值

4. 重新序列化

5. 存儲(chǔ)新JSON

直接發(fā)送HSET命令(僅傳輸修改字段)網(wǎng)絡(luò)傳輸量減少60%+

網(wǎng)絡(luò)傳輸示意圖

[客戶端]→→→→→→→→→[Redis]傳輸完整JSON數(shù)據(jù)包

[客戶端]→→→→[Redis]僅傳輸修改字段

并發(fā)修改風(fēng)險(xiǎn)

步驟3-5期間可能發(fā)生數(shù)據(jù)覆蓋

單個(gè)HSET命令具有原子性

記憶增強(qiáng)流程圖
Java開(kāi)發(fā)最佳實(shí)踐 使用Hash的三大場(chǎng)景


  • ? 需要頻繁修改部分字段(如用戶資料)

  • ? 對(duì)象字段超過(guò)3個(gè)(內(nèi)存優(yōu)勢(shì)顯現(xiàn))

  • ? 需要原子性字段操作

使用String的例外情況

// 適合存儲(chǔ)整個(gè)對(duì)象的情況
void saveOrderSnapshot(Order order) {
// 訂單快照需要完整存儲(chǔ)
jedis.set("order:"+order.getId(), order.toJson());
}
性能優(yōu)化技巧

// 批量操作示例(比逐條HSET快10倍+)
public void batchUpdate(Map users) {
Pipeline pipeline = jedis.pipelined();
users.forEach((id, user) -> {
pipeline.hset("user:"+id, toMap(user));
});
pipeline.sync();
}
總結(jié)

選擇策略就像整理衣柜:

  • ?字符串存儲(chǔ):把衣服胡亂堆進(jìn)箱子(適合短期存儲(chǔ)/不常修改)

  • ?哈希存儲(chǔ):使用分格收納盒整理(適合長(zhǎng)期使用/高頻修改)

在Java開(kāi)發(fā)中,通過(guò)合理選擇數(shù)據(jù)結(jié)構(gòu),可以使你的Redis性能獲得質(zhì)的飛躍。下次存儲(chǔ)對(duì)象時(shí),不妨先問(wèn)自己:這個(gè)數(shù)據(jù)需要「整體收納」還是「分格整理」?

作者:后端出路在何方

來(lái)源:https://juejin.cn/post/7478507102040080436

公眾號(hào)“Java精選”所發(fā)表內(nèi)容注明來(lái)源的,版權(quán)歸原出處所有(無(wú)法查證版權(quán)的或者未注明出處的均來(lái)自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請(qǐng)聯(lián)系,筆者會(huì)第一時(shí)間刪除處理!

最近有很多人問(wèn),有沒(méi)有讀者或者摸魚(yú)交流群!加入方式很簡(jiǎn)單,公眾號(hào)Java精選,回復(fù)“加群”,即可入群!

文章有幫助的話,點(diǎn)在看,轉(zhuǎn)發(fā)吧!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
離除夕夜不到一個(gè)月,央視春晚再傳噩耗,繼岳云鵬后孫濤官宣告別

離除夕夜不到一個(gè)月,央視春晚再傳噩耗,繼岳云鵬后孫濤官宣告別

小椰的奶奶
2026-01-27 00:18:59
每年數(shù)萬(wàn)人因血栓離世!醫(yī)生提醒:天冷建議躺一天,或別干這6事

每年數(shù)萬(wàn)人因血栓離世!醫(yī)生提醒:天冷建議躺一天,或別干這6事

岐黃傳人孫大夫
2026-01-29 14:56:16
1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無(wú)罪

1971年,劉思齊蒙冤入獄后向毛主席求助,毛澤東作出:娃娃們無(wú)罪

史海孤雁
2026-01-27 18:02:17
身家1550億美元的黃仁勛,來(lái)深圳參加年會(huì);深圳一企業(yè)宣布:發(fā)1億元“年終獎(jiǎng)”!不是給員工…… |深商

身家1550億美元的黃仁勛,來(lái)深圳參加年會(huì);深圳一企業(yè)宣布:發(fā)1億元“年終獎(jiǎng)”!不是給員工…… |深商

深圳夢(mèng)
2026-01-28 23:35:39
牢A遺漏了一個(gè)“三通一達(dá)”的典型樣本:鮑小姐。

牢A遺漏了一個(gè)“三通一達(dá)”的典型樣本:鮑小姐。

東方不敗然多多
2026-01-29 13:00:51
重磅!第二批禁足名單公布,9中超隊(duì)遭處罰,申花津門(mén)虎扣分+罰款

重磅!第二批禁足名單公布,9中超隊(duì)遭處罰,申花津門(mén)虎扣分+罰款

體壇鑒春秋
2026-01-29 11:32:28
沒(méi)想到,李在明訪華結(jié)束剛半月,中國(guó)竟在韓方掀起這么大“后勁”

沒(méi)想到,李在明訪華結(jié)束剛半月,中國(guó)竟在韓方掀起這么大“后勁”

鐵錘簡(jiǎn)科
2026-01-28 18:33:05
太頂了!明明什么都沒(méi)露,卻性感得要命!

太頂了!明明什么都沒(méi)露,卻性感得要命!

貴圈真亂
2025-12-20 12:02:06
某魚(yú)驚現(xiàn)“天價(jià)筆”:800元一支的中性筆,藏著多少骯臟暗語(yǔ)?

某魚(yú)驚現(xiàn)“天價(jià)筆”:800元一支的中性筆,藏著多少骯臟暗語(yǔ)?

戧詞奪理
2026-01-24 16:05:41
楊紫又“變臉”了,33歲還像18歲?她把自己整得沒(méi)人認(rèn)得出!

楊紫又“變臉”了,33歲還像18歲?她把自己整得沒(méi)人認(rèn)得出!

樂(lè)悠悠娛樂(lè)
2026-01-29 09:44:50
樂(lè)福:騎士2018年本進(jìn)不了總決賽!是詹姆斯逆天改命!

樂(lè)福:騎士2018年本進(jìn)不了總決賽!是詹姆斯逆天改命!

氧氣是個(gè)地鐵
2026-01-29 16:38:41
要打就打痛!中國(guó)手段已升級(jí),日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

要打就打痛!中國(guó)手段已升級(jí),日本:中方不批準(zhǔn)駐重慶總領(lǐng)事任命

通文知史
2026-01-28 14:30:03
沉默24小時(shí)后,卡尼終于發(fā)聲,與中國(guó)協(xié)議作廢,美財(cái)長(zhǎng)得寸進(jìn)尺

沉默24小時(shí)后,卡尼終于發(fā)聲,與中國(guó)協(xié)議作廢,美財(cái)長(zhǎng)得寸進(jìn)尺

隨遇而安之心
2026-01-28 21:58:43
生了4個(gè)兒子,因太窮送出兩個(gè),誰(shuí)知四個(gè)兒子后來(lái)都成了億萬(wàn)富翁

生了4個(gè)兒子,因太窮送出兩個(gè),誰(shuí)知四個(gè)兒子后來(lái)都成了億萬(wàn)富翁

王二哥老搞笑
2026-01-29 12:48:40
一場(chǎng)追悼會(huì),戳穿梁小龍?jiān)谙愀鄣恼鎸?shí)地位,原來(lái)成龍沒(méi)說(shuō)謊!

一場(chǎng)追悼會(huì),戳穿梁小龍?jiān)谙愀鄣恼鎸?shí)地位,原來(lái)成龍沒(méi)說(shuō)謊!

叨嘮
2026-01-27 03:28:08
岳父大人的狠毒用心,他是一點(diǎn)看不懂!

岳父大人的狠毒用心,他是一點(diǎn)看不懂!

BenSir本色說(shuō)
2026-01-26 22:03:54
河南男子姓“茍”怕女兒尷尬一起改姓“敬”:總被起外號(hào),自尊心受挫,擔(dān)心女兒受影響,改了名字自信了

河南男子姓“茍”怕女兒尷尬一起改姓“敬”:總被起外號(hào),自尊心受挫,擔(dān)心女兒受影響,改了名字自信了

大風(fēng)新聞
2026-01-28 16:36:36
金晨“事故確認(rèn)書(shū)”曝光!名下多家公司注銷(xiāo),知情者透露車(chē)禍細(xì)節(jié)

金晨“事故確認(rèn)書(shū)”曝光!名下多家公司注銷(xiāo),知情者透露車(chē)禍細(xì)節(jié)

好賢觀史記
2026-01-29 16:28:13
中國(guó)鬧了個(gè)烏龍,沙漠種麥本為保糧倉(cāng),誰(shuí)料金黃麥浪竟成治沙神器

中國(guó)鬧了個(gè)烏龍,沙漠種麥本為保糧倉(cāng),誰(shuí)料金黃麥浪竟成治沙神器

來(lái)科點(diǎn)譜
2026-01-27 08:59:39
炸場(chǎng)!蘋(píng)果最便宜iPhone來(lái)了:3999元256GB,不漲價(jià)反降價(jià)

炸場(chǎng)!蘋(píng)果最便宜iPhone來(lái)了:3999元256GB,不漲價(jià)反降價(jià)

小柱解說(shuō)游戲
2026-01-29 13:09:33
2026-01-29 17:19:00
Java精選
Java精選
一場(chǎng)永遠(yuǎn)也演不完的戲
1768文章數(shù) 3859關(guān)注度
往期回顧 全部

科技要聞

周亞輝的AI新賭局:國(guó)內(nèi)太卷 出海另起爐灶

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

頭條要聞

女大學(xué)生到東北游玩暈倒雪地凍傷 三根手指或面臨截肢

體育要聞

詹姆斯哭了!騎士視頻致敬41歲超巨

娛樂(lè)要聞

張譯不再隱瞞!公開(kāi)回應(yīng)退圈息影真相

財(cái)經(jīng)要聞

崔東樹(shù):中國(guó)汽車(chē)未來(lái)年銷(xiāo)或達(dá)5000萬(wàn)輛

汽車(chē)要聞

車(chē)長(zhǎng)超5米還帶后輪轉(zhuǎn)向 比亞迪海豹08/海獅08將亮相

態(tài)度原創(chuàng)

旅游
游戲
藝術(shù)
房產(chǎn)
公開(kāi)課

旅游要聞

投資30億,一年收入500萬(wàn),玉龍雪山觀光火車(chē)關(guān)停的蛛絲馬跡

PS+港區(qū)2月會(huì)免來(lái)了! 包含《冰點(diǎn)之下》等

藝術(shù)要聞

梵高全集(高清350張)震撼……

房產(chǎn)要聞

萬(wàn)科難眠夜:前董事長(zhǎng)郁亮失聯(lián),三筆債券靠深鐵才通過(guò)展期

公開(kāi)課

李玫瑾:為什么性格比能力更重要?

無(wú)障礙瀏覽 進(jìn)入關(guān)懷版