MEMCACHED
'memcached' is a general-purpose distributed memory caching system that was originally developed by Danga Interactive for LiveJournal, but is now used by many other sites. It is often used to speed up dynamic database-driven websites by caching data and objects in memory to reduce the amount the database needs to be read. Memcached is distributed under a permissive free software licence[1]
Memcached lacks authentication and security features, meaning it should only be used on servers with a firewall set up appropriately. By default, memcached uses the port 11211. Among other technologies, it uses libevent.
Memcached's APIs provide a giant hash table distributed across multiple machines. When the table is full, subsequent inserts cause older data to be purged in least recently used (LRU) order. Applications using memcached typically layer memcached requests and additions into code before falling back on a slower backing store, such as a database.
The system is used by several very large, well-known sites including LiveJournal, Slashdot, Wikipedia, SourceForge, GameFAQs, Facebook, Digg, Fotolog, and Kayak.[2]
| Contents |
| Example code |
| References |
| External links |
Example code
Converting a database or object creation queries to use memcached is simple. Typically, when using straight database queries, an example code might look like the following:
function get_foo (int userid) {
result = db_select("SELECT
★ FROM users WHERE userid = ?", userid);
return result;
}
After conversion to memcached, the same call might look like the following
function get_foo (int userid) {
result = memcached_fetch("userrow:" + userid);
if (!result) {
result = db_select("SELECT
★ FROM users WHERE userid = ?", userid);
memcached_add("userrow:" + userid, result);
}
return result;
}
The server would first check whether a memcached value with the unique key "userrow:userid" exists, where userid is some number. If the result does not exist, it would select from the database as usual, and set the unique key using the memcached API add function call.
However, if only this API call would be modified, and no others, the server would eventually end up fetching incorrect data (assuming the entire database doesn't fit into the memory caching available). In addition to creating an "add" call, an update call would be also needed, using the memcached set function.
function update_foo(int userid, string dbUpdateString) {
result = db_execute(dbUpdateString);
if (result) {
data = createUserDataFromDBString(dbUpdateString);
memcached_set("userrow:"+userid, data);
}
}
This call would update the currently cached data to match the new data in the database, assuming the database query succeeds. An alternative approach would be to invalidate the cache with the memcached delete function, so that subsequent fetches result in a cache miss.
Note that all functions described on this page are pseudocode only. Memcached calls and programming languages may vary based on the used API.
References
1.
2. Who's using memcached?
External links
★ memcached wiki and faq
★
★ Win32 memcached port
★ Memcached ASP.net Provider
★ Using memcached with PHP
★ Java memcached port
★ Ruby Memcache client
★ Python memcached port
★ Perl memcached client module Cache::Memcached
★ memcached storage engine for MySQL
★ pgmemcached - API for PostgreSQL
★ Univca - opensource C++ framework derived from memcached
★ memcachefs: a memcache filesystem using FUSE
This article provided by Wikipedia. To edit the contents of this article, click here for original source.
psst.. try this: add to faves

العربية
中国
Français
Deutsch
Ελληνική
हिन्दी
Italiano
日本語
Português
Русский
Español



