Redis 單進(jìn)程單線程模型的基于內(nèi)存的KV 數(shù)據(jù)庫堵第,由C語言編寫
Memcached 是單進(jìn)程多線程的同樣基于內(nèi)存的 KV 數(shù)據(jù)庫
1蜘腌、完全基于內(nèi)存辰如,絕大部分請求是純粹的內(nèi)存操作赞咙,非吃鹧快速。數(shù)據(jù)存在內(nèi)存中攀操,類似于HashMap院仿,HashMap的優(yōu)勢就是查找和操作的時(shí)間復(fù)雜度都是O(1);
2速和、數(shù)據(jù)結(jié)構(gòu)簡單歹垫,對數(shù)據(jù)操作也簡單,Redis中的數(shù)據(jù)結(jié)構(gòu)是專門進(jìn)行設(shè)計(jì)的颠放;
3县钥、采用單線程,避免了不必要的上下文切換和競爭條件慈迈,也不存在多進(jìn)程或者多線程導(dǎo)致的切換而消耗 CPU若贮,不用去考慮各種鎖的問題省有,不存在加鎖釋放鎖操作,沒有因?yàn)榭赡艹霈F(xiàn)死鎖而導(dǎo)致的性能消耗谴麦;
4蠢沿、使用多路I/O復(fù)用模型,非阻塞IO匾效;
5舷蟀、使用底層模型不同,它們之間底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣面哼,Redis直接自己構(gòu)建了VM 機(jī)制 野宜,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請求魔策;
---------------------
作者:徐劉根
來源:CSDN
原文:https://blog.csdn.net/xlgen157387/article/details/79470556
版權(quán)聲明:本文為博主原創(chuàng)文章匈子,轉(zhuǎn)載請附上博文鏈接!
緩存使用
緩存預(yù)熱
緩存穿透
持續(xù)高并發(fā)地請求某個(gè)不存在的數(shù)據(jù)闯袒,由于緩存沒有保存該數(shù)據(jù)虎敦,所有的請求都會(huì)落到數(shù)據(jù)庫上,對數(shù)據(jù)庫造成很大壓力政敢,甚至導(dǎo)致數(shù)據(jù)庫崩潰其徙。
對策:
1. 將不存在的數(shù)據(jù)也緩存起來(其值為null)
2. 布隆過濾器
優(yōu)勢:
全量存儲但是不存儲元素本身,在某些對保密要求非常嚴(yán)格的場合有優(yōu)勢喷户;
空間高效率唾那;
插入/查詢時(shí)間都是常數(shù)O(k),遠(yuǎn)遠(yuǎn)超過一般的算法;
劣勢:
存在誤算率(False Positive)褪尝,隨著存入的元素?cái)?shù)量增加闹获,誤算率隨之增加;
一般情況下不能從布隆過濾器中刪除元素恼五;
數(shù)組長度以及hash函數(shù)個(gè)數(shù)確定過程復(fù)雜昌罩;