memcached安装

版本V1.0

时间2012-07-30

版权GPL

作者itnihao 邮箱 itnihao@qq.com

博客 http://itnihao.blog.51cto.com

如需重新发行,请注明以上信息,谢谢合作

  1. 第一部分 下载源码进行安装
  2. wget https://github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz 
  3. tar xvf libevent-2.0.19-stable.tar.gz 
  4. cd libevent-2.0.19-stable 
  5. ./configure 
  6. make 
  7. make install 
  8.  
  9. wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz 
  10. tar xvf memcached-1.4.13.tar.gz  
  11. cd memcached-1.4.13 
  12. ./configure 
  13. make 
  14. make install 
  15.  
  16. echo "/usr/local/lib" >> /etc/ld.so.conf 
  17. ldconfig 
  18. /usr/local/bin/memcached  -m 32m -p 11211 -d -u root -P /var/run/memcached.pid -c 1024 
  19.  
  20. wget https://launchpad.net/libmemcached/1.0/0.34/+download/libmemcached-0.34.tar.gz 
  21. tar xvf libmemcached-0.34.tar.gz  
  22. cd libmemcached-0.34 
  23. ./configure --with-memcached=/usr/local/bin/memcached 
  24. i#./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/bin/memcached 
  25. make 
  26. make install 
  27.  
  28. #wget https://launchpad.net/libmemcached/1.0/1.0.8/+download/libmemcached-1.0.8.tar.gz 
  29. #wget https://launchpad.net/memcached-udfs/trunk/version-1.0/+download/memcached_functions_mysql-1.0.tar.gz 
  30. wget https://launchpad.net/memcached-udfs/trunk/1.1/+download/memcached_functions_mysql-1.1.tar.gz 
  31. tar xvf memcached_functions_mysql-1.1.tar.gz 
  32. cd memcached_functions_mysql-1.1 
  33. ./configure --with-mysql=/usr/local/mysql/bin/mysql_config  --libdir=/usr/local/mysql/lib/mysql --with-libmemcached=/usr/local 
  34. make 
  35. make install 
  36. cd utils/ #注意此处的my.cnf 必须为osocket=/var/lib/mysql/mysql.sock,否则,运行脚本会报错 #find /usr/ -name libmemcached_functions_mysql.so ln -s /usr/local/mysql/lib/mysql/libmemcached_functions_mysql.so /usr/local/mysql/lib/plugin/libmemcached_functions_mysql.so ./install.pl -s -u=root -p=itnihao

 第二部分 在mysql进行设置memcached

  1. mysql> select name,dl from mysql.func; 
  2. +------------------------------+---------------------------------+ 
  3. | name                         | dl                              | 
  4. +------------------------------+---------------------------------+ 
  5. | memc_cas_by_key              | libmemcached_functions_mysql.so | 
  6. | memc_cas                     | libmemcached_functions_mysql.so | 
  7. | memc_servers_set             | libmemcached_functions_mysql.so | 
  8. | memc_add                     | libmemcached_functions_mysql.so | 
  9. | memc_libmemcached_version    | libmemcached_functions_mysql.so | 
  10. | memc_add_by_key              | libmemcached_functions_mysql.so | 
  11. | memc_server_count            | libmemcached_functions_mysql.so | 
  12. | memc_stat_get_keys           | libmemcached_functions_mysql.so | 
  13. | memc_append                  | libmemcached_functions_mysql.so | 
  14. | memc_replace_by_key          | libmemcached_functions_mysql.so | 
  15. | memc_prepend                 | libmemcached_functions_mysql.so | 
  16. | memc_behavior_get            | libmemcached_functions_mysql.so | 
  17. | memc_udf_version             | libmemcached_functions_mysql.so | 
  18. | memc_set_by_key              | libmemcached_functions_mysql.so | 
  19. | memc_get_by_key              | libmemcached_functions_mysql.so | 
  20. | memc_increment               | libmemcached_functions_mysql.so | 
  21. | memc_behavior_set            | libmemcached_functions_mysql.so | 
  22. | memc_stats                   | libmemcached_functions_mysql.so | 
  23. | memc_list_distribution_types | libmemcached_functions_mysql.so | 
  24. | memc_list_hash_types         | libmemcached_functions_mysql.so | 
  25. | memc_append_by_key           | libmemcached_functions_mysql.so | 
  26. | memc_servers_behavior_set    | libmemcached_functions_mysql.so | 
  27. | memc_replace                 | libmemcached_functions_mysql.so | 
  28. | memc_set                     | libmemcached_functions_mysql.so | 
  29. | memc_prepend_by_key          | libmemcached_functions_mysql.so | 
  30. | memc_get                     | libmemcached_functions_mysql.so | 
  31. | memc_list_behaviors          | libmemcached_functions_mysql.so | 
  32. | memc_delete                  | libmemcached_functions_mysql.so | 
  33. | memc_stat_get_value          | libmemcached_functions_mysql.so | 
  34. | memc_decrement               | libmemcached_functions_mysql.so | 
  35. | memc_delete_by_key           | libmemcached_functions_mysql.so | 
  36. | memc_servers_behavior_get    | libmemcached_functions_mysql.so | 
  37. +------------------------------+---------------------------------+ 

 第三部分memcached的应用实例

  1. #对功能进行测试,源码包已经提供测试模块 
  2. cat memcached_functions_mysql-1.1/sql/trigger_fun.sql 
  3. mysql> use test 
  4. drop table if exists urls; 
  5. create table urls ( 
  6.   id int(3) not null, 
  7.   url varchar(64) not null default '', 
  8.   primary key (id) 
  9.   ); 
  10.  
  11.  
  12. mysql> select memc_servers_set('localhost:11211'); 
  13. +-------------------------------------+ 
  14. | memc_servers_set('localhost:11211') | 
  15. +-------------------------------------+ 
  16. |                                   0 | 
  17. +-------------------------------------+ 
  18.  
  19. mysql> select memc_set('urls:sequence', 0); 
  20. +------------------------------+ 
  21. | memc_set('urls:sequence', 0) | 
  22. +------------------------------+ 
  23. |                            1 | 
  24. +------------------------------+ 
  25.  
  26. mysql>DELIMITER | 
  27.  
  28. DROP TRIGGER IF EXISTS url_mem_insert | 
  29. CREATE TRIGGER url_mem_insert 
  30. BEFORE INSERT ON urls 
  31. FOR EACH ROW BEGIN 
  32.     SET NEW.idmemc_increment('urls:sequence');  
  33.     SET @mmmemc_set(concat('urls:',NEW.id), NEW.url); 
  34. END | 
  35.  
  36. DROP TRIGGER IF EXISTS url_mem_update | 
  37. CREATE TRIGGER url_mem_update 
  38. BEFORE UPDATE ON urls 
  39. FOR EACH ROW BEGIN 
  40.     SET @mmmemc_replace(concat('urls:',OLD.id), NEW.url); 
  41. END | 
  42.  
  43. DROP TRIGGER IF EXISTS url_mem_delete | 
  44. CREATE TRIGGER url_mem_delete 
  45. BEFORE DELETE ON urls 
  46. FOR EACH ROW BEGIN 
  47.     SET @mmmemc_delete(concat('urls:',OLD.id)); 
  48. END | 
  49.  
  50. DELIMITER ; 
  51.  
  52. insert into urls (url) values ('http://google.com'); 
  53. insert into urls (url) values ('http://lycos.com/'); 
  54. insert into urls (url) values ('http://tripod.com/'); 
  55. insert into urls (url) values ('http://microsoft.com/'); 
  56. insert into urls (url) values ('http://slashdot.org'); 
  57. insert into urls (url) values ('http://mysql.com'); 
  58. select * from urls; 
  59.  
  60. select memc_get('urls:1'); 
  61. select memc_get('urls:2'); 
  62. select memc_get('urls:3'); 
  63. select memc_get('urls:4'); 
  64. select memc_get('urls:5'); 
  65. select memc_get('urls:6'); 
  66.  
  67. update urls set url'http://mysql.com/sun' where url = 'http://mysql.com'
  68. select url from urls where url = 'http://mysql.com/sun'
  69. select memc_get('urls:6'); 
  70.  
  71. delete from urls where url = 'http://microsoft.com/'
  72. select * from urls where url='http://microsoft.com/'
  73. select memc_get('urls:4'); 
  74.  
  75.  
  76.  
  77.  
  78. mysql> select memc_servers_set('192.168.16.21:11211'); 
  79. +-----------------------------------------+ 
  80. | memc_servers_set('192.168.16.21:11211') | 
  81. +-----------------------------------------+ 
  82. |                                       0 | 
  83. +-----------------------------------------+ 
  84.  
  85. mysql> select memc_server_count(); 
  86. +---------------------+ 
  87. | memc_server_count() | 
  88. +---------------------+ 
  89. |                   1 | 
  90. +---------------------+ 
  91.  
  92. mysql> select memc_list_behaviors()\G 
  93. *************************** 1. row *************************** 
  94. memc_list_behaviors():  
  95. MEMCACHED SERVER BEHAVIORS 
  96. MEMCACHED_BEHAVIOR_SUPPORT_CAS 
  97. MEMCACHED_BEHAVIOR_NO_BLOCK 
  98. MEMCACHED_BEHAVIOR_TCP_NODELAY 
  99. MEMCACHED_BEHAVIOR_HASH 
  100. MEMCACHED_BEHAVIOR_CACHE_LOOKUPS 
  101. MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE 
  102. MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE 
  103. MEMCACHED_BEHAVIOR_BUFFER_REQUESTS 
  104. MEMCACHED_BEHAVIOR_KETAMA 
  105. MEMCACHED_BEHAVIOR_POLL_TIMEOUT 
  106. MEMCACHED_BEHAVIOR_RETRY_TIMEOUT 
  107. MEMCACHED_BEHAVIOR_DISTRIBUTION 
  108. MEMCACHED_BEHAVIOR_BUFFER_REQUESTS 
  109. MEMCACHED_BEHAVIOR_USER_DATA 
  110. MEMCACHED_BEHAVIOR_SORT_HOSTS 
  111. MEMCACHED_BEHAVIOR_VERIFY_KEY 
  112. MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT 
  113. MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED 
  114. MEMCACHED_BEHAVIOR_KETAMA_HASH 
  115. MEMCACHED_BEHAVIOR_BINARY_PROTOCOL 
  116. MEMCACHED_BEHAVIOR_SND_TIMEOUT 
  117. MEMCACHED_BEHAVIOR_RCV_TIMEOUT 
  118. MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT 
  119. MEMCACHED_BEHAVIOR_IO_MSG_WATERMARK 
  120. MEMCACHED_BEHAVIOR_IO_BYTES_WATERMARK 
  121.         
  122. MEMCACHED_HASH_DEFAULT 
  123. MEMCACHED_HASH_MD5 
  124. MEMCA 
  125.  
  126.  
  127. mysql> select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_NO_BLOCK','1');  
  128. +--------------------------------------------------------------+ 
  129. | memc_servers_behavior_set('MEMCACHED_BEHAVIOR_NO_BLOCK','1') | 
  130. +--------------------------------------------------------------+ 
  131. |                                                            0 | 
  132. +--------------------------------------------------------------+ 
  133.  
  134. mysql> select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_TCP_NODELAY','1'); 
  135. +-----------------------------------------------------------------+ 
  136. | memc_servers_behavior_set('MEMCACHED_BEHAVIOR_TCP_NODELAY','1') | 
  137. +-----------------------------------------------------------------+ 
  138. |                                                               0 | 
  139. +-----------------------------------------------------------------+ 

 测试

  1. #向表urls中插入数据,然后查看memcached是否对数据执行set操作。 
  2. mysql> insert into urls (url) values ('http://google.com'); 
  3. mysql> insert into urls (url) values ('http://lycos.com/'); 
  4. mysql> insert into urls (url) values ('http://tripod.com/'); 
  5. mysql> insert into urls (url) values ('http://microsoft.com/'); 
  6. mysql> insert into urls (url) values ('http://slashdot.org'); 
  7. mysql> insert into urls (url) values ('http://mysql.com'); 
  8. mysql> select * from urls; 
  9.  
  10. mysql> select memc_get('urls:8'); 
  11. +--------------------+ 
  12. | memc_get('urls:8') | 
  13. +--------------------+ 
  14. | http://google.com  | 
  15. +--------------------+ 
  16. 1 row in set (0.00 sec) 
  17.  
  18. mysql> select memc_get('urls:9'); 
  19. +--------------------+ 
  20. | memc_get('urls:9') | 
  21. +--------------------+ 
  22. | NULL               | 
  23. +--------------------+ 
  24. 1 row in set (0.05 sec) 
  25.  
  26. mysql> select memc_get('urls:10'); 
  27. +---------------------+ 
  28. | memc_get('urls:10') | 
  29. +---------------------+ 
  30. | http://tripod.com/  | 
  31. +---------------------+ 
  32. 1 row in set (0.00 sec) 
  33.  
  34.  
  35. #在memcached上telent查看数据更新 
  36. [root@localhost ~]# telnet 192.168.16.21 11211 
  37. Trying 192.168.16.21... 
  38. Connected to 192.168.16.21. 
  39. Escape character is '^]'. 
  40. get urls:8 
  41. VALUE urls:8 0 17 
  42. http://google.com 
  43. END 
  44. quit 
  45. Connection closed by foreign host. 
  46.  
  47.  
  48. mysql> update test.urls set url="http://www.baidu.com" where id=8
  49. Query OK, 0 rows affected, 1 warning (0.00 sec) 
  50. Rows matched: 1  Changed: 0  Warnings: 1 
  51.  
  52. #在mysql中更新数据,查看memcached中是否会更新呢 
  53. mysql> select * from urls;                                               
  54. +----+-----------------------+ 
  55. | id | url                   | 
  56. +----+-----------------------+ 
  57. |  8 | http://www.baidu.com  | 
  58. |  9 | http://lycos.com/     | 
  59. | 10 | http://tripod.com/    | 
  60. | 11 | http://microsoft.com/ | 
  61. | 12 | http://slashdot.org   | 
  62. | 13 | http://mysql.com      | 
  63. +----+-----------------------+ 
  64. 6 rows in set (0.00 sec) 
  65. [root@localhost ~]#  telnet 192.168.16.21 11211 
  66. Trying 192.168.16.21... 
  67. Connected to 192.168.16.21. 
  68. Escape character is '^]'. 
  69. get urls:8 
  70. VALUE urls:8 0 20 
  71. http://www.baidu.com 
  72. END 
  73. quit 
  74. Connection closed by foreign host. 

需要注意libmemcached-0.40以上的版本在memcached_functions_mysql编译会出现以下问题,
  1. servers.c: In function ‘memc_servers_set’: 
  2. servers.c:121: error: ‘memcached_st’ has no member named ‘hosts’ 
  3. servers.c:122: error: ‘memcached_st’ has no member named ‘hosts’ 
  4. servers.c:123: error: ‘memcached_st’ has no member named ‘hosts’ 

源代码此处定义的问题,暂时没有找到解决方法,希望各位高手解决这个问题

  1. memcached_version(master_memc); 
  2.   if (master_memc->hosts[0].major_version >= 1 && 
  3.       master_memc->hosts[0].minor_version >= 2 && 
  4.       master_memc->hosts[0].micro_version >= 4) 
  5.     memcached_behavior_set(master_memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, set); 
  6.   memcached_server_list_free(servers); 
  7.   pthread_mutex_unlock(&memc_servers_mutex); 
  8.   fprintf(stderr, "rc %d\n", rc); 
  9.   return ((long long) rc == MEMCACHED_SUCCESS ? 0 : rc); 

参考以下链接

http://asyty.iteye.com/blog/1442587

http://www.bluegecko.net/mysql/memcached-functions-for-mysql-1-1-released/

http://mjs123.iteye.com/blog/643557

https://jiwaisms.googlecode.com/svn/wiki/[%E7%AC%94%E8%AE%B0]memcache%E5%AE%89%E8%A3%85%E6%80%BB%E7%BB%93.txt

http://www.haogongju.net/art/1333032

http://www.cnblogs.com/sunss/archive/2011/06/07/2074435.html

http://www.mylearning.cc/htmlfile/ArticleList/2011/7/27/bb19f32f-38a7-43b4-acd3-0eb6d24edfff.html