日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Scala - Redis hgetAll 优化 by hscan

發布時間:2023/12/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala - Redis hgetAll 优化 by hscan 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.引言

Redis 實際使用過程中,由于?redis hgetAll 數據量過于大,導致線上 redis 進程堵塞,讀取緩慢影響任務執行效率,改用 hscan 優化。

二.Case分析

1.hgetAll 為什么慢

hgetAll 獲取指定 key 的全部 hash 結果,時間復雜度 O(n) ,hash 的 key 越多,當 kv 值不多時 hgetAll 非常好用,但是使用 hgetAll 獲取的數據量越大,獲取的性能越低。與之類似的是 hdel,隨著 key 的增加,獲取的時間并不是完全的線性增加,而是可能出現翻倍的情況。因此對于高并發的場景,要盡量避免在大數據上進行 hgetAll,hdel,emembers 等操作。

2.hscan 怎么代替

scan,hscan 是增量式迭代命令,通過游標進行分段式讀取,負載壓力從而不會堵塞 redis 線程,但是速度會慢于 hgetall。hscan 主要用到 ScanParams,通過 ScanParams.count() 方法可以設置每次迭代獲取的數據量,假設hgetAll redis read峰值很高,正常值 200,那就可以設定 count(200)。還有一個參數是 SCAN_POINTER_START,該字符型變量標記當前獲取的游標,當游標為"0"時,代表全部元素獲取完畢。

Tips:

hscan 每次返回的結果可能存在重復,最后整合所有結果時需要自己去重

3.還有方法減小壓力嘛

A.redis.dump

redis.dump(key) 可以獲取對應元素序列化后的內容 Array[Byte],可以使用 redis 相同的序列化協議進行反序列化,從而避免在 redis 客戶端執行序列化,縮短時間

B.拆分 key-value

將原始 HashMap 分布在多個 key 上,縮小每個 Hmap 的大小,整體的數據量變化不大

C.加機器

和拆分的思想類似,可以提高 redis 數量,通過 redis-pool 減輕單點 redis 的壓力

D.數據量很大

轉存 Hbase

三.hscan 實現代碼

A.ScanParams 初始化每次迭代的數量,count 為迭代量

B.SCAN_POINTER_START 為計數游標,標記為"0"時代表全部迭代結束

C.scanResult.getResult() 返回 util.Map.Entry 接口,此接口為泛型,定義為Entry<K,V>,轉換后存入 map 即可

def redisHScan(jedis: Jedis, key: String, count: Int = 100): mutable.HashMap[String, String] = {val infoMap = mutable.HashMap[String, String]()val scanParams = new ScanParams().count(count)var cur = redis.clients.jedis.ScanParams.SCAN_POINTER_STARTvar cycleIsFinished = falsewhile (!cycleIsFinished) {val scanResult = jedis.hscan(key, cur, scanParams)val result = scanResult.getResult.asScala.map(entry => (entry.getKey, entry.getValue))infoMap ++= resultcur = scanResult.getStringCursorif (cur == "0") cycleIsFinished = true}infoMap}val scanMap = redisHScan(redis, key, 100000)

下面對一個 55w+ key 的 HashMap 進行讀取測試:


????

四.總結

hgetAll 獲取大 key 時可以用 hscan 替代,但也需要注意 count 的大小和 Redis 具體的壓力,除此之外還有一點需要注意,由于 hscan 是迭代獲取執行,所以可能存在數據不一致的情況,獲取靠前的數據時,靠后的數據已被修改,這時候會出現先到的數據為老數據,后到的數據為新數據的情況。

總結

以上是生活随笔為你收集整理的Scala - Redis hgetAll 优化 by hscan的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99视频在线免费观看 | 一区免费视频 | 噜噜噜在线视频 | 亚洲欧美综合久久 | 小早川怜子一区二区三区 | 天天操天天插 | 国产人妻人伦精品1国产丝袜 | 欧美性开放视频 | 国产黄色高清视频 | 爽爽免费视频 | 日本毛片在线 | 国产农村妇女精品一区二区 | 国产aⅴ一区二区三区 | 国产伦精品一区二区三区照片 | 少妇人妻偷人精品视频蜜桃 | 中文字幕 国产精品 | 国产精品一区二区在线观看 | 免费久久网站 | 欧美国产中文 | 久久精品99久久久久久 | 成人在线观看免费视频 | 亚洲一区二区久久 | 少妇闺蜜换浪荡h肉辣文 | 丝袜人妻一区 | 黄色av三级 | 亚洲情在线 | 中文字幕制服丝袜 | 一级全黄男女免费大片 | 欧美三级三级三级爽爽爽 | 涩涩涩在线观看 | 激情网av| 久久久久久成人 | 亲子乱子伦xxxx | 日韩在线视频播放 | 91视频影院 | 海角社区在线视频播放观看 | 天天舔天天 | 国产中文字幕在线观看 | 国产欧美亚洲一区 | 调教驯服丰满美艳麻麻在线视频 | 国产午夜精品无码一区二区 | 邵氏电影《金莲外传2》免费观看 | 欧洲视频在线观看 | 亚洲乱码精品 | 中文字幕免费在线看线人动作大片 | 一色桃子juy758在线播放 | 朝鲜黄色片 | 亚洲国产精品视频 | 寂寞人妻瑜伽被教练日 | 91国模少妇一区二区三区 | www.成人精品| 亚洲色图二区 | 日本欧美在线观看 | 欧美成人一区二区三区四区 | 精品久久久久久久中文字幕 | 成人精品视频网站 | 波多野结衣在线一区 | 美女啪啪av | 依人成人综合网 | 国产成人愉拍精品久久 | 99久久婷婷国产一区二区三区 | 亚洲国产成人精品激情在线 | 日本作爱视频 | 毛片av在线 | 黄网址在线观看 | 九一av | 色鬼久久 | 久久精品在线 | 精品人妻少妇嫩草av无码专区 | 美女丝袜合集 | 波多野结衣精品 | 奇米影视首页 | 欧美日韩精品在线播放 | 精品国产aⅴ一区二区三区东京热 | 国产97av| 亚洲91视频| 91精品在线观看入口 | 欧美巨大另类极品videosbest | 片黄在线观看 | 国产精品日韩欧美大师 | 免费激情视频网站 | 久久日本精品字幕区二区 | 午夜av电影在线观看 | 欧美性tv | 激情四射综合网 | 男生女生操操操 | 99国产超薄肉色丝袜交足 | 超黄网站在线观看 | 国产片久久 | 久久性感美女视频 | 国产精品1页 | 成人av亚洲 | 久久涩涩 | www久久| 午夜在线观看视频 | 国产av无码国产av毛片 | 极品毛片 | 欧美乱妇视频 | 中文字幕一区二区三区人妻 |