亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么會Failed to save data at the server?

為什么會Failed to save data at the server?

PHP
浮云間 2023-04-02 18:14:12
$memcache = new Memcache;  $memcache->connect('127.0.0.1', 11211) or die ("Could not connect");  $version = $memcache->getVersion();echo "Server's version: ".$version."\n<br>";  $tmp_object = 'test';$memcache->set('key', $tmp_object, false,10) or die ("Failed to save data at the server");  echo "Store data in the cache (data will expire in 10 seconds)\n";  $get_result = $memcache->get('key');  echo "Data from the cache:\n";  var_dump($get_result);  運行結果顯示:Notice: MemcachePool::getversion(): Server 127.0.0.1 (tcp 11211, udp 0) failed with: Network timeout (0) in /alidata/hualian_ezhan/test.php on line 7Server's version: 
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

Memcached存儲單個item最大數據是在1MB內,如果數據超過1M,存取set和get是都是返回false,而且引起性能的問題。

我們之前對排行榜的數據進行緩存,由于排行榜在我們所有sql select查詢里面占了30%,而且我們排行榜每小時更新一次,所以必須對數據做緩存。為了清除緩存方便,把所有的用戶的數據放在同一key中,由于memcached:set的時候沒有壓縮數據。在測試服測試的時候,沒發現問題,當上線的時候,結果發現,在線人數剛剛490人的時候,服務器load average飄到7.9。然后我們去掉緩存,一下子就下降到0.59。

所以Memcahce不適合緩存大數據,超過1MB的數據,可以考慮在客戶端壓縮或拆分到多個key中。大的數據在進行load和uppack到內存的時候需要花很長時間,從而降低服務器的性能。

Memcached支持最大的存儲對象為1M。這個值由其內存分配機制決定的。

memcached默認情況下采用了名為Slab Allocator的機制分配、管理內存。在該機制出現以前,內存的分配是通過對所有記錄簡單地進行malloc和free來進行的。但是,這種方式會導致內存碎片,加重操作系統內存管理器的負擔,最壞的情況下,會導致操作系統比memcached進程本身還慢。Slab Allocator就是為解決該問題而誕生的。Slab Allocator的基本原理是按照預先規定的大小,將分配的內存分割成特定長度的塊,以完全解決內存碎片問題.

今天(2012-03-16)我們重新測試了memcached ::set的數據大小??赡苁俏覀冇胮hp的memcached擴展是最新版,set數據的時候是默認壓縮的。set 數據:

$ac = new memcahed();
$data = str_repeat('a', 1024* 1024); //1M的數據
$r = $ac->set('key', $data, 9999);
//或者
$data = str_repeat('a', 1024* 1024*100);//100M的數據
$r = $ac->set('key', $data, 9999);
不論是1M的數據還是100M的數據,都能set成功。后來我發現,memcachedset數據的時候是默認壓縮的。由于這個這個是重復的字符串,壓縮率高達1000倍。因此100M的數據壓縮后實際也就100k而已。

當我設置:

$ac->setOption(memcahed::OPT_COMPRESSION,0); //不壓縮存儲數據。
$data = str_repeat('a', 1024* 1024); //1M數據
$r = $ac->set('key', $data, 9999);//1M的數據set不成功。
也就是說memcached server不能存儲超過1M的數據,但是經過客戶端壓縮數據后,只要小于1M的數據都能存儲成功。

memcached相關知識:

1、memcached的基本設置 
1)啟動Memcache的服務器端 
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

-d選項是啟動一個守護進程, 
-m是分配給Memcache使用的內存數量,單位是MB,我這里是10MB, 
-u是運行Memcache的用戶,我這里是root, 
-l是監聽的服務器IP地址,如果有多個地址的話,我這里指定了服務器的IP地址192.168.0.200, 
-p是設置Memcache監聽的端口,我這里設置了12000,最好是1024以上的端口, 
-c選項是最大運行的并發連接數,默認是1024,我這里設置了256,按照你服務器的負載量來設定, 
-P是設置保存Memcache的pid文件,我這里是保存在 /tmp/memcached.pid,

2)如果要結束Memcache進程,執行:

# kill `cat /tmp/memcached.pid`

哈希算法將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該

段落的一個字母,隨后的哈希都將產生不同的值。要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的。

2、適用memcached的業務場景?

1)如果網站包含了訪問量很大的動態網頁,因而數據庫的負載將會很高。由于大部分數據庫請求都是讀操作,那么memcached可以顯著地減小數據庫負載。

2)如果數據庫服務


查看完整回答
反對 回復 2023-04-05
  • 1 回答
  • 0 關注
  • 206 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號