第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

一次調(diào)用從Redis讀取多個(gè)哈希

一次調(diào)用從Redis讀取多個(gè)哈希

C#
炎炎設(shè)計(jì) 2021-12-05 16:52:16
我想從 Redis 的多個(gè)散列中搜索具有最高值的鍵。我的鑰匙是這種格式 -emp:1, emp:2,...emp:n每個(gè)都有這種格式的值 -1. name ABC2. salary 12343. age 23我想從這些哈希中找到最年長的員工。根據(jù)我對 Redis 的了解,無法在一次調(diào)用中讀取多個(gè)哈希值。這意味著我需要遍歷所有 emp 鍵并調(diào)用HGETALL每個(gè)鍵以獲得所需的結(jié)果(我確實(shí)有一個(gè)存儲(chǔ)所有 emp id 的集合)。有沒有辦法可以最大限度地減少點(diǎn)擊次數(shù)以使其正常工作?
查看完整描述

2 回答

?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以使用 Redis 中的管道來運(yùn)行多個(gè)命令并獲取它們的響應(yīng)。這應(yīng)該允許您執(zhí)行多個(gè)HGETALL命令。有關(guān)更多信息,請參閱文檔。不確定您用于 C# 的庫是什么,但它應(yīng)該為您提供一種使用管道的方法。

您還可以創(chuàng)建一個(gè) Lua 腳本來遍歷 Redis 鍵并返回最老員工的哈希值。


查看完整回答
反對 回復(fù) 2021-12-05
?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

你是對的

...無法在一次調(diào)用中讀取多個(gè)哈希值...

所以是@TheDude

...您還可以創(chuàng)建一個(gè) Lua 腳本來迭代 Redis 鍵...

添加到它

看來您正在使用Redis作為數(shù)據(jù)庫。您已經(jīng)存儲(chǔ)了所有域數(shù)據(jù),現(xiàn)在您想要查詢它。這是對Redis的濫用。它可以做到,但這不是它的目的。對于此活動(dòng),如果您使用真實(shí)的數(shù)據(jù)庫,它將更容易且性能更高。

Redis 用于緩存常用數(shù)據(jù)[注:1]。請注意兩個(gè)詞 (1) 緩存和 (2) 常用。緩存是臨時(shí)存儲(chǔ)。如果您想要永久存儲(chǔ) - 在服務(wù)器重新啟動(dòng)后 - 去數(shù)據(jù)庫。常用表示不要將所有數(shù)據(jù)存儲(chǔ)在那里。僅存儲(chǔ)正在使用的子集。您可以將 Redis 與您的所有數(shù)據(jù)一起使用,甚至可以在永久存儲(chǔ)打開的情況下使用,但是您必須非常小心。

出于您的目的,它似乎使用通用數(shù)據(jù)庫,并且SELECT MAX(age) FROM ...即使不是更好也同樣好。

或者可能,

您只引用了實(shí)際問題的一部分,實(shí)際上您正在遵循 Redis 最佳實(shí)踐。在這種情況下,我建議使用單獨(dú)的Sorted Set. 對于插入到主密鑰集的每個(gè)員工,還要做ZADD employeeages 80 Alenwhere80是年齡和Alen可能的人 Alen 的 ID。

要獲取最大年齡的人(的 ID),您可以執(zhí)行

ZREVRANGEBYSCORE employeeages +inf -inf WITHSCORES LIMIT 0 1

如果這看起來很奇怪,那么您是對的 - 這是非常有趣的事情!這不僅可以在一次調(diào)用中獲取數(shù)據(jù),而且可以在調(diào)用中的一個(gè)步驟中獲取數(shù)據(jù)!考慮一下:假設(shè)您有 100 萬名員工 (waao)。那么這種獲取最年長員工的方法將是最快的,使用數(shù)據(jù)庫SELECT MAX(...并將獲得亞軍,而你的HGETALLLua script將是最慢的。

如果您的員工的年齡經(jīng)常變化,請使用這種方法 - 例如在線游戲的玩家分?jǐn)?shù),并且您經(jīng)常想查詢排名靠前的或較松的 - 比如更新排行榜。使用這種方法代替數(shù)據(jù)庫的缺點(diǎn)是冗余度高。當(dāng)(例如)員工的地址發(fā)生變化時(shí),您需要更改大量記錄,為此您需要撥打大量電話。


[1] 正如評論中所指出的,Redis 不僅僅是常用數(shù)據(jù)的緩存。我相信對于這個(gè)討論,這個(gè)定義就足夠了。


查看完整回答
反對 回復(fù) 2021-12-05
  • 2 回答
  • 0 關(guān)注
  • 222 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號