• linux下memcache的运用,和php结合小案例。


    由于是采用脚本安装的memache,所以软件的依赖关系我就不操心了,脚本已经帮我装好了和php的关联关系,实在是很省心。后续如果有需要,我会针对windows和linux各写一个安装和配置的说明,一来提高自己的水平,而来也给有需要的朋友们。

    因此这次我将关注点放在memcache的配置以及php的操作上。

    1.启动Memcache的服务器端:

    如果是虚拟机的话,你的写的ip要能用ping 命令ping通。这样才可以使用。我刚开始就在上面浪费了许多时间。
    # ./memcached -d -m 10 -u root -l 127.0.0.1  -p  12000  -c  256 -P /tmp/memcached.pid

    1 -d选项是启动一个守护进程,
    2 -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
    3 -u是运行Memcache的用户,我这里是root,
    4 -l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址127.0.0.15 -p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
    6 -c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
    7 -P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

    memcache中的常量。

    memcache中set(‘key’, ‘value’, 0, 60)

    其中的0是MEMCACHE_COMPRESSED ,的值。

    MEMCACHE_COMPRESSED (integer)
    
    用于在 Memcache::set(), Memcache::add() 和 Memcache::replace()几个方法中指定是否对写入数据压缩。 
    
    MEMCACHE_HAVE_SESSION (integer)   
    
    1代表当前Memcache session处理器可用,其他为0

    常用的几个方法:

    Memcache::add()方法在缓存服务器之前不存在key时, 以key作为key存储一个变量var到缓存服务器。 同样可以使用函数memcache_add()

    bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

     

    key

    将要分配给变量的key。

    var

    将要被存储的变量。字符串和整型被以原文存储,其他类型序列化后存储。

    flag

    使用MEMCACHE_COMPRESSED标记对数据进行压缩(使用zlib)。

    expire

    当前写入缓存的数据的失效时间。如果此值设置为0表明此数据永不过期。你可以设置一个UNIX时间戳或 以秒为单位的整数(从当前算起的时间差)来说明此数据的过期时间,但是在后一种设置方式中,不能超过 2592000秒(30天)。

    分割线后是我自己写的一个小的demo,简单说明memcache的用法。

    关于memcache,用法实在是很简易。网上的资料也很多。下面这个网址可以参考下,写的很不错。

    http://www.ccvita.com/259.html


     

     1 <?php
     2     header("content-type:text/html;charset=utf-8");
     3     
     4     //实例化Memcache类.初始化条件
     5     $memcache    =    new Memcache;
     6     $memcache -> connect('127.0.0.1', 12000);
     7 
     8     //初始化mysql服务.
     9     $link    =    @mysql_connect('127.0.0.1', 'root', '123456', 'test')or die('数据库连接失败'.mysql_error());
    10     mysql_select_db('test');
    11     mysql_set_charset('utf8');
    12 
    13     //建立sql语句
    14     $sql    =    'select * from user';
    15     $key    =    md5($sql);
    16 
    17     if($memcache -> get($key)){
    18         //memecache缓存区间
    19         echo '我是读的memcache缓存';
    20         $result    =    $memcache -> get($key);
    21     }else{
    22         //mysql区间
    23         echo '我是读的mysql';
    24         $handle    =    mysql_query($sql);
    25         if($handle){
    26             while($array = mysql_fetch_array($handle)){
    27                 $result[]    =    $array;
    28             }
    29         }
    30         mysql_close();                                              //关闭mysql资源
    31         $memcache -> set($key, $result, MEMCACHE_COMPRESSED, 5);  //MEMCACHE_COMPRESSED是常量1. 缓存5秒
    32     }
    33 
    34 
    35     echo '<pre>';
    36         print_r($result);
    37     echo '</pre>';
    38 
    39     
    40 
    41 ?>

     下面是ThinkPHP里面写的一个小的demo.

    首先要配置Common下面的config文件。配置文件如下:

    <?php
    return array(
        /* 数据库设置 */
        'DB_TYPE'               =>  'Mysql',     // 数据库类型
        'DB_HOST'               =>  'localhost', // 服务器地址
        'DB_NAME'               =>  'datebase',          // 数据库名
        'DB_USER'               =>  'root',      // 用户名
        'DB_PWD'                =>  '123456',          // 密码
        'DB_PORT'               =>  '3306',        // 端口
        'DB_PREFIX'             =>  'smm_',    // 数据库表前缀
    
        /* 数据缓存设置 */
        'DATA_CACHE_TIME'       =>  5,      // 数据缓存有效期 0表示永久缓存,我写了5秒,为了测试方便。
        'DATA_CACHE_COMPRESS'   =>  true,   // 数据缓存是否压缩缓存
        'DATA_CACHE_CHECK'      =>  true,   // 数据缓存是否校验缓存
        'DATA_CACHE_PREFIX'     =>  'HOME_',     // 缓存前缀
        'DATA_CACHE_TYPE'       =>  'Memcache',  // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
        'DATA_CACHE_PATH'       =>  TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
        
    
    );

    例子如下:

     1 class IndexController extends Controller {
     2     //载入添加数据库
     3     private $smm_iron_user;
     4 
     5     //初始化数据库,避免多次实例化。
     6     public function __construct(){
     7         parent::__construct();
     8         $this -> smm_iron_user = M('iron_user');
     9     }
    10 
    11     public function index () {
    12         $sql       =    "select * from smm_iron_user";
    13         $md5sql    =    md5($sql);
    14 
    15         if(S($md5sql)){
    16             echo '我读的是缓存';
    17             $result    =    S($md5sql);
    18         }else{
    19             echo '我读的是mysql';
    20             $result    =    $this -> smm_iron_user -> query($sql);
    21             S($md5sql, $result, 5);
    22         }
    23         //S($md5sql,null);
    24         dump($result);die();
    25         
    26         
    27     }
    28 
    29 }

     

  • 相关阅读:
    ubuntu18.04下eclipse修改maven源为阿里源
    Java中使用队列Queue
    Redis学习笔记——Redis的基本操作
    ubuntu安装redis
    Spring Boot使用监听器Listener
    Spring Boot中在程序中获得application.properties中的值
    Spring Boot使用过滤器Filter
    基于GTID的主从架构异常处理流程
    goroutine与调度器
    使用synergyc共享键鼠
  • 原文地址:https://www.cnblogs.com/roverliang/p/4758990.html
Copyright © 2020-2023  润新知