Muistissa

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 20. joulukuuta 2021 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .

muistissa
Tyyppi kätkö
Kehittäjä Danga Interactive [d]
Sisään kirjoitettu C [1]
Käyttöjärjestelmä cross-platform
Ensimmäinen painos 22. toukokuuta 2003
uusin versio
Lisenssi muutettu BSD-lisenssi [d] [3]
Verkkosivusto memcached.org

Memcached  on ohjelmisto , joka toteuttaa hajautustaulukkoon perustuvan muistin välimuistipalvelun .

Asiakaskirjaston avulla ( C / C++ , Ruby , Perl , PHP , Python , Java , .Net jne.) voit tallentaa tietoja monien käytettävissä olevien palvelimien RAM-muistiin . Jakelu toteutetaan segmentoimalla tiedot avaimen hash-arvon mukaan, samoin kuin hash-taulukon pistokkeet. Asiakaskirjasto laskee hajautusarvon dataavaimen avulla ja valitsee sen avulla sopivan palvelimen. Palvelinvikatilanne tulkitaan välimuistin puutteeksi, mikä mahdollistaa kompleksin vikasietoisuuden lisäämisen lisäämällä välimuistissa olevien palvelimien määrää ja kykyä vaihtaa niitä.

Välimuistissa olevalla API:lla on vain perustoiminnot: palvelimen valinta, yhteyden luominen ja katkaiseminen, objektin lisääminen, poistaminen, päivittäminen ja hankkiminen sekä Vertaa ja-vaihto . Jokaiselle esineelle asetetaan elinikä 1 sekunnista äärettömään. Kun muisti loppuu, vanhemmat objektit poistetaan automaattisesti. PHP : lle on olemassa myös valmiita PECL - kirjastoja memcachedin kanssa työskentelyä varten, jotka tarjoavat lisätoimintoja.

Memcached käyttää oletusarvoisesti porttia 11211.

Esimerkkikoodi

Huomaa, että kaikki tässä osiossa kuvatut toiminnot on kirjoitettu pseudokoodilla . Memcachedin kutsumisen syntaksi voi vaihdella käytetyn ohjelmointikielen ja API:n mukaan.

Tietokantakysely (ilman memcachedia) saattaa näyttää seuraavalta esimerkiltä:

function get_foo ( int käyttäjätunnus ) { tulos = db_select ( "SELECT * FROM käyttäjiltä WHERE käyttäjätunnus =?" , käyttäjätunnus ); palauttaa tuloksen ; }

Memcachedin käytön käyttöönoton jälkeen sama kutsu voi näyttää tältä (tästä eteenpäin käytetään pseudokoodia , memcachedin kutsumisen syntaksi voi vaihdella):

function get_foo ( int käyttäjätunnus ) { /* tarkista välimuisti ensin */ data = memcached_fetch ( "käyttäjä:" + käyttäjätunnus ); if ( ! data ) { /* ei löydy: kyselytietokanta */ data = db_select ( "SELECT * FROM käyttäjiltä WHERE käyttäjätunnus =?" , käyttäjätunnus ); /* tallentaa välimuistiin tulevia pyyntöjä varten */ memcached_add ( "käyttäjä:" + käyttäjätunnus , tiedot ); } palauttaa tiedot ; }

Palvelin tarkistaa ensin, tallentaako Memcached arvon ainutlaatuisella avaimella "userrow: userid", jossa käyttäjätunnus on jokin numero. Jos välimuisti ei sisällä tällaisia ​​tietoja, palvelin tekee kyselyn tietokannasta tavalliseen tapaan ja asettaa yksilöllisen avaimen käyttämällä kutsua memcached API:lle.

Jos kuitenkin käytetään vain tätä API-kutsua, palvelin voi palauttaa virheellisiä tietoja jokaisen tietokantapäivityksen jälkeen: Memcached tallentaa ja palauttaa vanhentuneet tiedot. Siksi välimuistin datan kutsun lisäksi tarvitaan myös päivitys:

function update_foo ( int käyttäjätunnus , merkkijono dbUpdateString ) { /* päivitä tietokanta ensin */ tulos = db_execute ( dbUpdateString ); if ( tulos ) { /* tietokannan päivitys valmis: valmistele tiedot välimuistin syöttöä varten */ data = db_select ( "SELECT * FROM käyttäjiltä WHERE käyttäjätunnus =?" , käyttäjätunnus ); /* viimeinen rivi voi myös näyttää tältä data = createDataFromDBString(dbUpdateString); */ /* välimuisti päivitetyt tiedot */ memcached_set ( "käyttäjä:" + käyttäjätunnus , data ); } }

Tämä puhelu päivittää välimuistissa olevat tiedot vastaamaan tietokannan uusia tietoja vain, jos tietokannan päivityspyyntö onnistuu. Toinen tapa on tyhjentää välimuisti tietylle avaimelle käyttämällä Memcached-toimintoa, jotta myöhempi puhelu ei löydä tietoja välimuistista ja kysy tietokannasta niitä. Samanlaisia ​​toimia tarvitaan, jos tietoja poistetaan tietokannasta, jotta välimuisti pysyy oikein tai osittain tyhjänä.

Muistiinpanot

  1. InfoQ: JGroups Memcached-tukien Failover- ja JMX-toteutus
  2. Julkaisu 1.6.17 - 2022.
  3. https://github.com/memcached/memcached/blob/1.5.9/LICENSE

Linkit