- Install Memcached Server Windows
- Memcached 1.5 Windows
- Install Memcached Windows Server 2016
- Memcached Windows Server 2012
Developer(s) | Danga Interactive |
---|---|
Initial release | May 22, 2003 |
Stable release | |
Repository | |
Written in | C |
Operating system | Cross-platform |
Type | distributed memory caching system |
License | Revised BSD license[2] |
Website | memcached.org |
Memcached is a general-purpose distributed memory caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source must be read. Memcached is free and open-source software, licensed under the Revised BSD license. Memcached runs on Unix-like operating systems and on Microsoft Windows. Copy the.zip content to that directory. There should be one memcached.exe file by itself (32-bit) or with a couple of.dll files (64-bit) Open a command prompt (need to be opened as administrator). You can do this by going to StartSearch and type “cmd” Type the command “c:memcachedmemcached.exe -d start” to start the service.
Memcached (pronunciation: mem-cashed, mem-cash-dee) is a general-purpose distributed memory caching system. It is often used to speed up dynamic database-driven websites by caching data and objects in RAM to reduce the number of times an external data source (such as a database or API) must be read. Memcached is free and open-source software, licensed under the Revised BSD license.[2] Memcached runs on Unix-like operating systems (at least Linux and OS X) and on Microsoft Windows. It depends on the libevent library.
Memcached's APIs provide a very large 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.[3][4] Applications using Memcached typically layer requests and additions into RAM before falling back on a slower backing store, such as a database.
Memcached has no internal mechanism to track misses which may happen. However, some third party utilities provide this functionality.
Memcached was first developed by Brad Fitzpatrick for his website LiveJournal, on May 22, 2003.[5][6] It was originally written in Perl, then later rewritten in C by Anatoly Vorobey, then employed by LiveJournal.[7] Memcached is now used by many other systems, including YouTube,[8]Reddit,[9]Facebook,[10][11]Pinterest,[12][13]Twitter,[14]Wikipedia,[15] and Method Studios.[16]Google App Engine, Microsoft Azure, IBM Bluemix and Amazon Web Services also offer a Memcached service through an API.[17][18][19][20]
- 1Software architecture
- 1.1Security
Software architecture[edit]
The system uses a client–server architecture. The servers maintain a key–value associative array; the clients populate this array and query it by key. Keys are up to 250 bytes long and values can be at most 1 megabyte in size.
Clients use client-side libraries to contact the servers which, by default, expose their service at port 11211. Both TCP and UDP are supported. Each client knows all servers; the servers do not communicate with each other. If a client wishes to set or read the value corresponding to a certain key, the client's library first computes a hash of the key to determine which server to use. This gives a simple form of sharding and scalable shared-nothing architecture across the servers. The server computes a second hash of the key to determine where to store or read the corresponding value. The servers keep the values in RAM; if a server runs out of RAM, it discards the oldest values. Therefore, clients must treat Memcached as a transitory cache; they cannot assume that data stored in Memcached is still there when they need it. Other databases, such as MemcacheDB, Couchbase Server, provide persistent storage while maintaining Memcached protocol compatibility.
If all client libraries use the same hashing algorithm to determine servers, then clients can read each other's cached data.
A typical deployment has several servers and many clients. However, it is possible to use Memcached on a single computer, acting simultaneously as client and server. The size of its hash table is often very large. It is limited to available memory across all the servers in the cluster of servers in a data center. Where high-volume, wide-audience Web publishing requires it, this may stretch to many gigabytes. Memcached can be equally valuable for situations where either the number of requests for content is high, or the cost of generating a particular piece of content is high.
Security[edit]
Most deployments of Memcached are within trusted networks where clients may freely connect to any server. However, sometimes Memcached is deployed in untrusted networks or where administrators want to exercise control over the clients that are connecting. For this purpose Memcached can be compiled with optional SASL authentication support. The SASL support requires the binary protocol.
A presentation at BlackHat USA 2010 revealed that a number of large public websites had left Memcached open to inspection, analysis, retrieval, and modification of data.[21]
Even within a trusted organisation, the flat trust model of memcached may have security implications. For efficient simplicity, all Memcached operations are treated equally. Clients with a valid need for access to low-security entries within the cache gain access to all entries within the cache, even when these are higher-security and that client has no justifiable need for them. If the cache key can be either predicted, guessed or found by exhaustive searching, its cache entry may be retrieved.
Some attempt to isolate setting and reading data may be made in situations such as high volume web publishing. A farm of outward-facing content servers have read access to memcached containing published pages or page components, but no write access. Where new content is published (and is not yet in memcached), a request is instead sent to content generation servers that are not publicly accessible to create the content unit and add it to memcached. The content server then retries to retrieve it and serve it outwards.
Used as a DDoS attack vector[edit]
In February 2018, CloudFlare reported that misconfigured memcached servers were used to launch DDoS attacks in large scale.[22] The memcached protocol over UDP has a huge amplification factor, of more than 51000.[23] Victims of the DDoS attacks include GitHub, which was flooded with 1.35 Tbit/s peak incoming traffic.[24]
This issue was mitigated in Memcached version 1.5.6, which disabled UDP protocol by default.[25]
Example code[edit]
Note that all functions described on this page are pseudocode only. Memcached calls and programming languages may vary based on the API used.
Converting database or object creation queries to use Memcached is simple. Typically, when using straight database queries, example code would be as follows:
After conversion to Memcached, the same call might look like the following
The client 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 were modified, the server would end up fetching incorrect data following any database update actions: the Memcached 'view' of the data would become out of date. Therefore, in addition to creating an 'add' call, an update call would also be needed using the Memcached set function.
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. Similar action would need to be taken when database records were deleted, to maintain either a correct or incomplete cache.
An alternate cache-invalidation strategy is to store a random number in an agreed-upon cache entry and to incorporate this number into all keys that are used to store a particular kind of entry. To invalidate all such entries at once, change the random number. Existing entries (which were stored using the old number) will no longer be referenced and so will eventually expire or be recycled.
Usage[edit]
- MySQL - directly supports the Memcached API as of version 5.6.[26]
- Oracle Coherence - directly supports the Memcached API as of version 12.1.3.[27]
- GigaSpaces XAP - support Memcached with high availability, transaction support[28]
Install Memcached Server Windows
See also[edit]
References[edit]
- ^'Releases - memcached/memcached'. Retrieved 3 November 2018 – via GitHub.
- ^ ab'Memcached license'. GitHub. Retrieved 2014-06-27.
- ^'Google Code Archive - Long-term storage for Google Code Project Hosting'. Code.google.com. Retrieved 2017-06-25.
- ^'Google Code Archive - Long-term storage for Google Code Project Hosting'. Code.google.com. Retrieved 2017-06-25.
- ^[1]. Community.livejournal.com (2003-05-22). Retrieved on 2013-09-18.
- ^[2]. Community.livejournal.com (2003-05-27). Retrieved on 2013-09-18.
- ^'lj_dev: memcached'. 2013-02-25. Archived from the original on 2013-02-25. Retrieved 2017-06-25.
- ^Cuong Do Cuong (Engineering manager at YouTube/Google) (June 23, 2007). Seattle Conference on Scalability: YouTube Scalability (Online Video - 26th minute). Seattle: Google Tech Talks.
- ^Whitaker, Keir (2010-05-17). 'Steve Huffman on Lessons Learned at Reddit | Carsonified'. Archived from the original on 2010-05-17. Retrieved 2017-06-25.
- ^'Scaling memcached at Facebook'. Facebook.com. 2008-12-12. Retrieved 2017-06-25.
- ^'Scaling Memcache at Facebook'. USENIX. Retrieved 2017-06-25.
- ^'Building Pinterest in the cloud'. Pinterest.com. 2013-06-19. Retrieved 2018-03-09.
- ^'A comprehensive, fast, pure-Python memcached client'. Github.com. 2018-01-08. Retrieved 2018-03-09.
- ^'It's Not Rocket Science, But It's Our Work'. Blog.twitter.com. 2008-06-01. Retrieved 2017-06-25.
- ^'memcached'. MediaWiki. Retrieved 2017-06-25.
- ^Rez BoF, SIGGRAPH 2019, retrieved 2019-08-09
- ^'Memcache Examples | App Engine standard environment for Python | Google Cloud Platform'. Code.google.com. 2017-03-22. Retrieved 2017-06-25.
- ^'About In-Role Cache for Azure Cache'. Msdn.microsoft.com. 2015-08-25. Retrieved 2017-06-25.
- ^Verge, Jason (2014-09-23). 'Redis Labs: We Have 3,000 Paying Cloud In-Memory NoSQL Customers'. Data Center Knowledge. Retrieved 2016-09-10.
- ^'AWS | Amazon ElastiCache – in-memory data store and cache'. Aws.amazon.com. Retrieved 2017-06-25.
- ^[3][dead link]
- ^'Memcrashed - Major amplification attacks from UDP port 11211'. CloudFlare. 27 Feb 2018. Retrieved 3 March 2018.
- ^Jeffrey, Cal (Mar 1, 2018). 'GitHub falls victim to largest DDoS attack ever recorded'.
- ^'February 28th DDoS Incident Report'. March 1, 2018. Retrieved 3 March 2018.
- ^'Memcached 1.5.6 Release Notes'. 2018-02-27. Retrieved 3 March 2018.
- ^'Speedy MySQL 5.6 takes aim at NoSQL, MariaDB'. Theregister.co.uk. Retrieved 2017-06-25.
- ^David Felcey (2014-08-13). 'Getting Started With The Coherence Memcached Adaptor | Oracle Coherence Blog'. Blogs.oracle.com. Retrieved 2017-06-25.
- ^'XAP Real Time Transaction Processing'. Gigaspaces.com. Retrieved 2017-06-25.
External links[edit]
- Official website
While doing some web development, I needed to have Memcached (source code) installed on my local machine to closely simulate what was going on my server. I develop under windows, and realized that installing meme Memcached isn’t as straightforward as it is on Linux. There are actually quite a few people who ask about how to do it, so I’ll give you a couple of good options. Here’s how to install the caching system on Windows.
AdvertisingSolution 1 : install Memcached for Windows (v1.4.5)
This is the most obvious way to do it. It took me a tiny bit of time to locate the proper files, so I have included the links I used:
- Download a stable version, in either 32-bit or 64-bit I have tested the 64-bit version.
- Create a directory such as c:memcached (or something else)
- Copy the .zip content to that directory. There should be one memcached.exe file by itself (32-bit) or with a couple of .dll files (64-bit)
- Open a command prompt (need to be opened as administrator). You can do this by going to Start>Search and type “cmd”
- Type the command “c:memcachedmemcached.exe -d start” to start the service
- Type the command “c:memcachedmemcached.exe -d stop” to stop the service
- To change the memory pool size, type “c:memcachedmemcached.exe -m 512” for 512MB
Your Memcached service should now run and wait incoming key/value pairs.
IMPORTANT NOTES:
1– If you want to use this in a local web app, you have to make sure that your language has built-in support for Memcached. For example, PHP may require the installation of additional libraries and modifications of the php.ini configuration file. If there’s a demand for it, I’ll write an explanation for that too.
2– The default configuration is to create a 64MB memory pool and listening on port 11211
3– Type the command “c:memcachedmemcached.exe -d install” to have Memcached started after a reboot. You should now see Memcached as a Windows Service in the control panel. IMPORTANT: if you choose to install it as a service, you lose the ability to change the pool size via command line. You will need to edit a registry key as follows:
- Launch regedit via Start>Search
- Find “HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmemcached”
- Edit the “–m VALUE” to the number of desired megabytes “–m 512” = 512 MB
Solution 2: Install Couchbase to replace Memcached
Memcached 1.5 Windows
You may not have heard of it, but Couchbase is a JSON-based document store, but it also has an in-memory key/value store interface that is compatible with Memcached. This means that you can install Couchbase for Windows and configure it to act just like Memcached. The cool thing is that it comes with a cool graphical interface and a regular Windows installer.
Couchbase also has a great failover mechanism and cluster management that Memcached lacks, but this is a bit beyond the scope of this article.
- Go to the Couchbase download page
- Pick the Windows installer
- Launch the installer file
At the end of the installation process, the browser will open at the address http://localhost:8091/index.html and you will go through the initial setup. The important screen is this one:
For Memcached purposes, you can ignore the Disk storage settings, since you will create a memory pool. Just leave things the way they are.
Choose “start a new cluster” and pick the amount of RAM you want to use. Anything between 64 and 512MB will do. It’s really up to you, and you can change this later. Click Next and ignore the Sample buckets. Click Next again.
This is another important screen. It’s where you will create the memory pool. Make sure that you pick the Memcached Bucket Type. To emulate Memcached, you probably don’t need to enable the Replicas. But you should enable the Flush command. Click Next.
You can discard the Notifications and the registration if you want. Click Next.
The final phase is to setup your password. Click Next. And voila! You now have a running Memcached node that you can keep an eye on with a cool graphical interface in which you can inspect the content of the cache (useful for debugging!)
The default port for Memcached buckets is the standard 11211. You can change this in Data Buckets > [Bucket Name] > Edit
Conclusion
You now have two reliable ways to install Memcached on Windows machines. For development purposes, I like Couchbase, but if you want something light, the original Memcache port for Windows can’t be beat. If you have additional questions, just drop a comment, and I’ll do my best to reply. Thanks for reading this.
Filed in