亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

認(rèn)識 Memcached

xiaoxiaozi / 644人閱讀

摘要:對于的連接數(shù),并沒有隨著節(jié)點(diǎn)的增多,而降低。比如,,這個,在用分布式算法求其節(jié)點(diǎn)時,應(yīng)該以來計算,而不是以來計算。永久數(shù)據(jù)被踢現(xiàn)象網(wǎng)上有人反饋為數(shù)據(jù)丟失,明明設(shè)為永久有效,卻莫名其妙的丟失了。

簡介

Memcached是一個開源、免費(fèi)、高性能的分布式對象緩存系統(tǒng),通過減少對數(shù)據(jù)庫的讀取以提高Web應(yīng)用的性能;Memcached基于一個存儲鍵/值對的hashmap。其守護(hù)進(jìn)程(daemon )是用 C 寫的,但是客戶端可以用任何語言來編寫,并通過memcached協(xié)議與守護(hù)進(jìn)程通信。當(dāng)某個服務(wù)器停止運(yùn)行或崩潰了,所有存放在該服務(wù)器上的鍵/值對都將丟失。

Memcached的服務(wù)器端沒有提供分布式功能,各個Memcached應(yīng)用不會互相通信以共享信息。想要實現(xiàn)分布式通過,可以多搭建幾個Memcached應(yīng)用,通過算法實現(xiàn)此效果;

Memcached里有兩個重要概念:

slab:為了防止內(nèi)存碎片化,Memcached服務(wù)器端會預(yù)先將數(shù)據(jù)空間劃分為一系列slab;舉個例子,現(xiàn)在有一個100立方米的房間,為了合理規(guī)劃這個房間放置東西,會在這個房間里放置 30 個 1 立方米的盒子、20 個 1.25 立方米的盒子、15 個 1.5 立方米的盒子...這些盒子就是slab;

LRU:最近最少使用算法;當(dāng)同一個slat的格子滿了,這時需要新加一個值時,不會考慮將這個新數(shù)據(jù)放到比當(dāng)前slat更大的空閑slat,而是使用LRU移除舊數(shù)據(jù),放入這個新數(shù)據(jù);

部署

Memcached能夠在大多數(shù) Linux類 BSD 系統(tǒng)上運(yùn)行;官方?jīng)]有給出Windows上安裝Memcached的支持;

對于Debian / Ubuntu系統(tǒng):

apt-get install memcached

對于Redhat / Fedora / CentOs系統(tǒng):

yum install memcached

通過memcached -h查看幫助,同時也算是測試是否安裝成功;
如果遇到錯誤,可參考官方上的FAQ;

使用 服務(wù)器端

啟動一個Memcached應(yīng)用,常見的啟動方式是這樣的:
開啟一個memcached應(yīng)用作守護(hù)進(jìn)程,TCP連接,端口號是 11211;-u參數(shù)是運(yùn)行Memcached應(yīng)用的用戶(這個參數(shù)也只有 root用戶才能使用);

memcached -u root -p 11211 -d -vvv 

其他常見的參數(shù)也有

-m :分配給Memcached應(yīng)用使用的內(nèi)存大小,默認(rèn)是 64M;

-l :設(shè)置能訪問Memcached應(yīng)用的IP(默認(rèn):所有都允許;無論內(nèi)外網(wǎng)或者本機(jī)更換IP,有安全隱患;若設(shè)置為127.0.0.1就只能本機(jī)訪問);

-c :設(shè)置最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)是 1024;

-f :設(shè)置slat大小增長因子;默認(rèn)是 1.25;比如說 10號slab大小是752,那么11號slab大小就是 752 * 1.25;

客戶端

Memcached客戶端與服務(wù)器端的通信比較簡單,使用的基于文本的協(xié)議,而不是二進(jìn)制協(xié)議;因此可以通過telnet進(jìn)行交互;

telnet [host] [port]

按下Ctrl + ],并回車,即可回顯;

Storage命令

set
存儲數(shù)據(jù)。如果setkey已經(jīng)存在,該命令可以更新該key所對應(yīng)的原來的數(shù)據(jù),也就是實現(xiàn)更新的作用。詳細(xì)命令指南可參考菜鳥教程 - Memcached set 命令;

add
只有在setkey不存在的情況下,才會存儲數(shù)據(jù);詳細(xì)命令指南可參考菜鳥教程 - Memcached add 命令;

replace
只有在setkey存在的情況下,才會替換數(shù)據(jù);詳細(xì)命令指南可參考菜鳥教程 - Memcached replace 命令;

append
向已存在的元素值后追加數(shù)據(jù);詳細(xì)命令指南可參考菜鳥教程 - Memcached append 命令;

prepend
向已存在的元素值的頭部追加數(shù)據(jù);詳細(xì)命令指南可參考菜鳥教程 - Memcached prepend 命令;

cas
命令用于執(zhí)行一個"檢查并設(shè)置"的操作。它僅在當(dāng)前客戶端最后一次取值后,該key 對應(yīng)的值沒有被其他客戶端修改的情況下,才能夠?qū)⒅祵懭?。檢查是通過cas_token參數(shù)進(jìn)行的, 這個參數(shù)是Memcach指定給已經(jīng)存在的元素的一個唯一的 64 位值。詳細(xì)命令指南可參考菜鳥教程 - Memcached cas 命令;

Retrive命令

get
根據(jù)元素的鍵名獲取值;詳細(xì)命令指南可參考菜鳥教程 - Memcached get 命令;

gets
獲取帶有CAS令牌的數(shù)據(jù)值;詳細(xì)命令指南可參考菜鳥教程 - Memcached gets 命令;

delete
刪除已存在的元素;詳細(xì)命令指南可參考菜鳥教程 - Memcached delete 命令;

incr/decr
對于已存在的鍵值進(jìn)行自增或自減操作;詳細(xì)命令指南可參考菜鳥教程 - Memcached incr/decr 命令;

Statistics命令

stats
查看memcached所有的統(tǒng)計信息;詳細(xì)命令指南可參考菜鳥教程 - Memcached stats 命令;

stats items
顯示各個slabitem的數(shù)目和存儲時長等其它信息;詳細(xì)命令指南可參考菜鳥教程 - Memcached stats items 命令;

stats slabs
顯示各個slab的信息,包括chunk的大小、數(shù)目、使用情況等。詳細(xì)命令指南可參考菜鳥教程 - Memcached stats slabs 命令;

stats sizes
用于顯示所有item的大小和個數(shù)。該信息返回兩列,第一列是 item 的大小,第二列是 item 的個數(shù)。詳細(xì)命令指南可參考菜鳥教程 - Memcached stats sizes 命令;

flush_all
清除所有緩存數(shù)據(jù);詳細(xì)命令指南可參考菜鳥教程 - Memcached flush_all 命令;

分布式算法 取余算法

根據(jù)服務(wù)器節(jié)點(diǎn)數(shù)的余數(shù)來進(jìn)行分散,就是通過hash函數(shù)求得的Key的整數(shù)哈希值再除以服務(wù)器節(jié)點(diǎn)數(shù)并取余數(shù)來選擇服務(wù)器。這種算法取余計算簡單,分散效果好,但是缺點(diǎn)是如果某一臺機(jī)器宕機(jī),那么應(yīng)該落在該機(jī)器的請求就無法得到正確的處理,這時需要將當(dāng)?shù)舻姆?wù)器從算法從去除,此時候會有 (N-1) / N 的服務(wù)器的緩存數(shù)據(jù)需要重新進(jìn)行計算;如果新增一臺機(jī)器,會有N / (N+1)的服務(wù)器的緩存數(shù)據(jù)需要進(jìn)行重新計算。對于系統(tǒng)而言,這通常是不可接受的顛簸(因為這意味著大量緩存的失效或者數(shù)據(jù)需要轉(zhuǎn)移)。

【本段內(nèi)容摘自大臉貓的博客】

一致性哈希

表現(xiàn)為一個封閉的圓環(huán),圓環(huán)上的點(diǎn)分別代表0 ~ 2^32。各個memcached節(jié)點(diǎn)根據(jù)hash算法,分別占據(jù)圓環(huán)上的一個點(diǎn),當(dāng)某key進(jìn)行存儲操作,會針對key進(jìn)行hash操作,hash后也是圓環(huán)上的一個點(diǎn),那么這個key將被存儲在順時針方向的第一個節(jié)點(diǎn)上。

如上圖:分配不均的節(jié)點(diǎn),此時key將會被存儲到節(jié)點(diǎn)C上。

此時,我們新增節(jié)點(diǎn)D,如下圖。受影響的部分只有節(jié)點(diǎn)A~節(jié)點(diǎn)D中間的部分,這邊分?jǐn)?shù)據(jù)不會再映射到節(jié)點(diǎn)B上,而是映射到新增節(jié)點(diǎn)D上。減掉一個節(jié)點(diǎn)同理,只影響順時針后面一個節(jié)點(diǎn)。

優(yōu)點(diǎn):動態(tài)的增刪節(jié)點(diǎn),服務(wù)器down機(jī),影響的只是順時針的下一個節(jié)點(diǎn)
缺點(diǎn):當(dāng)服務(wù)器進(jìn)行hash后值較為接近會導(dǎo)致在圓環(huán)上分布不均勻,進(jìn)而導(dǎo)致key的分布、服務(wù)器的壓力不均勻。若中間某一權(quán)重較大的serverdown機(jī),命中率下降明顯;

在一致性哈希算法的基礎(chǔ)上引入虛擬節(jié)點(diǎn)

引入虛擬節(jié)點(diǎn)的思想,解決一致性hash算法分布不均導(dǎo)致負(fù)載不均的問題。一個真實節(jié)點(diǎn)對應(yīng)若干個虛擬節(jié)點(diǎn),當(dāng)key被映射到虛擬節(jié)點(diǎn)上時,則被認(rèn)為映射到虛擬節(jié)點(diǎn)所對應(yīng)的真實節(jié)點(diǎn)上。

優(yōu)點(diǎn):引入虛擬節(jié)點(diǎn)的思想,每個物理節(jié)點(diǎn)對應(yīng)圓環(huán)上若干個虛擬節(jié)點(diǎn)(比如200~300個),當(dāng)keyhash到虛擬節(jié)點(diǎn),就會存儲到實際的物理節(jié)點(diǎn)上,有效的實現(xiàn)了負(fù)載均衡;

【本段內(nèi)容摘自魚我所欲也的“memcached學(xué)習(xí) - 分布式算法”文章】

工作中常見的問題 緩存雪崩現(xiàn)象

緩存雪崩一般是由某個緩存節(jié)點(diǎn)失效,導(dǎo)致其他節(jié)點(diǎn)的緩存命中率下降,緩存中缺失的數(shù)據(jù)去數(shù)據(jù)庫查詢,短時間內(nèi),造成數(shù)據(jù)庫服務(wù)器崩潰;

重啟DB,短期又被壓垮,但緩存數(shù)據(jù)也多一些;DB反復(fù)多次啟動多次,緩存重建完畢,DB才穩(wěn)定運(yùn)行;或者,是由于緩存周期性的失效,比如每 6 小時失效一次,那么每 6 小時,將有一個請求“峰值”,嚴(yán)重者甚至?xí)頓B崩潰;

緩存的無底洞現(xiàn)象(multiget-hole)

該問題由 facebook 的工作人員提出的, facebook 在 2010 年左右,memcached節(jié)點(diǎn)就已經(jīng)達(dá)3000 個.緩存數(shù)千 G 內(nèi)容。

他們發(fā)現(xiàn)了一個問題,memcached 連接頻率,效率下降了,于是加 memcached 節(jié)點(diǎn),添加了后,發(fā)現(xiàn)因為連接頻率導(dǎo)致的問題,仍然存在,并沒有好轉(zhuǎn),稱之為“無底洞現(xiàn)象”。

問題分析

以用戶為例: user-133-age, user-133-name,user-133-height .....N 個 key,當(dāng)服務(wù)器增多,133 號用戶的信息,也被散落在更多的節(jié)點(diǎn),所以,同樣是訪問個人主頁,得到相同的個人信息, 節(jié)點(diǎn)越多,要連接的節(jié)點(diǎn)也越多。

對于 memcached 的連接數(shù),并沒有隨著節(jié)點(diǎn)的增多,而降低。 于是問題出現(xiàn)。

multiget-hole 解決方案

把某一組key,按其共同前綴,來分布。比如 user-133-age, user-133-name,user-133-height 這 3 個 key,在用分布式算法求其節(jié)點(diǎn)時,應(yīng)該以 ‘user-133’來計算,而不是以 user-133-age/name/height 來計算。

這樣,3 個關(guān)于個人信息的 key,都落在同 1 個節(jié)點(diǎn)上,訪問個人主頁時,只需要連接 1 個節(jié)點(diǎn)。

永久數(shù)據(jù)被踢現(xiàn)象

網(wǎng)上有人反饋為"memcached 數(shù)據(jù)丟失",明明設(shè)為永久有效,卻莫名其妙的丟失了。

分析原因:

如果 slab 里的很多 chunk,已經(jīng)過期,但過期后沒有被 get 過, 系統(tǒng)不知他們已經(jīng)過期。

永久數(shù)據(jù)很久沒 get 了, 不活躍, 如果新增 item,則永久數(shù)據(jù)被踢了。

當(dāng)然,如果那些非永久數(shù)據(jù)被 get,也會被標(biāo)識為 expire,從而不會再踢掉永久數(shù)據(jù);

解決方案:永久數(shù)據(jù)和非永久數(shù)據(jù)分開放;

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/61715.html

相關(guān)文章

  • Redis 常規(guī)知識點(diǎn)整理

    摘要:常規(guī)的知識點(diǎn)整理將持續(xù)更新不僅僅做緩存使用,某種場景下可以當(dāng)做數(shù)據(jù)庫使用,替換,因為是可以持久化的,所以可以直接和進(jìn)行交互而則不能當(dāng)數(shù)據(jù)庫使用,只能作緩存使用,不能替換。的實際處理速度完全依靠主進(jìn)程的執(zhí)行效率。 redis 常規(guī)的知識點(diǎn)整理---將持續(xù)更新... 1.redis 不僅僅做緩存使用,某種場景下可以當(dāng)做數(shù)據(jù)庫使用,替換 mysql,因為 Redis 是可以持久化的,所以可以...

    sunny5541 評論0 收藏0
  • HotFrameLearning Redis_01_簡介

    摘要:收到后則會調(diào)用指令一個子進(jìn)程來持久化存儲的數(shù)據(jù),在的持久化的這個短短期間內(nèi),的指令則存儲到內(nèi)存中。經(jīng)過官網(wǎng)的測試性能結(jié)果達(dá)到的。 HotFrameLearning Redis_01_簡介 - 一、大致介紹 1、介紹Redis之前,我有一堆的疑問,Redis是什么?有什么用?它能干什么?有什么特性?能解決我們?nèi)粘5哪男﹩栴}? 為什么要用Redis?Redis好在哪里?除了Redis...

    focusj 評論0 收藏0
  • 「真?全棧之路」Web前端開發(fā)的后端指南

    前言 在若干次前的一場面試,面試官看我做過python爬蟲/后端 的工作,順帶問了我些后端相關(guān)的問題:你覺得什么是后端? 送命題。當(dāng)時腦瓦特了,答曰:邏輯處理和數(shù)據(jù)增刪改查。。。 showImg(https://user-gold-cdn.xitu.io/2019/4/24/16a4ed4fc8c18078); 當(dāng)場被懟得體無完膚,羞愧難當(dāng)。事后再反思這問題,結(jié)合資料總結(jié)了一下。發(fā)現(xiàn)自己學(xué)過的Re...

    chuyao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<