linux服务器历险之使用memcached

2023-11-07 17:38

本文主要是介绍linux服务器历险之使用memcached,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

一,为什么要使用memcached
    最优秀的cache软件,有效减轻数据库服务器的压力
    不用它还要用哪个?

二,下载
    从何处下载?
    http://www.danga.com/memcached/
    libevent从何处下载?
    http://monkey.org/~provos/libevent/
    php的memcache模块下载:
    http://pecl.php.net/package/memcache/download/
三,如何进行安装libevent?
   tar -zxvf libevent-1.3e.tar.gz
   ./configure --prefix=/usr
   make
   make install

四,检查libevent安装是否成功?
    [root@datam libevent-1.3e]# ls -al /usr/lib | grep libevent
lrwxrwxrwx   1 root root      22 Oct  6 00:20 libevent-1.1a.so.1 -> libevent-1.1a.so.1.0.2
-rwxr-xr-x   1 root root   31596 Jan  7  2007 libevent-1.1a.so.1.0.2
lrwxrwxrwx   1 root root      22 Oct  6 00:36 libevent-1.3e.so.1 -> libevent-1.3e.so.1.0.3
-rwxr-xr-x   1 root root  338439 Oct  6 00:36 libevent-1.3e.so.1.0.3
-rw-r--r--   1 root root  533978 Oct  6 00:36 libevent.a
-rwxr-xr-x   1 root root     828 Oct  6 00:36 libevent.la
lrwxrwxrwx   1 root root      22 Oct  6 00:36 libevent.so -> libevent-1.3e.so.1.0.3

 五,安装memcached
    tar -zxvf memcached-1.2.2.tar.gz
     安装memcached时,需要指定libevent的安装位置:
    ./configure --with-libevent=/usr  --enable-threads
       # make
   # make install
六,检查memcached安装是否成功?
   1看文件
    [root@datam memcached-1.2.2]# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 141771 Oct  6 00:41 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 151317 Oct  6 00:41 /usr/local/bin/memcached-debug

   2,测试运行
   [root@datam memcached-1.2.2]# /usr/local/bin/memcached -h
/usr/local/bin/memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory
    出错了,怎么办?
进行检查
[root@datam memcached-1.2.2]# LD_DEBUG=libs memcached -v
      4962:     find library=libevent-1.3e.so.1 [0]; searching
      4962:      search cache=/etc/ld.so.cache
      4962:      search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64                (system search path)
      4962:       trying file=/lib64/tls/x86_64/libevent-1.3e.so.1
      4962:       trying file=/lib64/tls/libevent-1.3e.so.1
      4962:       trying file=/lib64/x86_64/libevent-1.3e.so.1
      4962:       trying file=/lib64/libevent-1.3e.so.1
      4962:       trying file=/usr/lib64/tls/x86_64/libevent-1.3e.so.1
      4962:       trying file=/usr/lib64/tls/libevent-1.3e.so.1
      4962:       trying file=/usr/lib64/x86_64/libevent-1.3e.so.1
      4962:       trying file=/usr/lib64/libevent-1.3e.so.1
      4962:
memcached: error while loading shared libraries: libevent-1.3e.so.1: cannot open shared object file: No such file or directory
进行处理:
     [root@datam memcached-1.2.2]# ln -s /usr/lib/libevent-1.3e.so.1 /usr/lib64/libevent-1.3e.so.1
[root@datam memcached-1.2.2]# memcached -h
memcached 1.2.2
-p <num>      TCP port number to listen on (default: 11211)
-U <num>      UDP port number to listen on (default: 0, off)
-s <file>     unix socket path to listen on (disables network support)
-l <ip_addr>  interface to listen on, default is INDRR_ANY
-d            run as a daemon
-r            maximize core file limit
-u <username> assume identity of <username> (only when run as root)
-m <num>      max memory to use for items in megabytes, default is 64 MB
-M            return error on memory exhausted (rather than removing items)
-c <num>      max simultaneous connections, default is 1024
-k            lock down all paged memory
-v            verbose (print errors/warnings while in event loop)
-vv           very verbose (also print client commands/reponses)
-h            print this help and exit
-i            print memcached and libevent license
-b            run a managed instanced (mnemonic: buckets)
-P <file>     save PID in <file>, only used with -d option
-f <factor>   chunk size growth factor, default 1.25
-n <bytes>    minimum space allocated for key+value+flags, default 48

  至此安装完毕
  
  七,如何启动memcached的服务端?
         下面,我们来启动一个Memcached的服务器端:
    # /usr/local/bin/memcached -d -m 10  -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
/usr/local/bin/memcached -d -m 128 -l localhost -p 11211 -u root
 -d 以守护程序(daemon)方式运行 memcached;
 -m 设置 memcached 可以使用的内存大小,单位为 M;
 -l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;
 -p 设置监听的端口,默认为 11211,所以也可以不设置此参数;
 -u 指定用户;
 -t <num>       number of threads to use, default 4
如果有此项,说明已经支持了线程,就可以在启动的时候使用 -t 选项来启动多线程

然后启动的时候必须加上你需要支持的线程数量:
/usr/local/memcache/bin/memcached -t 1024


  [root@datam memcached-1.2.2]# /usr/local/bin/memcached -d -m 128 -l localhost -p 11211 -u root
Illegal address: localhost

  [root@datam memcached-1.2.2]# /usr/local/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u root
[root@datam memcached-1.2.2]#

  至此启动成功

八,memcached的相关知识?
    如何停止?如何重启?如何刷新其内容?等等
    使用这个文件来实现:
    #! /bin/sh
#
# chkconfig: - 55 45
# description:  The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached

# Source function library.
. /etc/rc.d/init.d/functions

PORT1=11211
USER=nobody
MAXCONN=1024
CACHESIZE=64
OPTIONS="-t 8"
MEMDAEMON=/usr/local/bin/memcached

if [ -f /etc/sysconfig/memcached ];then
        . /etc/sysconfig/memcached
fi

# Check that networking is up.
if [ "$NETWORKING" = "no" ]
then
        exit 0
fi

RETVAL=0
prog="memcached"

start () {
        echo -n $"Starting $prog: "
        # insure that /var/run/memcached has proper permissions
        #chown $USER /var/run/memcached
        daemon $MEMDAEMON -d -p $PORT1 -u $USER  -m $CACHESIZE -c $MAXCONN $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/memcached
}
stop () {
        echo -n $"Stopping $prog: "
        killproc memcached
        RETVAL=$?
        echo
        if [ $RETVAL -eq 0 ] ; then
            rm -f /var/lock/subsys/memcached
            rm -f /var/run/memcached.pid
        fi
}

restart () {
        stop
        start
}


# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status memcached
        ;;
  restart|reload)
        restart
        ;;
  condrestart)
        [ -f /var/lock/subsys/memcached ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
        exit 1
esac

exit $?

  
九:配置php能访问memcached
wget http://pecl.php.net/get/memcache-2.2.0.tgz
tar -zxvf memcache-2.2.0.tgz
   [root@datam memcache-2.2.0]# /usr/local/bin/phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20050922
Zend Extension Api No:   220051025
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF
environment variable is set correctly and then rerun this script.

没有autoconf
yum install autoconf
[root@datam memcache-2.2.0]# yum install autoconf
[root@datam memcache-2.2.0]# /usr/local/bin/phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20050922
Zend Extension Api No:   220051025

[root@datam memcache-2.2.0]# ./configure --enable-memcache --with-php-config=/usr/local/bin/php-config --with-zlib-dir

make
[root@datam memcache-2.2.0]# make install
Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20050922/

至此安装成功

下面我们需把此安装成功的模块添加到php中去
vi php.ini
add下面的这两行
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20050922/"
extension=memcache.so

然后重启apache
用phpinfo()看到存在以下信息,则表示模块安装成功

memcache

                                                           
memcache supportenabled
Active persistent connections 0
Revision $Revision: 1.86 $

                                                                                                                                                                                                                               
DirectiveLocal ValueMaster Value
memcache.allow_failover11
memcache.chunk_size81928192
memcache.default_port1121111211
memcache.hash_functioncrc32crc32
memcache.hash_strategystandardstandard
memcache.max_failover_attempts2020


十:编写php代码测试访问memcached

[ 接口介绍 ]
服 务器端和客户端都安装配置好了,现在我们就来测试以下我们的成果。Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具 体可以参考PHP手册 “LXXV. Memcache Functions” 这章。我们为了简单方便,就使用面向对象的方式,也便于维护和编写代码。Memcache面向对象的常用接口包括:

Memcache::connect -- 打开一个到Memcache的连接
Memcache::pconnect -- 打开一个到Memcache的长连接
Memcache::close -- 关闭一个Memcache的连接
Memcache::set -- 保存数据到Memcache服务器上
Memcache::get -- 提取一个保存在Memcache服务器上的数据
Memcache::replace -- 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::delete -- 从Memcache服务器上删除一个保存的项目
Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
Memcache::getStats -- 获取当前Memcache服务器运行的状态

示例程序:

<?php
//连接
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);

//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br>";

//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";

//保存数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";

//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br>";

//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br>";

//关闭连接
$mem->close();
?>

如果正常的话,浏览器将输出:
Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
Get key1 value:
Get key2 value:

十一:测试memcached缓存数据库的查询结果

<?php
  /*
    测试memcache缓存mysql的查询结果
              by hd
              2007.10.06
  */
   //定义访问数据库的常量
   define(SERVER_DATA_HOST,"127.0.0.1");
   define(SERVER_DATA_USER,"root");
   define(SERVER_DATA_PASS,"");
   define(SERVER_DATA_BASE,"liuyan");

   //定义访问数据库的常量
   define(SERVER_MEM_HOST,"127.0.0.1");
   define(SERVER_MEM_PORT,"11211");
  
   //建立到数据库的连接
   $dblink=mysql_connect(SERVER_DATA_HOST,SERVER_DATA_USER,SERVER_DATA_PASS);
   mysql_select_db(SERVER_DATA_BASE,$dblink);

   //定义到缓存的链接
    $memlink = memcache_connect(SERVER_MEM_HOST,SERVER_MEM_PORT);
  


        //定义访问数据库的函数
        function sqlres($sqlstr)
        {
               global $dblink;
               global $memlink;
               $memstr = md5($sqlstr);
               $memres = array();
               if(!$memlink->get($memstr))
               {
                       $dbres = mysql_query($sqlstr,$dblink);
                       $arrdata=array();
                       while ($dbrow = mysql_fetch_assoc($dbres))
                       {
                              $arrdata[]=$dbrow;
                       }

                       $memlink->set($memstr,$arrdata);

               }
               else
               {
                       $memres = $memlink->get($memstr);
              
               }
               return $memres;
        }
  
        $sqlstr="select * from rank";
        $arrdata=sqlres($sqlstr);
        print_r($arrdata);
?>

十一:需要注意的问题

十一:封装一个访问memcached的类供调用
十一:           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述

这篇关于linux服务器历险之使用memcached的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/365221

相关文章

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅