Gyorsítótárban

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. december 20-án felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .

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.

Mintakód

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.

Jegyzetek

  1. InfoQ: JGroups A memcached támogatások feladatátvétel és JMX megvalósítása
  2. Kiadás 1.6.17 - 2022.
  3. https://github.com/memcached/memcached/blob/1.5.9/LICENSE

Linkek