redis的hash儲存scan 方法的坑

2021-10-08 11:23:57 字數 1246 閱讀 4330

運用redistemplate的雜湊儲存資料(少量資料)時,需要匹配key獲取全部鍵值對時,可以使用 cursor> cursor = redistemplate.opsforhash().scan(key, scanoptions.none);方法。但是該方法執行次數達到一定量時,就會卡主,導致獲取資料失敗。

因為redistemplate.opsforhash().scan(key, scanoptions.none); 該方法是通過游標的方式獲取鍵值對的,如何遍歷完一次後,如果游標沒有關閉,會導致連線會一直增長,連線數到達峰值後,則會停止工作。所以每次使用完游標後,都要對其進行關閉。

下圖為while(true) 裡面需要從redistemplate中獲取鍵值對,使用了 redistemplate.opsforhash().scan(key, scanoptions.none); 方法,每次使用後,未關閉游標,導致while(true)不再執行。

下圖修改為關閉游標,則while(true)不會停止工作。

如果在配置redis時,配置了其連線池的大小,則會直接把異常丟擲來,就不用debug定位找異常處了。

配置:

redis:

database: 0 #redis資料庫索引(預設為0)

host: #redis伺服器位址

port: 6379 #redis伺服器連線埠

password: #redis伺服器連線密碼(預設為空)

pool:

max-active: 8 # 連線池最大連線數(使用負值表示沒有限制)

max-wait: 1 # 連線池最大阻塞等待時間(使用負值表示沒有限制)

max-idle: 8 # 連線池中的最大空閒連線

min-idle: 0 # 連線池中的最小空閒連線

timeout: 3000 #連線超時時間(毫秒)

Redis儲存資料 Hash型別

redis儲存hash型別的資料,就是map裡儲存map 儲存的map的key為欄位名,值為字段值 儲存資料 hset key 欄位名 字段值 127.0.0.1 6379 1 hset user username wlf integer 1 獲取資料hget key 欄位名 127.0.0.1 6...

Redis 儲存Hash(基本概念 命令)

1 hash型別 1 概念 將乙個物件型別儲存在hash型別要比儲存在stringt型別占用更少的記憶體空間 相比於json,json是以字串的形式儲存的 可以實現對整個物件的訪問。因此,hash更適合儲存物件 物件以字串的形式儲存會增加序列化與反序列化的開銷,對物件的值進行修改的時候需要對併發進行...

Redis系列 儲存篇hash主要操作函式小結

陽光透過玻璃,灑在身上,一杯暖茶在手,說不盡的安逸自得,讓我有種想再寫篇blog的衝動。上篇主要談了string,這裡談談hash吧 hash是一些列key value field value 的對映表。常常用其儲存一些物件例項。相對於把乙個物件的各個字段儲存為string,儲存為hash會占用更少...