memcached小结--【项目经验】

为什么要用memcached?

每个技术的出现必然有它出现的原因,为啥要用memcached?查了一下网上的资料,了解到Memcache的出现解决了数据库高并发访问的瓶颈。当数据架构建立在单数据库模式,数据库连接池峰值达500,程序离崩溃就不远了。有的小网站开发的时候没有关注性能,等用户访问量越来越大,程序很容易崩溃。

如果客户端发送一个请求,服务端从数据库中存取相关数据,花费高昂。如果每次都从数据库取相同的数据,造成了数据库低效。然而如果把第一次取出的数据都存入到内存中,下次读取直接从内存中获得,给数据库就减负了。

所以在数据库和web之间放一层cache层,好处:1.减轻数据库的负担 2.提高存取速度。

什么是memcached?

  Memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载。

  上面是官方的回答,我个人的理解是Memcached像一个临时数据库,以key-value的形式存取数据,key会通过一个Hash算法转换成Hash-key,便于查找。因为它存储数据在内存中,离cpu比较近,查询数据是很快速的。

memcached跟cookie、session有什么异同?

  cookie、session常用来保存用户信息,SSO中用户信息存到本地cookie中一份,发送到session也保存一份,cookie的安全性比session差。memcached可以用在考试的抽题中,保存的数据的特色:1.数据量大 2.数据被多次使用。session时效性、存取在服务器这两点来说,是比较安全的。cookie可以通过本地cookie加密来解决安全性的问题,手写SSO里面cookie存取的用户密码就被加密过,数据库中存取的是也是加密后的信息。memcached可以通过放在防火墙后面增加自身的安全性。

memcached实战演练

1.安装memcached的服务端

  1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\r
  2. 在cmd下输入 c:\memcached\memcached.exe
    -d install 安装(请不要怀疑,真的安装完成了!)
  3. 再输入: c:\memcached\memcached.exe
    -d start 启动。默认分配64M内存,使用11211端口)

2.memcached使用

首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的状态。 (如果输入telnet 后报telnet不是内部或外部命令的时候,做如下操作。)

得到以下信息:

3.客户端代码

控制台程序:

<font size="4"><span style="font-family:SimSun;"><span style="font-size:18px;"><span style="font-family:SimSun;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Memcached.ClientLibrary;

namespace memache
{
    class Program
    {
        static void Main(string[] args)
        {
             //添加多个缓存服务器地址
            string[] serverlist = { "192.168.24.247:11211","192.168.24.175:11211" };

             //初始化池
              SockIOPool pool = SockIOPool.GetInstance();
              pool.SetServers(serverlist);
              //设置memcached 的一些参数
              pool.InitConnections = 3;
              pool.MinConnections = 3;
              pool.MaxConnections = 5;

              pool.SocketConnectTimeout = 1000;
              pool.SocketTimeout = 3000;

              pool.MaintenanceSleep = 30;
              pool.Failover = true;

              pool.Nagle = false;
              pool.Initialize();

             // 获得客户端实例
              MemcachedClient mc = new MemcachedClient();
              mc.EnableCompression = false;

              Console.WriteLine("------------测   试-----------");
              bool flags1 = mc.Set("user1", "my value");  //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test"
              bool flags2 = mc.Set("user2", "my value");
              bool flags3 = mc.Set("user3", "my value");
              bool flags4 = mc.Set("user4", "my value");
              bool flags5 = mc.Set("user5", "my value");
              bool flags6 = mc.Set("user6", "my value");

             if (mc.KeyExists("user1"))   //测试缓存存在key为test的项目
              {
                  Console.WriteLine("test is Exists");
                  Console.WriteLine(mc.Get("user1").ToString());  //在缓存中获取key为test的项目
              }
             else
              {
                  Console.WriteLine("test not Exists");
              }

             // Console.ReadLine();

             bool flag = mc.Delete("user1");  //移除缓存中key为test的项目

             if (mc.KeyExists("user1"))
              {
                  Console.WriteLine("test is Exists");
                  Console.WriteLine(mc.Get("user1").ToString());
              }
             else
              {
                  //Console.WriteLine("test not Exists");
              }

              SockIOPool.GetInstance().Shutdown();  //关闭池, 关闭sockets

              Console.ReadLine();
          }

    }
}
</span></span></span></font>

程序执行结果:

首先要开启memcached服务,输入 c:\memcached\memcached.exe
-d start 并执行。

启动程序控制台,memcached可以用啦!

总结

  学习是一个从罗列知识、个人消化、对比、总结织网、实战的过程,实战是最能检验人学的如何的方式,做项目挺好的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 21:42:47

memcached小结--【项目经验】的相关文章

我的项目经验总结——负载均衡的理解和实战:1

前言 目前接触的一个服务,它的7层负载均衡使用Nginx,4层使用的是我司自研的弹性负载均衡ELB. 而本文介绍和实战的是工作在4层负载均衡之一的LVS(Linux Virtual Server),权当抛砖引玉,实战是从工作中简化而来. 概念 章文嵩博士在 1998 年 5 月成立了 Linux Virtual Server 的自由软件项目,进行Linux服务器集群的开发工作,并且在 Linux2.4 以后的版本中,直接将 LVS 加入内核中,不用在重新自行编译进内核. 看到这里很汗颜,这是人家

Lync 项目经验-12-为某上市企业Skype for Business购买Godday证书

<要想看Lync 2013升级SFB 2015真实项目经验:请看Lync 项目经验-01-到-Lync 项目经验-10> 本系列博文: Lync 项目经验-01-共存迁移-Lync2013-TO-SFB 2015-规划01http://dynamic.blog.51cto.com/711418/1858520 Lync 项目经验-02-共存迁移-Lync2013-TO-SFB 2015-规划02http://dynamic.blog.51cto.com/711418/1859143 Lync

佩特来项目经验小集合(2)___组合查询存储过程,报错 &amp;quot;varchar JBID=&amp;#39;&amp;#39; 转换成数据类型 int 时失败&amp;quot;

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所看到的: 经百度:字符串变量和整型变量连接不能用+连接. 于是我採用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就攻克了. 正确代码例如以下所看到的: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH

java程序员面试----交流项目经验(摘自百度)

1:请你介绍一下你自己这是面试官常问的问题. 2:说说你的家庭面试时询问家庭问题不是非要知道求职者家庭情况,探究隐私,而是要了解家庭背景对求职者的塑造和影响.面试官希望听到的重点也在于家庭对求职者的积极影响. 3:说说你的最大优缺点这个问题的概率很大,面试官喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分. 4:就你申请的这个职位,你认为你还缺什么?面试官喜欢问求职者的弱点,但精明的求职者一般不直接回答.他们希望看到这样的求职者:继续重复自己的优势,然后说:

佩特来项目经验小集合(2)___组合查询存储过程,报错 &quot;varchar JBID=&#39;&#39; 转换成数据类型 int 时失败&quot;

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所示: 经百度:字符串变量和整型变量连接不能用+连接.于是我采用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就解决了.正确代码如下所示: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH varchar(

Lync 项目经验-08-Polycom CX700-4.0.X-能登录SFB 2015-能更新为中文

本系列博文: Lync 项目经验-01-共存迁移-Lync2013-TO-SFB 2015-规划01http://dynamic.blog.51cto.com/711418/1858520 Lync 项目经验-02-共存迁移-Lync2013-TO-SFB 2015-规划02http://dynamic.blog.51cto.com/711418/1859143 Lync 项目经验-03-共存迁移-Lync2013-TO-SFB 2015-完成 http://dynamic.blog.51cto

佩特来项目经验小集合(5)___系统流程设计

在佩特来项目设计中有一个流程设计问题,虽然.NET 和Java都有工作流,但是考虑到这个项目小,这里就简单的借用一点工作流的思想,设计了几张表,然后通过代码来控制流程.下面以"维修鉴定单业务流程"中的有实物流程为例,谈一下具体的流程设计.有实物的维修鉴定业务流程包含大致步骤:代理商填单.打印二维码.拆包.沟通转办.拆分.故障分析.各角色对费用进行审批.费用提交到费用池(统计各代理商金钱的地方).维修鉴定单流程见下图: 因为系统中不止这一个业务流程,所以系统流程设计的表有任务表(如维修鉴

Memcached实际项目应用

在Memcached官方的GitHub上,可以找到这么一个文档——HowTo.txt Howto ===== Basic Example: ============== Lets say you have 3 servers. Server 1 and server 2 have 3GB of space and server 3 has 2GB of space for cache. Here is how I would set up my client. -----------------

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

  先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面中有所体现,这里不再赘述,此篇文章主要介绍:我是如何通过js从前台获取数据,然后通过ajax技术向后台一般处理程序传递JSON,后台又是如何获取传来的JSON,并对JSON数据转换,然后将转换后的数据写入数据库的! 介绍这些步骤实现前,先说说自己的辛酸:絮叨辛酸,是因为为了实现这个功能,我真的用了很

Java项目经验——程序员成长的钥匙

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:1.掌握项目开发的基本步骤2.具备极强的面向对象的分析与设计技巧3.掌握用例驱动.以架构为核心的主流开发方法 没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法! 关于基