• memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论


    附:请浅谈memcached的机制

    答: ①基于C/S架构,协议比较简单

        c/s架构,此时memcached为服务器端,我们可以使用如PHP,c++/c等程序连接memcached服务器。

        memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议,因此通过telnet也能在memcached上保存、读取数据。

       ②基于libevent事件来处理的

        libevent是一套垮平台的事件处理接口的封装,能够处理兼容包括这些操作系统:

          windows/Linux/BSD/Solaris等操作系统的事件处理

        memcached使用libevent来进行网络并发连接处理,能够保持在很大的并发情况下,仍旧可以保持快速的响应能力!

      ③内置内存存储方式

        为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中,由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部的数据消失,另外内存容量达到指定值之后,就基于LRU(least recently used)算法自动删除不使用的缓存。memcached本身是为缓存设计的服务器,因此并没有过多考虑数据的永久性问题。

      ④基于客户端分布式

        memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息,那么,怎样进行分布式呢?这完全取决于客户端的实现。

          memcached1        memcached2          memcached3    

                      

                      分布式算法

                      客户端程序库

                  

                      PHP应用程序  

        PHP应用程序要管理三个memcached服务器,客户端进行操作,然后数据保存在经过memcached分布式算法的memcached服务器中一个上。

    memcached细节讨论:

       1、生命周期

          ①Apache关闭后

          ②Apache没关闭,但是缓存时间到

          ③memcached服务关闭

       2、memcached数据存在什么地方

          存放于memcached所在机器的这个内存中

       3、memcached最佳实践

          ①将从数据库查询的数据存放在memcached中

            <?php

              $user_id = (int)$_GET['user_id'];

              //判断memcached中是否存在user_id

              $mc = new Memcache();

              if ($user = $mc -> get('user_id')) {

                //找到,直接取出值

                dump($user); 

              } else {

                //未找到查询数据库

                ob_start();

                $user = //查询数据库操作,得到数据

                //缓存起来,压缩,保存24小时

                $mc -> set($user_id, $user, MEMCACHED_COMPRESSED, 3600*24);

                //分配到模板中

                $this->assign('user', $user);

                ob_end_flush();

                }

          ②将session数据存放在memcached中

             默认情况下,session数据是存在服务器中的文件上的。

             完成以下配置,直接搞定:

            ①保证memcache扩展开启,memcached运行

            ②设置php.ini中session.save_handler = memcache

            ③设置php.ini中session.save_path = tcp://localhost:11211

            ④也可以通过php函数ini_set()函数进行页面中的设置。

            小结:

              我们只需要在php.ini中进行以上配置,那么session将不会按照文件的格式存储在服务器上,而是存储在memcached服务器内存中。调用的时           候依然按照原来session文件存储格式方式调用即可:  即, $user_id = $_SESSION['user_id'];

         ③memcached的数据是无用户状态的,不会和某个用户绑定。

         ④memcached访问安全性

          windows下

            设置防火墙:打开防火墙并设置例外

          Linux下

            iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT

       4、

        什么样的数据适合放Memcached中?

          变化频繁,据有不稳定性的数据,不需要实时入库(比如用户在线状态,在线人数)

          门户网站的新闻等,觉得页面静态化仍不能满足要求

        什么样的数据不适合放Memcached中?

          银行股票证券系统时时变化

          数据量过大,比如优酷网的视频

        总结:

          如果是一个小网站,PV值不大,就不考虑使用memcached

          变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态,用户在线人数)

          变化频繁一变化就要入库的,比如股票,金融(不适合memcached)

          变化不频繁,查询很频繁,不管入不入库都比较适合memcached(新浪的新闻频道)

          

          

    ---- 始终相信这句:
    ----“做每天该做的事,不计结果!”
    ---- 因爲對於編程還只是新手,對很多知識掌握的不牢靠,歡迎大家批評指正~~|=-=|~~
  • 相关阅读:
    Vue Bug
    Vue.js(一)
    Node.js简介
    对请求链接的URLEncode处理
    淘宝开放平台
    Java基础(一)
    计算机基础知识
    Unity中对象池的使用
    希尔排序算法
    插入排序算法
  • 原文地址:https://www.cnblogs.com/Zell-Dinch/p/3901590.html
Copyright © 2020-2023  润新知