{"id":310,"date":"2013-03-11T22:29:25","date_gmt":"2013-03-12T05:29:25","guid":{"rendered":"http:\/\/galencharlton.com\/blog\/?p=310"},"modified":"2013-03-20T17:02:01","modified_gmt":"2013-03-21T00:02:01","slug":"exploring-memcached-caches","status":"publish","type":"post","link":"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/","title":{"rendered":"Exploring memcached caches"},"content":{"rendered":"<p>Both Koha and Evergreen use <code><a href=\"http:\/\/memcached.org\/\">memcached<\/a><\/code> to cache user sessions and data that would be expensive to continually fetch and refetch from the database. For example, Koha uses <code>memcached<\/code> to cache MARC frameworks, while Evergreen caches search results, bibliographic added content, search suggestions, and other data.<\/p>\n<p>Even though the data that gets cached is transitory, at times it can be useful to look at it. For example, you may need to check to see if some stale data is present in the cache, or you may want to capture some statistics about user sessions that would otherwise be lost when the cache expires.<\/p>\n<p>The library <a href=\"http:\/\/libmemcached.org\/\">libMemcached<\/a> include several command-line utilities for interrogating a memcached server. We&#8217;ll look at <code>memcdump<\/code> and <code>memccat<\/code>.<\/p>\n<p><code>memcdump<\/code> prints a list of keys that are (or were, since the data may have expired) stored in a memcached server. Here&#8217;s an example of the sorts of keys you might see in an Evergreen system:<\/p>\n<pre class=\"crayon:false\"><span style=\"color: red;\">memcdump --servers 127.0.0.1:11211<\/span>\r\noils_AS_21a5dc5cd2aa42ee7c0ecc239dcb25b5\r\nac.toc.html.0531301990\r\nopen-ils.search_9fd0c6c3553e6979fc63aa634a78b362_facets\r\nopen-ils.search_9fd0c6c3553e6979fc63aa634a78b362\r\noils_auth_8682b1017b7b27035576fecbfc7715c4<\/pre>\n<p>The <code style=\"color: red;\">--servers 127.0.0.1:11211<\/code> bit tells <code>memcdump<\/code> to check memcached running on the local server.<\/p>\n<p>A list of keys, however, doesn&#8217;t tell you much. To see the value that&#8217;s stored under that key, use <code>memccat<\/code>. Here&#8217;s an example of looking at a user session record in Koha (assuming you&#8217;ve set the <code>SessionStorage<\/code> system preference to use memcached):<\/p>\n<pre class=\"crayon:false\"><span style=\"color: red;\">memccat --servers 127.0.0.1:11211 KOHA78c879b9942dee326710ce8e046acede<\/span>\r\n---\r\n_SESSION_ATIME: '1363060711'\r\n_SESSION_CTIME: '1363060711'\r\n_SESSION_ID: 78c879b9942dee326710ce8e046acede\r\n_SESSION_REMOTE_ADDR: 192.168.1.16\r\nbranch: CPL\r\nbranchname: Centerville\r\ncardnumber: cat\r\nemailaddress: ''\r\nfirstname: ''\r\nflags: 1\r\nid: cat\r\nip: 192.168.1.16\r\nlasttime: '1363060711'\r\nnumber: 51\r\nsurname: cat<\/pre>\n<p>And here&#8217;s an example of an Evergreen user session cached object:<\/p>\n<pre class=\"crayon:false\"><span style=\"color: red;\">memccat --servers 127.0.0.1:11211 oils_auth_8682b1017b7b27035576fecbfc7715c4<\/span>\r\n{\"authtime\":420,\"userobj\":{\"__c\":\"au\",\"__p\":[null,null,null,null,null,null,null,null,null,\"186\",null,\"t\",null,\"f\",119284,38997,0,0,\"2011-05-31T11:17:16-0400\",\"0.00\",\"1-888-555-1234\",\"1923-01-01T00:00:00-0500\",\"user@example.org\",null,\"2015-10-29T00:00:00-0400\",\"User\",\"Test\",186,654440,3,null,null,null,\"1358890660.7173220299.6945940294\",119284,\"f\",1,null,\"\",null,null,10,null,1,null,\"t\",654440,\"user\",null,\"f\",\"2013-01-22T16:37:40-0500\",null,\"f\"]}}<\/pre>\n<p>We&#8217;ll let the YAMLites and JSONistas square off outside, and take a look at a final example. This is an excerpt a cached catalog search result in Evergreen:<\/p>\n<pre class=\"crayon:false\"><span style=\"color: red;\">memccat --servers 127.0.0.1:11211 open-ils.search_4b81a8a59544e8c7e9fdcda357d7b05f<\/span>\r\n{\"0\":{\"summary\":{\"checked\":630,\"visible\":\"546\",\"excluded\":84,\"deleted\":0,\"total\":630,\"complex_query\":1},\"results\":[[\"74093\"],[\"130197\"], ...., [\"880940\"],[\"574457\"]]}}<\/pre>\n<p>There are other tools that let you manipulate the cache, including <code>memcrm<\/code> to remove keys and <code>memccp<\/code> to load key\/value pairs into memcached.<\/p>\n<p>For a complete list of the command-line tools provided by libMemcached, check out its <a href=\"http:\/\/docs.libmemcached.org\/#client-applications\">documentation<\/a>. To install them on Debian or Ubuntu, run <code>apt-get install libmemcached-tools<\/code>. Note that the Debian package renames the tools from &#8216;memdump&#8217; to &#8216;memcdump&#8217;, &#8216;memcat&#8217; to &#8216;memccat&#8217;, etc., to avoid a naming conflict with another package.<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-310\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>More<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-tumblr\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-tumblr sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/?share=tumblr\" target=\"_blank\" title=\"Click to share on Tumblr\"><span>Tumblr<\/span><\/a><\/li><li class=\"share-reddit\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-reddit sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/?share=reddit\" target=\"_blank\" title=\"Click to share on Reddit\"><span>Reddit<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/\" target=\"_blank\" title=\"Click to print\"><span>Print<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Both Koha and Evergreen use memcached to cache user sessions and data that would be expensive to continually fetch and refetch from the database. For&#8230;<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-twitter\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-twitter-310\" class=\"share-twitter sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/?share=twitter\" target=\"_blank\" title=\"Click to share on Twitter\"><span>Twitter<\/span><\/a><\/li><li><a href=\"#\" class=\"sharing-anchor sd-button share-more\"><span>More<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><div class=\"sharing-hidden\"><div class=\"inner\" style=\"display: none;\"><ul><li class=\"share-tumblr\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-tumblr sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/?share=tumblr\" target=\"_blank\" title=\"Click to share on Tumblr\"><span>Tumblr<\/span><\/a><\/li><li class=\"share-reddit\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-reddit sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/?share=reddit\" target=\"_blank\" title=\"Click to share on Reddit\"><span>Reddit<\/span><\/a><\/li><li class=\"share-end\"><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon\" href=\"https:\/\/galencharlton.com\/blog\/2013\/03\/exploring-memcached-caches\/\" target=\"_blank\" title=\"Click to print\"><span>Print<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"Exploring memcached caches http:\/\/wp.me\/p3gJ9y-50 #kohails #egils","jetpack_is_tweetstorm":false},"categories":[18,10,11],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3gJ9y-50","_links":{"self":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts\/310"}],"collection":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":22,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":419,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions\/419"}],"wp:attachment":[{"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/galencharlton.com\/blog\/wp-json\/wp\/v2\/tags?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}