| 如果散列鍵能做的事情,字符串鍵也能做,那么
我們?yōu)槭裁床恢苯邮褂米址I呢?
| 散列的好處
-- 將數(shù)據(jù)放在同一個(gè)地方
# 散列可以讓我們將一些相關(guān)的信息儲(chǔ)存在同一個(gè)額地方,而不是直接分散地
儲(chǔ)存在整個(gè)數(shù)據(jù)中里面,這不僅方便了數(shù)據(jù)管理,還可以盡量避免誤操作發(fā)生。
# 舉個(gè)例子,要?jiǎng)h除字符串鍵記錄的消息信息,我們需要輸入三個(gè)鍵,而刪除
散列鍵儲(chǔ)存的消息信息,我們只要輸入一個(gè)鍵
字符串鍵:id >> 10086; sender >> peter; receiver >> jack
散列鍵:message >> (id >> 10086; sender >> peter; receiver >> jack)
-- 避免鍵名沖突
# 在字符串鍵的介紹中命名鍵的時(shí)候,使用分隔符來避免命名沖突,
但最好的辦法是直接使用散列鍵來儲(chǔ)存簡直對(duì)數(shù)據(jù)
# 直接使用message:散列鍵來保濕消息自信息,并將于消息有關(guān)ed各項(xiàng)
信息儲(chǔ)存到散列的各個(gè)域里面。
# 保證了數(shù)據(jù)庫中每個(gè)鍵的作用都是固定的,單一的,儲(chǔ)存的信息都是被
隔離的,從而最大限度地避免鍵名沖突。
# 隨著與數(shù)量的增加,只用散列會(huì)比使用字符串少創(chuàng)建很多數(shù)據(jù)庫鍵。
-- 減少內(nèi)存占用
# 在一般情況下,保存相同數(shù)量的鍵值對(duì)信息,使用散列鍵比使用字符串鍵
更節(jié)約內(nèi)存。
# 因?yàn)樵跀?shù)據(jù)庫里面創(chuàng)建每一個(gè)鍵都帶有數(shù)據(jù)庫附加的管理信息(比如這個(gè)鍵
的類型、最后一次訪問的時(shí)間等等),所以數(shù)據(jù)庫里面的鍵越多,服務(wù)器在儲(chǔ)
存附加管理信息方面耗費(fèi)的內(nèi)存就越多,花在管理數(shù)據(jù)庫鍵上的CPU會(huì)越多。
# 當(dāng)散列包含的域值對(duì)數(shù)量比較少的時(shí)候,redis會(huì)自動(dòng)使用一種占用內(nèi)存非常
少的數(shù)據(jù)結(jié)構(gòu)來做散列的底層是西南,在散列的數(shù)量比較多的時(shí)候,這一措施
對(duì)減少內(nèi)存有很大的幫助。
--結(jié)論
只要有可能的話,就盡量使用散列鍵而不是字符串鍵來儲(chǔ)存鍵值對(duì)數(shù)據(jù),因?yàn)樯⒘墟I管理方便,能夠避免鍵名沖突,并且還能夠節(jié)約內(nèi)存。
-- 一些沒辦法使用散列鍵來替代字符串鍵的情況
1.使用二進(jìn)制操作命令:因?yàn)镽edis目前支持對(duì)字符串進(jìn)行setbit,getbit,bitop
等操作,如果你想使用這些操作,name只能使用字符串鍵。
2.使用過期功能:Redis的鍵過期功能目前只能對(duì)鍵進(jìn)行過期操作,而不能對(duì)散
列的域進(jìn)行過期操作,因此如果你要對(duì)鍵值對(duì)數(shù)據(jù)使用過期功能的話,那么
只能把簡直對(duì)儲(chǔ)存在字符串里面。
分享標(biāo)題:Redis數(shù)據(jù)操作--字符串與散列鍵的區(qū)別
文章URL:
http://weahome.cn/article/godejh.html