After writing in this blog on Microsoft AppFabric Cache and Redis, I will be following up with Memcached. Similarly to above mentioned systems, Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering. Just like them its nded for use in speeding up dynamic web applications by alleviating database load.
Memcached was originally developed by Danga Interactive for LiveJournal, but is now used by many other systems, including MocoSpace,YouTube,Reddit, Facebook, Tumblr and Wikipedia.Engine Yard and Jelastic are using Memcached as part of their platform as a service technology stack and Heroku offers several Memcached services as part of their platform as a service. Google App Engine, AppScale, Microsoft Azure and Amazon Web Services also offer a Memcached service through an API.
So Why Memcached?
- Free & Open source
- High performance
- Simple to set up
- Ease of development
- APIs are available for most popular languages
Important to note what Memcached is NOT:
- a persistent data store
- a database
- a large object cache
- fault-tolerant or
- highly available
Memcached’ primary storage algorithm is a hash table.
Hash table is basically an power of 2 sized array of pointers to entries. Collisions in the hash table are resolved via separate chaining with linked chains of entries: each entry consists of the pointer to the key, a pointer to the value and the pointer to the next chained entry. ash table size is chosen simpy as the ceiling power of 2, closest to the doubled number of entries the hash table need to contain. This means effective load factor varies from 0.5 to 1.0 with average of 0.75. In that order, the same load factor management strategy is implemented in glibc’s unordered_map.
Memcached supports multithreaded access to the store. It controls access to the resources via bare POSIX thread mutexes. Operations with hash table buckets are guarded with one of the pthread_mutex objects in the power-of-two sized array. Size of this array couldn’t be smaller than hash table size. Index of the mutex for the bucket is determined as bucket index % bucket mutex array size. I. e. each mutex is responsible for hash table size / bucket mutex array size buckets.
Installing Memcached on Ubuntru – really easy.
To install Memcached on Ubuntu, go to terminal and type the following commands −
$sudo apt-get update $sudo apt-get install memcached
Once installed Memcached should be running on default port -11211. To check if Memcached is presently running or not, run the command given below
$ps aux | grep memcached
Memcached is originally a Linux application, but since it is open-source, it has been compiled for windows. There are two major sources for the pre-built windows binary: Jellycan and Northscale, and both versions can be used. The following are the download links for the memcached windows binaries:
Full tutorial to install Memcached on Windows available here – https://commaster.net/content/installing-memcached-windows
To connect to a Memcached server, you need to use telnet command providing HOST name and PORT number.
Using basic TelNet
$telnet HOST PORT
Here, HOST and PORT are machine IP and port number respectively, on which the Memcached server is running.
Here I will connect to local Memcached running on default port and execute basic set and get commands:
$telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. // now store some data and get it from memcached server set test 0 900 9 memcached STORED get test VALUE tutorialspoint 0 9 memcached END
Popular basic CLI commands
|get||Reads value based on key||get mykey|
|set||Set a key unconditionally||set mykey 0 60 5
0 = > no flags
60 => TTL in [s]
5 => size in byte
|add||Adds a key||add newkey 0 60 5|
|replace||Replaces key||replace mykey 0 60 5|
|delete||Deletes an existing key||delete mykey|
See details on these and other commands here – http://blog.elijaa.org/2010/05/21/memcached-telnet-command-summary/
In the near future I will go more in detail on Memcached, including available clients, configuration, Java development with clients and AWS ElastiCache implementation. For now, you can also explore more here – https://memcached.org/, https://smarttechie.org/2013/07/20/memcached-a-distributed-memory-object-caching-system/, http://code.tutsplus.com/tutorials/turbocharge-your-website-with-memcached–net-23939, and https://wincent.com/wiki/Testing_memcached_with_telnet
Hope this helps.