SlideShare a Scribd company logo
1 of 30
Download to read offline
Tricking out
                     your
                 Memcached
                    Setup



Wednesday, July 28, 2010
Chaos Factor
Wednesday, July 28, 2010
ASCII Protocol
                     [brian@gaz libmemcached]$ memcp foo --servers=localhost
                     [brian@gaz libmemcached]$ telnet localhost 11211
                     Trying 127.0.0.1...
                     Connected to localhost.
                     Escape character is '^]'.
                     get foo
                     VALUE foo 0 4
                     bar

                     END
                     version
                     VERSION 1.4.5




Wednesday, July 28, 2010
Binary Protocol
                            MAGIC          Opcode              Key Length
                             (1 byte)       (1 byte)             (2 bytes)

                           Extra Length       Data Type           Reserved
                               (1 byte)           (1 byte)           (2 bytes)

                                           Total Body Length
                                                   (4 bytes)

                                                 Opaque
                                                   (4 bytes)

                                        CAS (Compare and Swap)
                                                   (8 bytes)




Wednesday, July 28, 2010
Pipelining!

                           GET FOO      GET DOG    GET HELP



                                        PACKET




Wednesday, July 28, 2010
New Record




                                       Item goes into nearest node




                           Consistent Hashing
Wednesday, July 28, 2010
libhashkit

                    • One_at_a_time
                    • MD5
                    • HSIES (patents anyone?)
                    • CRC
                    • murmur (pretty simple)

Wednesday, July 28, 2010
Replica
                                  Node:       Node:
                                   B           C
                       Node:
                        A

                                                      Node:
                                                       D

                                  Store:
                               Shopping_key




Wednesday, July 28, 2010
Replica
                                  Node:       Node:
                                   B           C
                       Node:
                        A

                                                      Node:
                                                       D

                                   GET:
                               Shopping_key




Wednesday, July 28, 2010
STAT!

                    • memstat --servers=localhost “args”
                     • slab
                     • items
                     • sizes

Wednesday, July 28, 2010
slab
                           STAT   1:chunk_size 104
                           STAT   1:chunks_per_page 10082
                           STAT   1:total_pages 1
                           STAT   1:total_chunks 10082
                           STAT   1:used_chunks 10081
                           STAT   1:free_chunks 1
                           STAT   1:free_chunks_end 10079
                           STAT   9:chunk_size 696
                           STAT   9:chunks_per_page 1506
                           STAT   9:total_pages 63
                           STAT   9:total_chunks 94878
                           STAT   9:used_chunks 94878
                           STAT   9:free_chunks 0
                           STAT   9:free_chunks_end 0
                           STAT   active_slabs 2
                           STAT   total_malloced 67083616
                           END



Wednesday, July 28, 2010
items
                           STAT   items:2:number 1
                           STAT   items:2:age 452
                           STAT   items:2:evicted 0
                           STAT   items:2:evicted_nonzero 0
                           STAT   items:2:evicted_time 2
                           STAT   items:2:outofmemory 0
                           STAT   items:2:tailrepairs 0
                           ...
                           STAT   items:27:number 1
                           STAT   items:27:age 452
                           STAT   items:27:evicted 0
                           STAT   items:27:evicted_nonzero 0
                           STAT   items:27:evicted_time 2
                           STAT   items:27:outofmemory 0
                           STAT   items:27:tailrepairs 0




Wednesday, July 28, 2010
sizes
                           96 35
                           128 38
                           160 807
                           192 804
                           224 410
                           256 222
                           288 83
                           320 39
                           352 53
                           384 33
                           416 64
                           448 51
                           480 30
                           512 54
                           544 39
                           576 10065




Wednesday, July 28, 2010
Dump your data?

                    • memdump
                    • memcached_dump(memcached_st *ptr,
                           memcached_dump_fn *function, void
                           *context, uint32_t number_of_callbacks);




Wednesday, July 28, 2010
Drain
                           for (items= memdump())
                           {
                             store(items);
                             memcached_delete();
                           }



Wednesday, July 28, 2010
libmemcachedutil

                    • libmemcached_util_ping();
                    • libmemcached_util_version_check();
                    • memcached_pool_st


Wednesday, July 28, 2010
memcached_pool_st* pool= memcached_pool_create(memc, 5, 10);
                memcached_st* mmc[10];

              for (size_t x= 0; x < 10; ++x)
              {
                mmc[x]= memcached_pool_pop(pool, false, &rc);
                …;
              }
              memcached_pool_push(pool, mmc[x])




Wednesday, July 28, 2010
...and now for
                              databases


Wednesday, July 28, 2010
Wednesday, July 28, 2010
Setting via SELECT
          select id, url, memc_set(concat('feeds', md5(url)), url) from feeds;

          select memc_get(concat('feeds', md5(url))) from feeds;
          +-------------------------------------------------------+
          | memc_get(concat('feeds', md5(url)))                   |
          +-------------------------------------------------------+
          | http://feeds.feedburner.com/littlegreenfootballs/Ilds |
          | http://del.icio.us/rss/jacomien                       |
          | http://del.icio.us/rss/tags/rmj20                     |
          | http://www.jihadwatch.org/index.rdf                   |
          | http://www.connotea.org/rss/user/rmj20                |
          | http://devblog.grazr.com/?feed=rss2x                  |
          | http://feeds.feedburner.com/littlegreenfootballs/kyeH |
          +-------------------------------------------------------+




Wednesday, July 28, 2010
Trigger
         DROP TRIGGER IF EXISTS feed_insert;
         CREATE TRIGGER feed_insert BEFORE INSERT ON feeds FOR EACH ROW
         BEGIN   SET @mm= memc_set(concat('feeds:',md5(NEW.url)),
         NEW.url);END |


         insert into feeds (url) values ('http://grazr.com/feedlist.xml');

         select memc_get(concat('feeds:', md5('http://grazr.com/feedlist.xml')));
         +------------------------------------------------------------------+|
         memc_get(concat('feeds:', md5('http://grazr.com/feedlist.xml'))) |
         +------------------------------------------------------------------+|
         http://grazr.com/feedlist.xml                                    |
         +------------------------------------------------------------------+




Wednesday, July 28, 2010
Memcached Replication
                     via MySQL

                 INSERT INTO table_a VALUES (“key”, “value”, “values”);
                 INSERT INTO blackhole_table VALUES (memc_delete(“key”));




Wednesday, July 28, 2010
drizzle> select table_name
               -> from information_schema.tables
               -> where table_name like '%MEMCACHED%';
           +--------------------+
           | table_name          |
           +--------------------+
           | MEMCACHED_STATS     |
           | MEMCACHED_ANALYSIS |
           +--------------------+
           2 rows in set (0 sec)




Wednesday, July 28, 2010
drizzle> desc information_schema.memcached_stats;
                       +-----------------------+-------------+------+-----+---------+-------+
                       | Field                 | Type        | Null | Key | Default | Extra |
                       +-----------------------+-------------+------+-----+---------+-------+
                       | NAME                  | varchar(32) | NO   |     |         |       |
                       | PORT_NUMBER           | bigint      | NO   |     | 0       |       |
                       | PROCESS_ID            | bigint      | NO   |     | 0       |       |
                       | UPTIME                | bigint      | NO   |     | 0       |       |
                       | TIME                  | bigint      | NO   |     | 0       |       |
                       | VERSION               | varchar(8) | NO    |     |         |       |
                       | POINTER_SIZE          | bigint      | NO   |     | 0       |       |
                       | RUSAGE_USER           | bigint      | NO   |     | 0       |       |
                       | RUSAGE_SYSTEM         | bigint      | NO   |     | 0       |       |
                       | CURRENT_ITEMS         | bigint      | NO   |     | 0       |       |




Wednesday, July 28, 2010
drizzle> desc information_schema.memcached_analysis;
              +--------------------------------+-------------+------+-----+---------+-------+
              | Field                          | Type        | Null | Key | Default | Extra |
              +--------------------------------+-------------+------+-----+---------+-------+
              | SERVERS_ANALYZED               | bigint      | NO   |     | 0       |       |
              | AVERAGE_ITEM_SIZE              | bigint      | NO   |     | 0       |       |
              | NODE_WITH_MOST_MEM_CONSUMPTION | varchar(32) | NO   |     |         |       |
              | USED_BYTES                     | bigint      | NO   |     | 0       |       |
              | NODE_WITH_LEAST_FREE_SPACE     | varchar(32) | NO   |     |         |       |
              | FREE_BYTES                     | bigint      | NO   |     | 0       |       |
              | NODE_WITH_LONGEST_UPTIME       | varchar(32) | NO   |     |         |       |
              | LONGEST_UPTIME                 | bigint      | NO   |     | 0       |       |
              | POOL_WIDE_HIT_RATIO            | bigint      | NO   |     | 0       |       |
              +--------------------------------+-------------+------+-----+---------+-------+




Wednesday, July 28, 2010
libmemcachedprotocol


                    • Ascii
                    • Binary


Wednesday, July 28, 2010
memcached_binary_protocol_callback_st interface_v1_impl= {
                    .interface_version= MEMCACHED_PROTOCOL_HANDLER_V1,
                    .interface.v1= {
                      .add= add_handler,
                      .append= append_handler,
                      .decrement= decrement_handler,
                      .delete= delete_handler,
                      .flush= flush_handler,
                      .get= get_handler,
                      .increment= increment_handler,
                      .noop= noop_handler,
                      .prepend= prepend_handler,
                      .quit= quit_handler,
                      .replace= replace_handler,
                      .set= set_handler,
                      .stat= stat_handler,
                      .version= version_handler
                    }
                  };



Wednesday, July 28, 2010
./examples/memcached_light
             (everyone needs their own persistent Memcached server)




Wednesday, July 28, 2010
Examples!


                    • tests/mem_functions.c
                    • man “libmemcached_examples”


Wednesday, July 28, 2010
Brian Aker (brian.aker@datadifferential.com)
          twitter:brianaker
          url: Krow.net




                                          http://DataDifferential.com



Wednesday, July 28, 2010

More Related Content

More from Brian Aker (9)

Gearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyGearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copy
 
Gearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copyGearmam, from the_worker's_perspective copy
Gearmam, from the_worker's_perspective copy
 
Gearman, from the worker's perspective
Gearman, from the worker's perspectiveGearman, from the worker's perspective
Gearman, from the worker's perspective
 
Drizzle Keynote from O'Reilly's MySQL's Conference
Drizzle Keynote from O'Reilly's MySQL's ConferenceDrizzle Keynote from O'Reilly's MySQL's Conference
Drizzle Keynote from O'Reilly's MySQL's Conference
 
Drizzle 7.0, Future of Virtualizing
Drizzle 7.0, Future of VirtualizingDrizzle 7.0, Future of Virtualizing
Drizzle 7.0, Future of Virtualizing
 
Drizzle Keynote at the MySQL User's Conference
Drizzle Keynote at the MySQL User's ConferenceDrizzle Keynote at the MySQL User's Conference
Drizzle Keynote at the MySQL User's Conference
 
Drizzle @OpenSQL Camp
Drizzle @OpenSQL CampDrizzle @OpenSQL Camp
Drizzle @OpenSQL Camp
 
No SQL Talk
No SQL TalkNo SQL Talk
No SQL Talk
 
Drizzle Talk
Drizzle TalkDrizzle Talk
Drizzle Talk
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

Tricking out your Memcached Setup

  • 1. Tricking out your Memcached Setup Wednesday, July 28, 2010
  • 3. ASCII Protocol [brian@gaz libmemcached]$ memcp foo --servers=localhost [brian@gaz libmemcached]$ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. get foo VALUE foo 0 4 bar END version VERSION 1.4.5 Wednesday, July 28, 2010
  • 4. Binary Protocol MAGIC Opcode Key Length (1 byte) (1 byte) (2 bytes) Extra Length Data Type Reserved (1 byte) (1 byte) (2 bytes) Total Body Length (4 bytes) Opaque (4 bytes) CAS (Compare and Swap) (8 bytes) Wednesday, July 28, 2010
  • 5. Pipelining! GET FOO GET DOG GET HELP PACKET Wednesday, July 28, 2010
  • 6. New Record Item goes into nearest node Consistent Hashing Wednesday, July 28, 2010
  • 7. libhashkit • One_at_a_time • MD5 • HSIES (patents anyone?) • CRC • murmur (pretty simple) Wednesday, July 28, 2010
  • 8. Replica Node: Node: B C Node: A Node: D Store: Shopping_key Wednesday, July 28, 2010
  • 9. Replica Node: Node: B C Node: A Node: D GET: Shopping_key Wednesday, July 28, 2010
  • 10. STAT! • memstat --servers=localhost “args” • slab • items • sizes Wednesday, July 28, 2010
  • 11. slab STAT 1:chunk_size 104 STAT 1:chunks_per_page 10082 STAT 1:total_pages 1 STAT 1:total_chunks 10082 STAT 1:used_chunks 10081 STAT 1:free_chunks 1 STAT 1:free_chunks_end 10079 STAT 9:chunk_size 696 STAT 9:chunks_per_page 1506 STAT 9:total_pages 63 STAT 9:total_chunks 94878 STAT 9:used_chunks 94878 STAT 9:free_chunks 0 STAT 9:free_chunks_end 0 STAT active_slabs 2 STAT total_malloced 67083616 END Wednesday, July 28, 2010
  • 12. items STAT items:2:number 1 STAT items:2:age 452 STAT items:2:evicted 0 STAT items:2:evicted_nonzero 0 STAT items:2:evicted_time 2 STAT items:2:outofmemory 0 STAT items:2:tailrepairs 0 ... STAT items:27:number 1 STAT items:27:age 452 STAT items:27:evicted 0 STAT items:27:evicted_nonzero 0 STAT items:27:evicted_time 2 STAT items:27:outofmemory 0 STAT items:27:tailrepairs 0 Wednesday, July 28, 2010
  • 13. sizes 96 35 128 38 160 807 192 804 224 410 256 222 288 83 320 39 352 53 384 33 416 64 448 51 480 30 512 54 544 39 576 10065 Wednesday, July 28, 2010
  • 14. Dump your data? • memdump • memcached_dump(memcached_st *ptr, memcached_dump_fn *function, void *context, uint32_t number_of_callbacks); Wednesday, July 28, 2010
  • 15. Drain for (items= memdump()) { store(items); memcached_delete(); } Wednesday, July 28, 2010
  • 16. libmemcachedutil • libmemcached_util_ping(); • libmemcached_util_version_check(); • memcached_pool_st Wednesday, July 28, 2010
  • 17. memcached_pool_st* pool= memcached_pool_create(memc, 5, 10); memcached_st* mmc[10]; for (size_t x= 0; x < 10; ++x) { mmc[x]= memcached_pool_pop(pool, false, &rc); …; } memcached_pool_push(pool, mmc[x]) Wednesday, July 28, 2010
  • 18. ...and now for databases Wednesday, July 28, 2010
  • 20. Setting via SELECT select id, url, memc_set(concat('feeds', md5(url)), url) from feeds; select memc_get(concat('feeds', md5(url))) from feeds; +-------------------------------------------------------+ | memc_get(concat('feeds', md5(url))) | +-------------------------------------------------------+ | http://feeds.feedburner.com/littlegreenfootballs/Ilds | | http://del.icio.us/rss/jacomien | | http://del.icio.us/rss/tags/rmj20 | | http://www.jihadwatch.org/index.rdf | | http://www.connotea.org/rss/user/rmj20 | | http://devblog.grazr.com/?feed=rss2x | | http://feeds.feedburner.com/littlegreenfootballs/kyeH | +-------------------------------------------------------+ Wednesday, July 28, 2010
  • 21. Trigger DROP TRIGGER IF EXISTS feed_insert; CREATE TRIGGER feed_insert BEFORE INSERT ON feeds FOR EACH ROW BEGIN SET @mm= memc_set(concat('feeds:',md5(NEW.url)), NEW.url);END | insert into feeds (url) values ('http://grazr.com/feedlist.xml'); select memc_get(concat('feeds:', md5('http://grazr.com/feedlist.xml'))); +------------------------------------------------------------------+| memc_get(concat('feeds:', md5('http://grazr.com/feedlist.xml'))) | +------------------------------------------------------------------+| http://grazr.com/feedlist.xml | +------------------------------------------------------------------+ Wednesday, July 28, 2010
  • 22. Memcached Replication via MySQL INSERT INTO table_a VALUES (“key”, “value”, “values”); INSERT INTO blackhole_table VALUES (memc_delete(“key”)); Wednesday, July 28, 2010
  • 23. drizzle> select table_name -> from information_schema.tables -> where table_name like '%MEMCACHED%'; +--------------------+ | table_name | +--------------------+ | MEMCACHED_STATS | | MEMCACHED_ANALYSIS | +--------------------+ 2 rows in set (0 sec) Wednesday, July 28, 2010
  • 24. drizzle> desc information_schema.memcached_stats; +-----------------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+-------------+------+-----+---------+-------+ | NAME | varchar(32) | NO | | | | | PORT_NUMBER | bigint | NO | | 0 | | | PROCESS_ID | bigint | NO | | 0 | | | UPTIME | bigint | NO | | 0 | | | TIME | bigint | NO | | 0 | | | VERSION | varchar(8) | NO | | | | | POINTER_SIZE | bigint | NO | | 0 | | | RUSAGE_USER | bigint | NO | | 0 | | | RUSAGE_SYSTEM | bigint | NO | | 0 | | | CURRENT_ITEMS | bigint | NO | | 0 | | Wednesday, July 28, 2010
  • 25. drizzle> desc information_schema.memcached_analysis; +--------------------------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------------------------+-------------+------+-----+---------+-------+ | SERVERS_ANALYZED | bigint | NO | | 0 | | | AVERAGE_ITEM_SIZE | bigint | NO | | 0 | | | NODE_WITH_MOST_MEM_CONSUMPTION | varchar(32) | NO | | | | | USED_BYTES | bigint | NO | | 0 | | | NODE_WITH_LEAST_FREE_SPACE | varchar(32) | NO | | | | | FREE_BYTES | bigint | NO | | 0 | | | NODE_WITH_LONGEST_UPTIME | varchar(32) | NO | | | | | LONGEST_UPTIME | bigint | NO | | 0 | | | POOL_WIDE_HIT_RATIO | bigint | NO | | 0 | | +--------------------------------+-------------+------+-----+---------+-------+ Wednesday, July 28, 2010
  • 26. libmemcachedprotocol • Ascii • Binary Wednesday, July 28, 2010
  • 27. memcached_binary_protocol_callback_st interface_v1_impl= { .interface_version= MEMCACHED_PROTOCOL_HANDLER_V1, .interface.v1= { .add= add_handler, .append= append_handler, .decrement= decrement_handler, .delete= delete_handler, .flush= flush_handler, .get= get_handler, .increment= increment_handler, .noop= noop_handler, .prepend= prepend_handler, .quit= quit_handler, .replace= replace_handler, .set= set_handler, .stat= stat_handler, .version= version_handler } }; Wednesday, July 28, 2010
  • 28. ./examples/memcached_light (everyone needs their own persistent Memcached server) Wednesday, July 28, 2010
  • 29. Examples! • tests/mem_functions.c • man “libmemcached_examples” Wednesday, July 28, 2010
  • 30. Brian Aker (brian.aker@datadifferential.com) twitter:brianaker url: Krow.net http://DataDifferential.com Wednesday, July 28, 2010