设为首页 收藏本站
查看: 953|回复: 0

[经验分享] Memcached缓存系统应用I--安装篇

[复制链接]

尚未签到

发表于 2018-12-25 14:06:26 | 显示全部楼层 |阅读模式
一. memcached 是什么?
  memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
  memcached是一个高性能的、分布式内存对象缓存系统,应用广泛。通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
  它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。还使用内置的内存块分配和哈希表算法,确保虚拟内存不会过来捣乱。
  Memcached 官方网站:http://www.danga.com/memcached
  二. memcached 的安装:
  注:memcached 用到了libevent这个库用于Socket的处理,所以还需要安装libevent.官网:http://www.monkey.org/~provos/libevent/
  1. 先安装libevent:
  [root@localhost software]# tar zxvf libevent-1.4.11-stable.tar.gz
  [root@localhost libevent-1.4.11-stable]# ./configure –prefix=/usr
  [root@localhost libevent-1.4.11-stable]# make
  [root@localhost libevent-1.4.11-stable]# make install
  2. 测试libevent是否安装成功
  [root@localhost libevent-1.4.11-stable]# ls -al /usr/lib | grep libevent
  lrwxrwxrwx   1 root root       22 07-10 13:10 libevent-1.1a.so.1 -> libevent-1.1a.so.1.0.2
  -rwxr-xr-x   1 root root    31596 2007-01-07 libevent-1.1a.so.1.0.2
  lrwxrwxrwx   1 root root       21 07-21 03:33 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3
  -rwxr-xr-x   1 root root   308088 07-21 03:33 libevent-1.4.so.2.1.3
  -rw-r--r--   1 root root   394474 07-21 03:33 libevent.a
  lrwxrwxrwx   1 root root       26 07-21 03:33 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3
  -rwxr-xr-x   1 root root   109490 07-21 03:33 libevent_core-1.4.so.2.1.3
  -rw-r--r--   1 root root   148742 07-21 03:33 libevent_core.a
  -rwxr-xr-x   1 root root      866 07-21 03:33 libevent_core.la
  lrwxrwxrwx   1 root root       26 07-21 03:33 libevent_core.so -> libevent_core-1.4.so.2.1.3
  lrwxrwxrwx   1 root root       27 07-21 03:33 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3
  -rwxr-xr-x   1 root root   246870 07-21 03:33 libevent_extra-1.4.so.2.1.3
  -rw-r--r--   1 root root   307370 07-21 03:33 libevent_extra.a
  -rwxr-xr-x   1 root root      873 07-21 03:33 libevent_extra.la
  lrwxrwxrwx   1 root root       27 07-21 03:33 libevent_extra.so -> libevent_extra-1.4.so.2.1.3
  -rwxr-xr-x   1 root root      831 07-21 03:33 libevent.la
  lrwxrwxrwx   1 root root       21 07-21 03:33 libevent.so -> libevent-1.4.so.2.1.3
  安装OK。
  3. 安装memcached,同时需要安装中指定libevent的安装位置
  [root@localhost software]# tar zxvf memcached-1.4.0.tar.gz
  [root@localhost memcached-1.4.0]# ./configure –with-libevent=/usr
  [root@localhost memcached-1.4.0]# make
  [root@localhost memcached-1.4.0]# make intall
  4. 测试是否成功安装memcached
  [root@localhost memcached-1.4.0]# ls -al /usr/local/bin | grep memcached
  -rwxr-xr-x  1 root root  188225 07-21 03:35 memcached
  安装OK。
  三. 如何启动 memcached 服务:
  只需要启动一个 memcached 监护进程,监护进程不需要配置文件,只要在命令行里面加三四个参数就可以了:
  [root@localhost bin]# memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
  -d: (run as a daemon) 选项是启动一个守护进程
  -m:(max memory to use for items in megabytes (default: 64 MB))是分配给Memcache使用的内存数量,单位是MB,我这里是100MB,

  -u:(assume>  -l:(interface to listen on)是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址127.0.0.1,
  -p:是设置Memcache监听的端口,这里设置了11211,最好是1024以上的端口,
  -c:选项是最大运行的并发连接数,默认是1024,这里设置了256,根据服务器的负载量来设定,
  -P:(save PID in , only used with -d option)是设置保存Memcache的pid文件,这里是保存在 /tmp/memcached.pid
  注:也可以启动多个守护进程,不过端口不能重复。
  四. 安装 Memcached 的PHP扩展:
  在PHP中使用Memcached,有两种方式:
  一种是安装PHP的memcached扩展。该扩展是用c写的,效率较高,需要在服务器上安装。
  另外一种则是直接使用客户端的php-memcached-client类库。
  下面是使用PECL中Memcache的专用扩展,因为毕竟是用C写的,效率高,而且安装部署起来也比较方便。
  1. 在 http://pecl.php.net/package/memcache 选择相应想要下载的memcache版本。我下载的是:memcache-2.2.5.tgz 版本。
  2. 安装 memcache
  [root@localhost software]# tar zxvf memcache-2.2.5.tgz
  [root@localhost software]# cd memcache-2.2.5
  [root@localhost memcache-2.2.5]# /usr/bin/phpize
  [root@localhost memcache-2.2.5]# ./configure –enable-memcache –with-php-config=/usr/bin/php-config –with-zlib-dir
  [root@localhost memcache-2.2.5]# make
  [root@localhost memcache-2.2.5]# make install
  这步会有类似这样的提示:Installing shared extensions: /usr/local/php/modules
  3. 把/etc/php.ini中的extension_dir = “./”修改为:extension_dir = "/usr/lib/php/modules"
  4. 并添加: extension=memcache.so
  也可执行以下shell命令,对php.ini文件的修改:
  sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"/nextension = "memcache.so"/n#' /usr/local/webserver/php/etc/php.ini
  五. 安装C/C++ Memcached客户端库:libmemcached
  下载:http://download.tangent.org/libmemcached-0.32.tar.gz
  1. 安装 libmemcached
  [root@localhost src]# tar zxvf libmemcached-0.32.tar.gz
  [root@localhost src]# cd libmemcached-0.32
  [root@localhost libmemcached-0.32]# ./configure --prefix=/usr
  [root@localhost libmemcached-0.32]# make && make install
  2. 检查安装结果
  [root@localhost src]# ls /usr/lib/libmemcache* //库文件
  [root@localhost src]# ls /usr/include/libmemcached/* //头文件
  [root@localhost src]# ls /usr/bin/mem* //命令行工具
  六. 应用:
  1. 启动 memcache 服务
  [root@localhost bin]# memcached -d -m 100 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
  2. 重启 Web 服务器
  [root@localhost bin]# service httpd restart
  3. 创建 demo 测试程序
  
  4. Memcached客户端与tokyotyrant DB操作访问
  
  5. C/C++ 与 Memcached 结合代码
  #include
  #include
  #include
  #include
  int main(int argc, char *argv[])
  {
  memcached_st *memc;
  memcached_return rc;
  memcached_server_st *servers;
  char value[8191];
  //连接服务器
  memc = memcached_create(NULL);
  servers = memcached_server_list_append(NULL, "127.0.0.1",11211, &rc);
  rc = memcached_server_push(memc, servers);
  memcached_server_free(servers);
  //存储数据
  strcpy(value, "This is c first value");
  rc = memcached_set(memc, "key1", 4, value, strlen(value),
  (time_t)180, (uint32_t)0);
  if (rc == MEMCACHED_SUCCESS) {
  printf("Save key:key1 data:/"%s/" success./n", value);
  }
  //获取数据
  char return_key[MEMCACHED_MAX_KEY];

  >  char *return_value;

  >  char *keys[]= {"key1"};

  >  uint32_t flags;
  rc = memcached_mget(memc, keys, key_length, 1);
  return_value = memcached_fetch(memc, return_key,
  &return_key_length, &return_value_length, &flags, &rc);
  if (rc == MEMCACHED_SUCCESS) {
  printf("Fetch key:%s data:%s/n", return_key, return_value);
  }
  //删除数据
  rc = memcached_delete(memc, "key1", 4, (time_t)0);
  if (rc == MEMCACHED_SUCCESS) {
  printf("Delete Key key1 success./n");
  }
  //释放内存
  memcached_free(memc);
  return 0;
  }
  编译源代码:
  [root@localhost html]# gcc -o cmem cmem.c -lmemcached
  [root@localhost html]# ./cmem //执行
  Save key:key1 data:"This is c first value" success.
  Fetch key:key1 data:This is c first value
  Delete Key key1 success.
  6. C/C++ 与 Memcached 分布式结合代码
  #include
  #include
  #include
  #include
  int main(int argc, char *argv[])
  {
  memcached_st *memc;
  memcached_return rc;
  memcached_server_st *servers;
  char value[8191];
  //connect multi server
  memc = memcached_create(NULL);
  servers = memcached_server_list_append(NULL, "localhost", 11211, &rc);
  servers = memcached_server_list_append(servers, "localhost", 11212, &rc);
  rc = memcached_server_push(memc, servers);
  memcached_server_free(servers);
  //Save multi data

  >  char *keys[]= {"key1", "key2", "key3"};

  >  char *values[] = {"This is c first value", "This is c second value", "This is c third value"};

  >  for (i=0; i   char *return_value;

  >  uint32_t flags;
  rc = memcached_mget(memc, keys, key_length, 3);
  while ((return_value = memcached_fetch(memc, return_key, &return_key_length, &return_value_length, &flags, &rc))) {
  if (rc == MEMCACHED_SUCCESS) {
  printf("Fetch key:%s data:%s/n", return_key, return_value);
  }
  }
  //Delete multi data
  for (i=0; i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655775-1-1.html 上篇帖子: Nginx结合memcached实现LNMMP平台搭建 下篇帖子: Linux 下memcached 启动/结束方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表