什麼是redis
熱key。
我們知道redis
單機讀寫理論值是讀的速度是110000次/s,寫的速度是81000次/s。reidis 熱key就是指類似微博熱門事件、秒殺的商品,短時間大量的請求訪問同乙個key。
可能導致的問題有:1、二級快取
根據業務判斷把指定的熱key,在服務本地儲存乙份。降低redis壓力。
//本地快取初始化以及構造
private static loadingcache> configcache
= cachebuilder.newbuilder()
.concurrencylevel(8) //併發讀寫的級別,建議設定cpu核數
.expireafterwrite(10, timeunit.seconds) //寫入資料後多久過期
.initialcapacity(10) //初始化cache的容器大小
.maximumsize(10)//cache的容器最大
.recordstats()
// build方法中可以指定cacheloader,在快取不存在時通過cacheloader的實現自動載入快取
.build(new cacheloader>()
});//本地快取獲取
object result = configcache.get(key);
使用本地快取則存在以下問題:需要提前獲知熱點
快取容量有限
不一致性時間增長
熱點 key 遺漏
2、對key拆分
將熱key拆分成多份,使其均勻分布在每個redis-cluster上,每個服務獲取到熱key拆分的key集合,根據服務的ip或mac位址做hash,之後的值與拆key的數量做取餘,獲取到key的字尾。
3、整合解決方法
目前市面上已經有了不少關於hotkey相對完整的應用級解決方案,其中京東在這方面有開源的hotkey工具,原理就是在client端做洞察,然後上報對應hotkey,server端檢測到後,將對應hotkey下發到對應服務端做本地快取,並且這個本地快取在遠端對應的key更新後,會同步更新,已經是目前較為成熟的自動探測熱key、分布式一致性快取
解決方案,京東零售熱key。
參考:
Redis中大key問題,熱key問題的解決方案
遇到大key 熱key問題,主要是去拆分 大key問題 業務場景中經常會有各種大key的情況,比如 1.單個簡單的key儲存的value很大 例如排行榜資訊,key是固定的,value排行榜幾十萬的資料 2.hash set zset list中儲存過多的元素 以萬為單位 由於redis是單執行緒執...
redis的大key和熱key問題
redis的大key和熱key實際上就是經常被訪問的key或者占用空間比較大的key。有什麼影響?舉個栗子,比如說某個明星出軌了,這個明星的搜尋量就會暴增,對redis造成很大的衝擊。redis檢視大key命令 redis cli bigkeys redis檢視熱key命令 redis cli ho...
Redis為什麼快,熱key解決
redis的速度非常的快,單機的redis就可以支撐每秒10幾萬的併發,相對於mysql來說,效能是mysql的幾十倍。速度快的原因主要有幾點 完全基於記憶體操作 c語言實現,優化過的資料結構,基於幾種基礎的資料結構,redis做了大量的優化,效能極高 使用單執行緒,無上下文的切換成本 基於非阻塞的...