{"id":1810,"date":"2014-12-16T17:51:09","date_gmt":"2014-12-16T17:51:08","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1810"},"modified":"2020-02-23T12:16:23","modified_gmt":"2020-02-23T20:16:23","slug":"understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/","title":{"rendered":"Spymemcached Java and picking meaningful data points"},"content":{"rendered":"<h4>Guest post: Eric Lambert<\/h4>\n<p>The Spymemcached Java client is the leading Java client used by Java-based applications that need to avail themselves to Memcached servers. The reason Spy has become so popular in the Java community is that it has been highly optimized and that it provides outstanding performance, but at the same time does so without burdening the user with undue complexity.<\/p>\n<p>For the most typical cases, users simply need to use the following &#8216;template&#8217; <strong><code> List servers = new ArrayList(); servers.add(new InetSocketAddress(\"192.168.0.9\",11211); MemcachedClient client = new MemcachedClient(new BinaryConnectionFactory();, servers); <\/code><\/strong> At which point they are ready to start blasting operations at their cluster of Memcached servers. While Spy provides a very simple and easy to use interface, it does not do so at the expense of the flexibility needed to tune the system. Underneath the covers, Spy provides you with many ways to tweak the system. In this blog, I delve into some of the knobs and switches that Spy provides. My hope is that by doing so I will aid you in better understanding how Spy behaves and how you can tune it to best suit your needs when the out-of-the-box behavior is not sufficient. But before I get into the nitty-gritty, I want to start off with a very simple, straightforward, and somewhat naive Spymemcached tutorial and use it to illustrate a rather significant point.<\/p>\n<p>Let&#8217;s say that I am evaluating Spymemcached for the first time and I want to understand how my system performs when doing a series of sets, gets, and deletes. To do so, I can create a simple program that first sets a series of entries into the cache, then retrieves each of these entries and then finally goes and deletes each of these entries. I can instrument the code to do this in such a way that it tracks the total time it takes to do all the sets, gets, and deletes. The code for this could look something like the following <code><strong> \/\/ perform sets long start = System.nanoTime(); for (int i = 0; i &lt; numberOfOps; i++) { client.set(KEY_PREFIX + i, 3600, PAY_LOAD).get(); } long end = System.nanoTime(); long setTime = end - start; \/\/ perform gets start = System.nanoTime(); for (int i = 0; i &lt; numberOfOps; i++) { client.get(KEY_PREFIX + i); } end = System.nanoTime(); long getTime = end - start; \/\/ perform deletes start = System.nanoTime(); for (int i = 0; i &lt; numberOfOps; i++) { client.delete(KEY_PREFIX + i).get(); } end = System.nanoTime(); long delTime = end - start; System.out.println(numberOfOps + \" Set: \" + setTime \/ nanosPerSec + \" Average: \" + setTime \/ numberOfOps); System.out.println(numberOfOps + \" Get: \" + getTime \/ nanosPerSec + \" Average: \" + getTime \/ numberOfOps); System.out.println(numberOfOps + \" Delete: \" + delTime \/ nanosPerSec + \" Average: \" + delTime \/ numberOfOps);<\/strong> <\/code> Now, as I mentioned earlier, this is a rather naive and unrealistic use case.\u00a0 Nonetheless, this crude example has an important lesson to teach us.<\/p>\n<p>Let&#8217;s see what happens when we run this test using different values for the <code>numberOfOps<\/code>. If we set <code>numberOfOps<\/code> to 10,000, our performance might look something like the following: <strong><code>10000 Set: 3.008377 Average: 300837 10000 Get: 1.730886 Average: 173088 10000 Delete: 1.172679 Average: 117267<\/code> Now, let&#8217;s up the ante a bit and see what happens when we increase the <code>numberOfOperations<\/code> by a factor of 10 and set it to 100,000: <code>100000 Set: 10.710224 Average: 107102 100000 Get: 9.992544 Average: 99925 100000 Delete: 9.876984 Average: 98769<\/code><\/strong> What is interesting is that even though we increased the workload, the average time it took for each operation to complete actually got significantly smaller. We see nearly a 66% decrease in latency in set operations and nearly a 40% decrease in latency for get operations and a 15% decrease in latency for deletes. Now let&#8217;s see what happens when we throw 1,000,000 operations at the test. <strong><code>1000000 Set: 106.15172 Average: 106151 1000000 Get: 101.086393 Average: 101086 1000000 Delete: 99.747647 Average: 99747<\/code><\/strong> As we can see, the performance at 1,000,000 operations looks much more like the performance at 100,000 operations than the performance at 100,000 operations looks like the performance we see at 10,000 operations.<\/p>\n<p>Let&#8217;s set aside for the moment what actually is the cause for this discrepancy and focus on the bigger lesson here. Which is that when we are trying to understand the behavior and performance of a system, the attributes and data points we use when testing the system are paramount. We should either empirically derive these values whenever possible or base them on an explicitly stated constraint or assumption. If I had really been using the test above to understand the behavior of my Spymemcached based system, simply using the 10,000 operations scenario would not have resulted in understanding what the peak performance of the system is. Had I only run the 100,000 or 1,000,000 operations scenarios I would have missed the fact that the system appears to require some warm-up time. But by doing some exploration to see what are the interesting values for this simple and naive test, we have learned some significant lessons about our system.<\/p>\n<p>I bring this up because too often I see discussions of a system&#8217;s performance and behavior that use what appear to be arbitrary values and assumptions. And when I see these, it makes me wonder why the author chose a particular value. If it is a significant value then its&#8217; significance should be explained. If it is an arbitrary value, then we should be wary of the results and conclusions put forth. (Note, for the record, the values recorded above were achieved using Spymemcached 2.5 running against memcached 1.4.4, with the client and server running on the same host).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guest post: Eric Lambert The Spymemcached Java client is the leading Java client used by Java-based applications that need to avail themselves to Memcached servers. The reason Spy has become so popular in the Java community is that it has [&hellip;]<\/p>\n","protected":false},"author":43,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[8999],"class_list":["post-1810","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spymemcached Java and picking meaningful data points<\/title>\n<meta name=\"description\" content=\"Learn the Spymemcached Java client, the leading Java client used by Java-based applications that need to avail themselves to Memcached servers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spymemcached Java and picking meaningful data points\" \/>\n<meta property=\"og:description\" content=\"Learn the Spymemcached Java client, the leading Java client used by Java-based applications that need to avail themselves to Memcached servers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T17:51:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-23T20:16:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Eric Lambert\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eric Lambert\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/\"},\"author\":{\"name\":\"Eric Lambert\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/0973e760d16fa5962b93e04921e928f0\"},\"headline\":\"Spymemcached Java and picking meaningful data points\",\"datePublished\":\"2014-12-16T17:51:08+00:00\",\"dateModified\":\"2020-02-23T20:16:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/\"},\"wordCount\":747,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/\",\"name\":\"Spymemcached Java and picking meaningful data points\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T17:51:08+00:00\",\"dateModified\":\"2020-02-23T20:16:23+00:00\",\"description\":\"Learn the Spymemcached Java client, the leading Java client used by Java-based applications that need to avail themselves to Memcached servers.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spymemcached Java and picking meaningful data points\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/0973e760d16fa5962b93e04921e928f0\",\"name\":\"Eric Lambert\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/7fc4202719c22126b10c524a9dd21e78\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2cad6e290aefbe0bf2036700cfe8835750fb20bc5ce909f6e3cc558f87ea250b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2cad6e290aefbe0bf2036700cfe8835750fb20bc5ce909f6e3cc558f87ea250b?s=96&d=mm&r=g\",\"caption\":\"Eric Lambert\"},\"description\":\"Eric Lambert is a Staff Engineer at Couchbase working on Memcached based data scalability solutions. Also, designed &amp; developed testing infrastructure, tools.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/eric-lambert\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spymemcached Java and picking meaningful data points","description":"Learn the Spymemcached Java client, the leading Java client used by Java-based applications that need to avail themselves to Memcached servers.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/","og_locale":"en_US","og_type":"article","og_title":"Spymemcached Java and picking meaningful data points","og_description":"Learn the Spymemcached Java client, the leading Java client used by Java-based applications that need to avail themselves to Memcached servers.","og_url":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T17:51:08+00:00","article_modified_time":"2020-02-23T20:16:23+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Eric Lambert","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Eric Lambert","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/"},"author":{"name":"Eric Lambert","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/0973e760d16fa5962b93e04921e928f0"},"headline":"Spymemcached Java and picking meaningful data points","datePublished":"2014-12-16T17:51:08+00:00","dateModified":"2020-02-23T20:16:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/"},"wordCount":747,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/","url":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/","name":"Spymemcached Java and picking meaningful data points","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T17:51:08+00:00","dateModified":"2020-02-23T20:16:23+00:00","description":"Learn the Spymemcached Java client, the leading Java client used by Java-based applications that need to avail themselves to Memcached servers.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/understanding-and-characterizing-performance-spymemcached-importance-picking-meaningful-data-points\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spymemcached Java and picking meaningful data points"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/0973e760d16fa5962b93e04921e928f0","name":"Eric Lambert","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/7fc4202719c22126b10c524a9dd21e78","url":"https:\/\/secure.gravatar.com\/avatar\/2cad6e290aefbe0bf2036700cfe8835750fb20bc5ce909f6e3cc558f87ea250b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2cad6e290aefbe0bf2036700cfe8835750fb20bc5ce909f6e3cc558f87ea250b?s=96&d=mm&r=g","caption":"Eric Lambert"},"description":"Eric Lambert is a Staff Engineer at Couchbase working on Memcached based data scalability solutions. Also, designed &amp; developed testing infrastructure, tools.","url":"https:\/\/www.couchbase.com\/blog\/author\/eric-lambert\/"}]}},"authors":[{"term_id":8999,"user_id":43,"is_guest":0,"slug":"eric-lambert","display_name":"Eric Lambert","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/2cad6e290aefbe0bf2036700cfe8835750fb20bc5ce909f6e3cc558f87ea250b?s=96&d=mm&r=g","author_category":"","last_name":"Lambert","first_name":"Eric","job_title":"","user_url":"","description":"Eric Lambert is a Staff Engineer at Couchbase working on Memcached based data scalability solutions. Also, designed &amp; developed testing infrastructure, tools."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/43"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=1810"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/1810\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=1810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=1810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=1810"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}