1. 程式人生 > >redis 中 set 和 hset 有什麼不同,什麼時候使用 hset 什麼時候使用set?

redis 中 set 和 hset 有什麼不同,什麼時候使用 hset 什麼時候使用set?

原文地址:https://blog.csdn.net/wab719591157/article/details/73379844/

redis 中存資料時,到底什麼時候用  hset 相比於 set 存資料時又有什麼不一樣?

set  就是普通的已key-value 方式儲存資料,可以設定過期時間。時間複雜度為 O(1),沒多執行一個 set 在redis 中就會多一個 key ,

hset 則是以hash 散列表的形式儲存。超時時間只能設定在 大 key 上,單個 filed 則不可以設定超時 時間複雜度我百度了很多文章都說是 O(1) 但是我下面給出的參考文章說時間上的時間複雜度其實是 O(N) N 值是單個hash 上的 filed 個數,所以 hash 上單個不適合儲存大量的 filed 並且如果 filed 多了比較消耗cpu,但同時以 散列表儲存則比較節省記憶體。

所以在實際的使用過程中應該使用 set 儲存單個大文字非結構化資料 hset 則儲存結構化資料,一個 hash 儲存一條資料,一個 filed 則儲存 一條資料中的一個屬性,value 則是屬性對應的值。

例如 資料庫中有一張表 user 包含  id,name,age,sex 4個屬性,並且有400w條資料,

      id,name,age,sex

1、1,張三,16,1

2、2,李四,22,1

3、3,王五,28,0

4、4,趙六,32,1

...

如果要整表快取到 redis 中則使用 hash ,一條資料一個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

又或則 應用中的 某個熱點資料,都可以使用 set 儲存一大段資料。

最後希望又大神能夠具體講講 為啥 hset 比較節省記憶體,和比較消耗cpu,set 為啥又比較佔用記憶體。

參考文章:https://stackoverflow.com/questions/12779372/hset-vs-set-memory-usage