附:请浅谈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(新浪的新闻频道)

      

      

memcached学习笔记6--浅谈memcached的机制 以及 memcached细节讨论的更多相关文章

  1. 【SSH学习笔记】浅谈SSH框架

    说在前面 本学期我们有一门课叫做Java EE,由陈老师所授,主要讲的就是Java EE 中的SSH框架. 由于陈老师授课风格以及自己的原因导致学了整整一学期不知道在讲什么,所以才有了自己重新学习总结 ...

  2. (转)memcached学习笔记1(windows 7 64bit 环境下安装memcached)

    windows 7 64bit 环境下安装memcached 1.下载后解压到D:\memcached(下载地址:memcached-win64下载地址) 2.安装到windows服务,打开cmd命令 ...

  3. Android开发学习笔记:浅谈GridView

    GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的.主要用于设置Adapter. GridView常用的X ...

  4. Android开发学习笔记:浅谈显示Intent和隐式Intent

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/655132 ...

  5. Android开发学习笔记:浅谈WebView(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...

  6. Android开发学习笔记:浅谈WebView

    本文转自:http://www.2cto.com/kf/201108/101518.html WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页 ...

  7. Docker学习笔记之浅谈虚拟化和容器技术

    0x00 概述 相信所有对 Docker 有所耳闻的朋友都知道,它是一款以容器虚拟化技术为基础的软件,因此在了解有关 Docker 的概念知识和使用方法之前,虚拟化和容器技术是我们不可或缺的基础知识. ...

  8. 转 Android开发学习笔记:浅谈WebView

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...

  9. memcached学习笔记——存储命令源码分析下篇

    上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制 ...

  10. memcached学习笔记——存储命令源码分析上篇

    原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...

随机推荐

  1. 无线ap和路由器wifi热点怎么区分和区别

    转自:http://blog.sina.com.cn/s/blog_5a6efa330101yrzh.html 有的人发现无线ap和无线路由器都可以实现无线上网,于是到无线市场买了个相当便宜的无线ap ...

  2. Java hour5

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为4 Hour,请各位不吝赐教. Hour5 神一样 ...

  3. Windows Phone8 遇见的问题

    1.公司的无线路由可以自动分发ip地址,模拟器可以自动获取ip,进行连接.宿舍的无线路设置了DHCP 不能自动分发ip地址,模拟器连接不到ip,上不去网,我就去hyper-v 管理器里修改了静态mac ...

  4. 如何清除sql server日志

    1.打开查询分析器,输入命令 DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件-- ...

  5. 输入框提示文字js

    <input style="margin-right: 0px; padding-right: 0px;" class="text" required=& ...

  6. loadrunner关联边界乱码

    问题现象: 如上图中的我想关联 <ins class="curmarker" id="cur2494"></ins><ins cl ...

  7. 模拟 POJ 1068 Parencodings

    题目地址:http://poj.org/problem?id=1068 /* 题意:给出每个右括号前的左括号总数(P序列),输出每对括号里的(包括自身)右括号总数(W序列) 模拟题:无算法,s数组把左 ...

  8. Oracle 使用小计(3)

      1.出错处理 ORA-00911: invalid character. 这是因为在语句末尾加上了";"的缘故,去掉";"SQL就可以执行了~ (这与SQL ...

  9. BZOJ3853 : GCD Array

    1 n d v相当于给$a[x]+=v[\gcd(x,n)=d]$ \[\begin{eqnarray*}&&v[\gcd(x,n)=d]\\&=&v[\gcd(\fr ...

  10. OpenCV count the number of connected camera 检测连接的摄像头的数量

    有时候在项目中我们需要检测当前连接在机子上的摄像头的数量,可以通过下面的代码实现,其中连接摄像头的最大数量maxCamNum可以任意修改: /** * Count current camera num ...