當前位置:首頁 » 文件管理 » memcache緩存

memcache緩存

發布時間: 2022-02-04 07:05:30

① memcache緩存的是什麼數據又是怎麼寫入的呢

mysql 通常是有一個主鍵,一行記錄里有一個可以標注"身份"的值。
mc 是 kv 形式的內存資料庫,使用mc的意義就是高速讀取,防止對mysql的讀取量過大造成各種問題。存mc時候通常把mysql的主鍵作為key,value可以是一個數據(mysql的一行做一個關聯數據),也可以把mysql的一條記錄做json_encode,當作一個string進行緩存。

② 你使用過 Memcache 緩存嗎如果使用過,能夠簡單的描述一下它的工作原理嗎

首先 memcached 是以守護程序方式運行於一個或多個伺服器中,隨時接受客戶端的連接操作,客戶端可以由各種語言編寫,目前已知的客戶端 API 包括 Perl/php/Python/Ruby/Java/C#/C 等等。PHP 等客戶端在與 memcached 服務建立連接之後,接下來的事情就是存取對象了,每個被存取的對象都有一個唯一的標識符 key,存取操作均通過這個 key 進行,保存到 memcached 中的對象實際上是放置內存中的,並不是保存在 cache 文件中的,這也是為什麼PHP內存緩存技術memcached 能夠如此高效快速的原因。注意,這些對象並不是持久的,服務停止之後,里邊的數據就會丟失。

③ 怎麼合理的使用memcache緩存如果緩存數據量過大怎麼部署

這個,你不能這么問的,太籠統了。要看你的具體環境以及需求的。
現在部署方案有兩種對立但是又都比較常用的。jimmyyem1的是一種,另外一種就是提倡不要集中部署memcached,而是分布在不同的機器上的。例如所有的web和db伺服器都分1G出來給memcache,這樣的話,如果down掉一台機器不至於損失所有的緩存效果。而只部署在一台上的話,如果這台伺服器down了,整個memcache就都不工作了。當然,部署在多台伺服器上也會帶來管理不便等方面的問題。

④ memcache緩存命中率有多高

舉個栗子啊。你的mc保存用戶信息,現在有兩個用戶,id為1,2。mc中的key就是用戶id。
你用id=1從mc中獲取一個用戶信息,這個時候mc命中率是 100%;
這個時候你的伺服器重啟了一次,mc裡面的數據都沒了,你再用id=1從mc中獲取用戶信息,取不到了,此時mc命中率是50%。
命中率是 get成功/get總次數 ,就是一個成功率。
一般的做法是如果從mc取不到信息了,就從資料庫里取信息然後寫到mc里,以避免下次獲取信息的時

⑤ memcache怎樣清除緩存兩種方法

memcache確實是一個加速很好的緩存器,什麼都可以緩存~
——方法一——-cmd上直接清除,【清除所有緩存】
$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
flush_all
OK
quit
Connection to localhost closed by foreign host.

——方法二——-PHP清理緩存方法
<?php
$memcache = new Memcache;
$memcache->connect(『localhost』, 11211) or die (「Could not connect」);
$version = $memcache->getVersion();
echo 」Server』s version: 」.$version.」
\n」;
?>
<?php
$memcache = new Memcache;
$memcache->connect(『localhost』, 11211) or die (「Could not connect」);
print_r($memcache->getStats());
/**
* Array
* (
* [pid] => 8052
* [uptime] => 9205
* [time] => 1205898428
* [version] => 1.2.5 www.shellsec.com
* [pointer_size] => 32
* [rusage_user] => 0.008000
* [rusage_system] => 0.000000
* [curr_items] => 1
* [total_items] => 17
* [bytes] => 57
* [curr_connections] => 2
* [total_connections] => 15
* [connection_structures] => 3
* [cmd_get] => 9
* [cmd_set] => 23
* [get_hits] => 5
* [get_misses] => 4
* [evictions] => 0
* [bytes_read] => 671
* [bytes_written] => 850
* [limit_maxbytes] => 10485760
* [threads] => 1
* )
*/
?>
<?php
$memcache = new Memcache;
$memcache->connect(『localhost』, 11211) or die (「Could not connect」);
$memcache->set( 』name』, 』leo』, 0, 30);
if(!$memcache->add( 』name』, 』susan』, 0, 30))
{
echo 』susan is exist』;
};
$memcache->replace( 』name』, 』lion』, 0, 300);
echo $memcache->get( 』name』);
$memcache->delete( 』name』, 5);
?>
<?php
function _callback_memcache_failure($host, $port) {
print 」memcache 』$host:$port』 failed」;
}
$memcache = new Memcache;
$memcache->addServer(』192.168.1.116′, 11211);
$memcache->setServerParams(』192.168.1.116′, 11211, 1, 15, true,

『_callback_memcache_failure』);
echo $memcache->getServerStatus(』192.168.1.116′, 11211);
?>
<?php
$memcache = new Memcache;
$memcache->connect(『localhost』, 11211);
$memcache->set(『test_item』, 8);
$memcache->increment(『test_item』, 4);
echo $memcache->decrement(『test_item』, 7);
// 顯示 5
?>

/usr/local/bin/memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256 -P
/tmp/memcached.pid
memcached的服務正式啟動
Memcache::add — 添加一個值,如果已經存在,則返回false
Memcache::addServer — 添加一個可供使用的伺服器地址
Memcache::close — 關閉一個Memcache對象
Memcache::connect — 創建一個Memcache對象
memcache_debug — 控制調試功能
Memcache::decrement — 對保存的某個key中的值進行減法操作
Memcache::delete — 刪除一個key值
Memcache::flush — 清除所有緩存的數據
Memcache::get — 獲取一個key值
Memcache::getExtendedStats — 獲取進程池中所有進程的運行系統統計
Memcache::getServerStatus — 獲取運行伺服器的參數
Memcache::getStats — 返回伺服器的一些運行統計信息
Memcache::getVersion — 返回運行的Memcache的版本信息
Memcache::increment — 對保存的某個key中的值進行加法操作
Memcache::pconnect — 創建一個Memcache的持久連接對象
Memcache::replace — R對一個已有的key進行覆寫操作
Memcache::set — 添加一個值,如果已經存在,則覆寫
Memcache::setCompressThreshold — 對大於某一大小的數據進行壓縮
Memcache::setServerParams — 在運行時修改伺服器的參數
建議用面向對象的方式來測試這個庫:
Memcache::getVersion方法的作用是返回運行的Memcache的版本信息。
Memcache::getStats 方法的作用是返回伺服器的一些運行統計信息。Memcache::getStats方法有三個參
數,第一個參數表示要求返回的類型:reset, malloc, maps, cachemp, slabs, items, sizes;第二個
參數和第三個參數是在第一個參數設置為「cachemp」時使用的。Memcache::getExtendedStats方法的
作用是獲取進程池中所有進程的運行系統統計。
Memcache::connect方法的作用是創建一個Memcache對象。Memcache::pconnect方法的作用是創建一個
Memcache的持久連接對象。Memcache::close方法的作用是關閉一個Memcache對象。
Memcache::set 方法的作用是添加一個值,Memcache::set方法有四個參數,第一個參數是key,第二個參
數是value,第三個參數可選,表示是否壓縮保存,第四個參數可選,用來設置一個過期自動銷毀的時間
。Memcache::add方法的作用和Memcache::set方法類似,區別是如果 Memcache::add方法的返回值為
false,表示這個key已經存在,而Memcache::set方法則會直接覆寫。 Memcache::get方法的作用是獲取
一個key值,Memcache::get方法有一個參數,表示key。Memcache::replace 方法的作用是對一個已有的
key進行覆寫操作,Memcache::replace方法有四個參數,作用和Memcache::set方法的相同。
Memcache::delete方法的作用是刪除一個key值,Memcache::delete方法有兩個參數,第一個參數表示key
,第二個參數可選,表示刪除延遲的時間。
memcache_debug()函數的作用是控制調試功能,前提是php在編譯的時候使用了–enable-debug選項,否
則這個函數不會有作用。
Memcache::addServer 方法的作用是添加一個可供使用的伺服器地址,Memcache::addServer方法有8個參
數,除了第一個參數意外,其他都是可選的,第一個參數表示伺服器的地址,第二個參數表示埠,第三
個參數表示是否是一個持久連接,第四個參數表示這台伺服器在所有伺服器中所佔的權重,第五個參數表
示連接的持續時間,第六個參數表示連接重試的間隔時間,默認為15,設置為-1表示不進行重試,第七個
參數用來控制伺服器的在線狀態,第8個參數允許設置一個回掉函數來處理錯誤信息。
Memcache::setServerParams方法的作用是在運行時修改伺服器的參數,Memcache::setServerParams方法
有六個參數,Memcache::addServer方法少了第三和第四個參數。 Memcache::getServerStatus方法的作
用是獲取運行伺服器的參數,兩個參數分別表示的地址和埠。
Memcache::flush方法的作用是清除所有緩存的數據,但是不會削去使用的內存空間。
Memcache::increment方法的作用是對保存的某個key中的值進行加法操作,Memcache::decremen方法的作
用是對保存的某個key中的值進行減法操作。

⑥ memcache緩存命中率是什麼意思

你好
很高興為您解答
命中:直接從緩存中讀取到想要的數據。
不命中:緩存中沒有想要的數據,還需要到資料庫進行一次查詢才能讀取到想要的數據。
滿意採納下

⑦ memcache緩存 如何實現php

php實現memcache緩存示例講解

共享內存是一種在相同機器中的應用程序之間交換數據的有效方式,本文說的是php實現memcache緩存示例,大家參考使用吧

概述
共享內存是一種在相同機器中的應用程序之間交換數據的有效方式。一個進程可創建一個可供其他進程訪問的內存段,只要它分配了正確的許可權。每個內存段擁有一個惟一的 ID(稱為 shmid),這個 ID 指向一個物理內存區域,其他進程可在該區域操作它。創建並提供了合適的許可權之後,同一台機器中的其他進程就可以操作這些內存段:讀取、寫入和刪除。
這表明使用 C 語言編寫的應用程序可與使用其他語言(比如 Java™ 或 PHP)編寫的應用程序共享信息。它們都可以共享信息,只要它們可訪問和理解該信息。共享內存在針對大部分語言的實現中得到了廣泛使用,所以訪問應該不是問題。要理解信息,我們可以使用一種標准格式,比如 XML 或 JSON。
共享內存的使用是一種在進程之間交換數據的快速方法,主要因為在創建內存段之後傳遞數據,不會涉及內核。這種方法常常稱為進程間通信 (IPC)。其他 IPC 方法包括管道、消息隊列、RPC 和套接字。當使用需要彼此通信的應用程序的生態系統時,這種在應用程序之間快速、可靠地交換數據的能力非常有用。取決於生態系統的大小,使用資料庫在應用程序之間交換信息的常用方法常常會導致查詢緩慢,甚至 I/O 阻塞。使用共享內存,沒有 I/O 會減緩開發人員的進度。
本文的提議非常簡單,學習如何使用 PHP 創建和操作共享內存段,使用它們存儲可供其他應用程序使用的數據集。即使沒有使用共享內存交換數據的計劃,它本身也在許多好處,因為它使應用程序能夠遠離 I/O 問題。將數據集直接存儲在內存中具有諸多優勢,從 Web 服務數據緩存到會話共享。它是一個非常有用的概念,每個 PHP 開發人員都應該知道。
共享內存和 PHP
PHP 擁有豐富的可用擴展,共享內存也一樣。使用一些共享的函數,無需安裝任何擴展,開發人員就能夠輕松操作內存段。
創建內存段
共享內存函數類似於文件操作函數,但無需處理一個流,您將處理一個共享內存訪問 ID。第一個示例就是 shmop_open 函數,它允許您打開一個現有的內存段或創建一個新內存段。此函數非常類似於經典的 fopen 函數,後者打開用於文件操作的流,返回一個資源供其他希望讀取或寫入該打開的流的函數使用。讓我們看看清單 1 中的 shmop_open。
清單 1. shmop_open 函數

復制代碼代碼如下:

<?php
$systemid = 864; // System ID for the shared memory segment
$mode = "c"; // Access mode
$permissions = 0755; // Permissions for the shared memory segment
$size = 1024; // Size, in bytes, of the segment

$shmid = shmop_open($systemid, $mode, $permissions, $size);
?>

該函數中出現的第一個事物是系統 ID 參數。這是標識系統中的共享內存段的數字。第二個參數是訪問模式,它非常類似於 fopen 函數的訪問模式。您可以在 4 種不同的模式下訪問一個內存段:
•模式 「a」,它允許您訪問只讀內存段
•模式 「w」,它允許您訪問可讀寫的內存段
•模式 「c」,它創建一個新內存段,或者如果該內存段已存在,嘗試打開它進行讀寫
•模式 「n」,它創建一個新內存段,如果該內存段已存在,則會失敗
第三個參數是內存段的許可權。您必須在這里提供一個八進制值。
第四個參數提供內存段大小,以位元組為單位。在寫入一個內存段之前,您必須在它之上分配適當的位元組數。
請注意,此函數返回一個 ID 編號,其他函數可使用該 ID 編號操作該共享內存段。這個 ID 是共享內存訪問 ID,與系統 ID 不同,它以參數的形式傳遞。請注意不要混淆這兩者。如果失敗,shmop_open 將返回 FALSE。
向內存段寫入數據
使用 shmop_write 函數向共享內存塊寫入數據。此函數的使用很簡單,它僅接受 3 個參數,如清單 2 所示。
清單 2. 使用 shmop_write 向共享內存塊寫入數據

復制代碼代碼如下:

<?php

$shmid = shmop_open(864, 'c', 0755, 1024);
shmop_write($shmid, "Hello World!", 0);
?>

這個函數類似於 fwrite 函數,後者有兩個參數:打開的流資源(由 fopen 返回)和您希望寫入的數據。shmop_write 函數也執行此任務。
第一個參數是 shmop_open 返回的 ID,它識別您操作的共享內存塊。第二個參數是您希望存儲的數據,最後的第三個參數是您希望開始寫入的位置。默認情況下,我們始終使用 0 來表示開始寫入的位置。請注意,此函數在失敗時會返回 FALSE,在成功時會返回寫入的位元組數。

從內存段讀取數據
從共享內存段讀取數據很簡單。您只需要一個打開的內存段和 shmop_read 函數。此函數接受一些參數,工作原理類似於 fread。參見清單 3,讀取一個 PHP 文件的內容。
清單 3. 使用 shmop_read 讀取一個文件的內容

復制代碼代碼如下:

<?php

$stream = fopen('file.txt', 'r+');
fwrite($stream, "Hello World!");
echo fread($stream, 11);
?>

讀取共享內存段的內容的過程與此類似,如清單 4 所示:
清單 4. 讀取共享內存段的內容

復制代碼代碼如下:

<?php

$shmid = shmop_open(864, 'c', 0755, 1024);
shmop_write($shmid, "Hello World!", 0);
echo shmop_read($shmid, 0, 11);
?>

請留意這里的參數。shmop_read 函數將接受 shmop_open 返回的 ID,我們已知道它,不過它還接受另外兩個參數。第二個參數是您希望從內存段讀取的位置,而第三個是您希望讀取的位元組數。第二個參數可以始終為 0,表示數據的開頭,但第三個參數可能存在問題,因為我們不知道我們希望讀取多少位元組。
這非常類似於我們在 fread 函數中的行為,該函數接受兩個參數:打開的流資源(由 fopen 返回)和您希望從該流讀取的位元組數。使用filesize 函數(它返回一個文件中的位元組數)來完整地讀取它。
幸運的是,當使用共享內存段時,shmop_size 函數返回一個內存段的大小(以位元組為單位),類似於 filesize 函數。參見清單 5。
清單 5. shmop_size 函數返回內存段大小,以位元組為單位

復制代碼代碼如下:

<?php

$shmid = shmop_open(864, 'c', 0755, 1024);
shmop_write($shmid, "Hello World!", 0);
$size = shmop_size($shmid);
echo shmop_read($shmid, 0, $size);
?>

回頁首
刪除內存段
我們學習了如何打開、寫入和讀取共享內存段。要完成我們的 CRUD 類,我們還需要學習如何刪除內存段。該任務可使用 shmop_delete 函數輕松完成,該函數僅接受一個參數:我們希望刪除的共享內存 ID。
清單 6. shmop_delete 標記要刪除的內存段

復制代碼代碼如下:

<?php

$shmid = shmop_open(864, 'c', 0755, 1024);
shmop_write($shmid, "Hello World!", 0);
shmop_delete($shmid);
?>

這不會實際刪除該內存段。它將該內存段標記為刪除,因為共享內存段在有其他進程正在使用它時無法被刪除。shmop_delete 函數將該內存段標記為刪除,阻止任何其他進程打開它。要刪除它,我們需要關閉該內存段。
關閉內存段
打開一個共享內存段會 「附加」 到它。附加該內存段之後,我們可在其中進行讀取和寫入,但完成操作後,我們必須從它解除。這使用清單 7 中的 shmop_close 函數來完成。
這非常類似於處理文件時的 fclose 函數。打開包含一個文件的流並在其中讀取或寫入數據後,我們必須關閉它,否則將發生鎖定。
清單 7. 使用 shmop_close 與一個內存段分開

復制代碼代碼如下:

<?php

$shmid = shmop_open(864, 'c', 0755, 1024);
shmop_write($shmid, "Hello World!", 0);
shmop_delete($shmid);
shmop_close($shmid);
?>

使用共享內存作為一個存儲選項
有了共享內存和共享內存段上基本 CRUD 操作的基本知識,是時候應用此知識了。我們可以使用共享內存作為一種獨特的存儲選項,提供快速讀/寫操作和進程互操作性等優勢。對於 Web 應用程序,這意味著:
•緩存存儲(資料庫查詢、Web 服務數據、外部數據)
•會話存儲
•應用程序之間的數據交換
在繼續之前,我想介紹一個名為 SimpleSHM 小型庫。SimpleSHM 是一個較小的抽象層,用於使用 PHP 操作共享內存,支持以一種面向對象的方式輕松操作內存段。在編寫使用共享內存進行存儲的小型應用程序時,這個庫可幫助創建非常簡潔的代碼。要了解 SimpleSHM,請訪問GitHub 頁面。
您可以使用 3 個方法進行處理:讀、寫和刪除。從該類中簡單地實例化一個對象,可以控制打開的共享內存段。清單 8 展示了基本用途。
清單 8. SimpleSHM 基本用途

復制代碼代碼如下:

<?php

$memory = new SimpleSHM;
$memory->write('Sample');
echo $memory->read();
?>

請注意,這里沒有為該類傳遞一個 ID。如果沒有傳遞 ID,它將隨機選擇一個編號並打開該編號的新內存段。我們可以以參數的形式傳遞一個編號,供構造函數打開現有的內存段,或者創建一個具有特定 ID 的內存段,如清單 9 所示。
清單 9. 打開一個特定的內存段

復制代碼代碼如下:

<?php

$new = new SimpleSHM(897);
$new->write('Sample');
echo $new->read();
?>

神奇的方法 __destructor 負責在該內存段上調用 shmop_close 來取消設置對象,以與該內存段分離。我們將這稱為 「SimpleSHM 101」。現在讓我們將此方法用於更高級的用途:使用共享內存作為存儲。存儲數據集需要序列化,因為數組或對象無法存儲在內存中。盡管這里使用了 JSON 來序列化,但任何其他方法(比如 XML 或內置的 PHP 序列化功能)也已足夠。清單 10 給出了一個示例。
清單 10. 使用共享內存作為存儲

復制代碼代碼如下:

<?php

require('SimpleSHM.class.php');
$results = array(
'user' => 'John',
'password' => '123456',
'posts' => array('My name is John', 'My name is not John')
);
$data = json_encode($results);
$memory = new SimpleSHM;
$memory->write($data);
$storedarray = json_decode($memory->read());
print_r($storedarray);
?>

我們成功地將一個數組序列化為一個 JSON 字元串,將它存儲在共享內存塊中,從中讀取數據,去序列化 JSON 字元串,並顯示存儲的數組。這看起來很簡單,但請想像一下這個代碼片段帶來的可能性。您可以使用它存儲 Web 服務請求、資料庫查詢或者甚至模板引擎緩存的結果。在內存中讀取和寫入將帶來比在磁碟中讀取和寫入更高的性能。
使用此存儲技術不僅對緩存有用,也對應用程序之間的數據交換也有用,只要數據以兩端都可讀的格式存儲。不要低估共享內存在 Web 應用程序中的力量。可採用許多不同的方式來巧妙地實現這種存儲,惟一的限制是開發人員的創造力和技能

⑧ 如何改變memcached默認的緩存時間

至於設置一個UNIX時間戳或 以秒為單位的整數(從當前算起的時間差)來說明此數據的過期時間,但是在後一種設置方式中,不能超過 2592000秒(30天)的問題我們該怎麼辦呢?我們不想設置為永久有效,但是也不想再限制在30天內。那麼方法來了,這里就以官方文檔的代碼為示例代碼,如下。
<?php
$memcache_obj = memcache_connect(「localhost」, 11211);
/* 面向過程編程 API */
memcache_add($memcache_obj, 'var_key', 'test variable', false, 0);// 永久有效
/* 面向對象編程 API */
$memcache_obj->add(『var_key', 'test variable', false, time()+24*60*60*30);// 超過30天
?>

⑨ memcache中怎麼緩存文件

首先明確,memcache是作為高速緩存使用的。

那麼,到底怎樣才能獲得高速的響應呢?當然如果是簡單處理的話,利用關系型資料庫的索引也能獲得高速響應。雖然memcached會更快一些,但如果合理地使用索引,關系型資料庫就足夠快了。
但是如果要對多個表的數據進行計算,情況又會怎樣呢?若使用關系型資料庫,我們需要從每個表中取出數據然後進行最後的組合處理,或者每次都要使用JOIN等處理。雖然我們可以通過事前用批處理製作數據來解決這個問題,但是這樣又會增加需要管理的表,花費我們更多的精力。

熱點內容
pascal有哪些編譯器 發布:2024-12-28 02:16:45 瀏覽:97
雲存儲錄像機 發布:2024-12-28 02:16:36 瀏覽:205
hp伺服器如何裝系統 發布:2024-12-28 02:12:14 瀏覽:155
python3utf8 發布:2024-12-28 02:12:07 瀏覽:641
安卓微信現在怎麼掃碼登錄 發布:2024-12-28 02:07:15 瀏覽:942
中國系統安卓蘋果還有什麼 發布:2024-12-28 01:59:28 瀏覽:341
這里的秘密碼是多少 發布:2024-12-28 01:58:07 瀏覽:481
rce訪問 發布:2024-12-28 01:57:58 瀏覽:478
java工程師招生 發布:2024-12-28 01:49:23 瀏覽:603
卡管家源碼 發布:2024-12-28 01:47:56 瀏覽:447