下面由redis教程欄目給大家介紹redis中set和hset的區(qū)別和使用場景,希望對需要的朋友有所幫助!
redis中存數(shù)據(jù)時,到底什么時候用 hset 相比于 set 存數(shù)據(jù)時又有什么不一樣?
set 就是普通的已key-value 方式存儲數(shù)據(jù),可以設置過期時間。時間復雜度為 o(1),沒多執(zhí)行一個 set 在redis 中就會多一個 key ,hset 則是以hash 散列表的形式存儲。超時時間只能設置在 大 key 上,單個 filed 則不可以設置超時 時間復雜度我百度了很多文章都說是 o(1) 但是我下面給出的參考文章說時間上的時間復雜度其實是 o(n) n 值是單個hash 上的 filed 個數(shù),所以 hash 上單個不適合存儲大量的 filed 并且如果 filed 多了比較消耗cpu,但同時以 散列表存儲則比較節(jié)省內(nèi)存。
所以在實際的使用過程中應該使用 set 存儲單個大文本非結(jié)構(gòu)化數(shù)據(jù) hset 則存儲結(jié)構(gòu)化數(shù)據(jù),一個 hash 存儲一條數(shù)據(jù),一個 filed 則存儲 一條數(shù)據(jù)中的一個屬性,value 則是屬性對應的值。
例如 數(shù)據(jù)庫中有一張表 user 包含 id,name,age,sex 4個屬性,并且有400w條數(shù)據(jù),
id,name,age,sex
1、1,張三,16,1
2、2,李四,22,1
3、3,王五,28,0
4、4,趙六,32,1
…
如果要整表緩存到 redis 中則使用 hash ,一條數(shù)據(jù)一個hash 一個hash 里則包含4個filed。
hset user_1 id 1 name 張三 age 16 sex 1
hset user_2 id 2 name 李四 age 16 sex 1
…
這樣存儲,如果用戶的某個屬性值改變,還可以單個修改。
例如 吧張三的年齡改為30 則可以使用命令: hset user_1 age 30
在比如如果要緩存應用整個首頁 html ,或則某個商品的詳情介紹(一般來說商品的詳情介紹是makdown語法的富文本信息,或 html 格式的富文本信息) 則使用 則可以使用 set
又或則 應用中的 某個熱點數(shù)據(jù),都可以使用 set 存儲一大段數(shù)據(jù)。