gyorsítótárban | |
---|---|
Típusú | gyorsítótár |
Fejlesztő | Danga Interactive [d] |
Beírva | C [1] |
Operációs rendszer | platformközi |
Első kiadás | 2003. május 22 |
legújabb verzió |
|
Engedély | módosított BSD licenc [d] [3] |
Weboldal | memcached.org |
A Memcached egy olyan szoftver , amely a memórián belüli adatgyorsítótárazási szolgáltatást valósítja meg egy hash tábla alapján .
Egy klienskönyvtár segítségével ( C / C++ , Ruby , Perl , PHP , Python , Java , .Net stb. esetén) lehetővé teszi számos elérhető szerver RAM-jában tárolt adatok gyorsítótárát . Az elosztás az adatok szegmentálásával valósul meg a kulcs hash értéke szerint, hasonlóan a hash tábla socketekhez. Az ügyfélkönyvtár az adatkulcs segítségével kiszámítja a hash-t, és ennek alapján választja ki a megfelelő szervert. A szerverhiba helyzetet cache hiányként értelmezzük, ami lehetővé teszi a komplex hibatűrésének növelését a memcached szerverek számának és a hot-swap lehetőségének növelésével.
A memcached API-nak csak alapvető funkciói vannak: kiszolgáló kiválasztása, kapcsolat beállítása és megszakítása, objektumok hozzáadása, törlése, frissítése és beszerzése, valamint az Összehasonlítás és csere funkció . Minden objektumhoz egy élettartam van beállítva, 1 másodperctől a végtelenig. Ha a memória kimerül, a régebbi objektumok automatikusan törlődnek. A PHP számára kész PECL könyvtárak is vannak a memcached használatához, amelyek további funkciókat biztosítanak.
A Memcached alapértelmezés szerint az 11211-es portot használja.
Kérjük, vegye figyelembe, hogy az ebben a részben leírt összes függvény pszeudokódban van írva . A Memcached hívásának szintaxisa a használt programozási nyelvtől és API-tól függően eltérő lehet.
Egy adatbázis-lekérdezés (memcached használata nélkül) a következő példa szerint nézhet ki:
function get_foo ( int userid ) { result = db_select ( "SELECT * FROM users WHERE userid =?" , userid ); eredmény visszaadása ; }A memcached használatának bevezetése után ugyanaz a hívás így nézhet ki (a továbbiakban pszeudokódot használunk , a memcached meghívásának szintaxisa eltérhet):
function get_foo ( int userid ) { /* először ellenőrizze a gyorsítótárat */ adatok = memcached_fetch ( "felhasználó:" + felhasználói azonosító ); if ( ! adatok ) { /* nem található: lekérdezési adatbázis */ data = db_select ( "SELECT * FROM userid WHERE userid =?" , felhasználói azonosító ); /* tárolás a gyorsítótárban a jövőbeli kérésekhez */ memcached_add ( "felhasználó:" + felhasználói azonosító , adat ); } visszaküldeni az adatokat ; }A szerver először ellenőrzi, hogy a Memcached tárol-e egy értéket egyedi kulccsal: "userrow: userid", ahol a felhasználói azonosító valamilyen szám. Ha a gyorsítótár nem tartalmaz ilyen adatokat, a szerver a szokásos módon lekérdezi az adatbázist, és a memcached API hívásával egyedi kulcsot állít be.
Ha azonban csak ezt az API-hívást használja, a szerver hibás adatokat küldhet vissza minden adatbázis-frissítés után: A Memcached elavult adatokat tárol és tér vissza. Ezért az adatok gyorsítótárának hívása mellett frissítésre is szükség van:
function update_foo ( int userid , string dbUpdateString ) { /* először frissítse az adatbázist */ eredmény = db_execute ( dbUpdateString ); if ( eredmény ) { /* adatbázis frissítés befejezve: adatok előkészítése a gyorsítótár bejegyzéshez */ data = db_select ( "SELECT * FROM userid WHERE userid =?" , felhasználói azonosító ); /* az utolsó sor így is nézhet ki: data = createDataFromDBString(dbUpdateString); */ /* gyorsítótár frissített adatok */ memcached_set ( "felhasználó:" + felhasználói azonosító , adatok ); } }Ez a hívás csak akkor frissíti a gyorsítótárazott adatokat, hogy megfeleljenek az adatbázisban lévő új adatoknak, ha az adatbázis-frissítési kérelem sikeres. Egy másik megközelítés lehet az adott kulcs gyorsítótárának kiürítése a Memcached függvénnyel, hogy a következő hívás ne találja meg az adatokat a gyorsítótárban, és ne kérdezze le az adatbázist. Hasonló lépésekre van szükség az adatok adatbázisból való törlésekor, hogy a gyorsítótár helyes vagy részben üres maradjon.