memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型。
使用情景:怎么用都可以,注意的是它只把数据保存到内存中,重启memcache 服务后丢失,如果要持久化,须要额外程序处理。
一般在web系统中用memcache 缓存常用的数据来缓解数据库查询压力和提高系统性能。它相当于数据库和程序间的中间件。
memcache 早就如雷贯耳,想要用到系统中往往无从下手,下面就花一分钟时间把memcache 用起来;

快速入门(quick start)

服务器端配置

  • 就一个exe ,下载后用命令安装即可, 下载memcached
  • 以管理员身份方式运行 cmd 命令提示符;
  • cd 到下载memcached.exe 所在的路径;
  • 输入下面的安装命令,即可把 memcache 安装到windows 服务;
  • 打开windows服务,找到memcached server 服务,运行即可启动 memcached 服务,默认端口11211, 就用这端口,不用改;

    memcached.exe -d install
    命令安装

安装后的服务

客户端使用

  • NuGet安装EnyimMemcached

  • xml配置

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <!-- memcached 配置开始 -->
    <configSections>
    <sectionGroup name="enyim.com">
    <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
    </sectionGroup>
    </configSections>
    <enyim.com>
    <memcached>
    <servers>
    <add address="127.0.0.1" port="11211" />
    </servers>
    <transcoder type="ProtoBuf.Caching.Enyim.NetTranscoder, protobuf-net.Enyim" />
    </memcached>
    </enyim.com>
    <!-- memcached 配置结束 -->
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    </configuration>

    看到了吧,上面的 <add address="127.0.0.1" port="11211" /> 就是memcache 服务器的 ip 和开放接口, 默认就是 11211

  • 开撸代码


class Program
{
static void Main(string[] args)
{ MemcachedClient client = new MemcachedClient(); //-- 新增或更新,存在key, 则覆盖
client.ExecuteStore(StoreMode.Set, "test-set-key1", "whatever set 1");
//-- 新增或更新,存在key, 则覆盖: 指定有效期 1 小时
client.ExecuteStore(StoreMode.Set, "test-set-key2", "whatever set 2", DateTime.Now.AddHours(1)); //-- 新增, 存在该key, 则不覆盖
client.ExecuteStore(StoreMode.Add, "test-add-key1", "whatever add 1"); //-- 更新, 不存在该key, 则不做更新
client.ExecuteStore(StoreMode.Replace, "test-replace-key1", "whatever replace key1"); //-- 取值
client.Get<string>("test-set-key1"); // whatever set 1
client.Get<string>("test-add-key1"); // whatever add 1 //-- 缓存对象: 对象必须可序列化 Foo foo = new Foo { Id = 1, Name = "foo1" };
client.ExecuteStore(StoreMode.Set, "obj1", foo, DateTime.Now.AddHours(1)); //取值
var cacheFoo = client.Get<Foo>("obj1"); }
} [Serializable]
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}

就这么简单

下面深入点点

配合数据库做缓存的处理流程

为了缓存数据是最新的,必须要处理与数据库同步,有两种方式:

  • 同时更新数据库和缓存;
  • 只更新数据库,根据key, 把缓存移除或设为null,按上面的处理流程,下次拿到null, 就从数据库取最新的数据并缓存;

如何维护key是非常关键的工作;

请求 WebApi, 返回对象带有 k__BackingField

不能用Serializable 修饰类,但缓存对象必须可序列化,可改用 protobuf-net 的 DataContract 修饰类, DataMember 修饰属性;
虽然比较麻烦,但性能比.net 自带的 Serializable 要好;

用了 protobuf-net 序列化对象后,有时 memcache 的 fGet<T> 范型方法莫名抛出异常,这是 protobuf-net 的bug, 最简便的方法是加try catch , 也可拿它源码改;

Memcache缓存的更多相关文章

  1. 使用Memcache缓存mysql数据库操作的原理和缓存过程浅析

    转载自脚本之家 http://www.jb51.net/article/51831.htm  作者:忙碌的松鼠 对于大型网站如facebook,ebay等网站,如果没有Memcache做为中间缓存层, ...

  2. memcached基于socket访问memcache缓存服务器

    memcached基于socket访问memcache缓存服务器 操作memcache常用三种方法: .memcache基于php_memcache.dll扩展(php扩展) .memcached基于 ...

  3. phalcon: 缓存片段,文件缓存,memcache缓存

    几种缓存,需要用到前端配置,加后端实例配合着用 片段缓存: public function indexAction() { //渲染页面 $this->view->setTemplateA ...

  4. 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存

    一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...

  5. 整理php操作memcache缓存为基础的方法

    php操作memcache共享缓存方法 采用memcache的前提下,是需要在服务器端被配置memcahche环境! 证实memcahce经过正常的连接可以在程序中使用! <?php /** * ...

  6. memcache缓存安装配置

    memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.目前用memcache解决互联网上的大用户读取是非常流行的一种用法. 下载安装 前提要先安装libev ...

  7. DedeCMS V5.7开启memcache缓存的方法配置说明

    一.安装Memcache服务:1.1.linux下的Memcache安装:-------------------------1. 下载 memcache的linux版本,注意 memcached 用 ...

  8. Windows服务器安装Memcache缓存服务及PHP扩展

    一.Windows服务器安装Memcache缓存服务,需要下载windows稳定版Memcache程序memcached.zip,下载后解压到自定义服务目录,如D:\phpStudy\tools\me ...

  9. 云计算openstack共享组件(2)——Memcache 缓存系统

    一.缓存系统 在大型海量并发访问网站及openstack等集群中,对于关系型数据库,尤其是大型关系型数据库,如果对其进行每秒上万次的并发访问,并且每次访问都在一个有上亿条记录的数据表中查询某条记录时, ...

随机推荐

  1. SSH连接工具:SecureCRT设置,另一个SSH连接工具:Xshell。在Windows和Linux之间互传文件可用WinSCP

    一般Linux发行版不允许root远程登录,CentOS允许. 调整字体大小:

  2. java二维码生成代码

    QRCodeUtil.encode(text, "D:/004.jpg", "D:", true, "exp");// 这个方法的第一个参数 ...

  3. mysql 计算生日

    生日(DATE) 计算方法1: YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5)) 计算方法2: year ...

  4. 了解数组中的队列方法,DOM中节点的一些操作

    队列的概念 栈是一种后进先出的结构,而队列是一种先进先出的结构.如银行排队,排在前面的人先办业务然后离开,后来的人站在最后.可以用队列的push()方法插入元素到队列的末尾,可以用shift()方法删 ...

  5. 深入学习rollup来进行打包

    深入学习rollup来进行打包 阅读目录 一:什么是Rollup? 二:如何使用Rollup来处理并打包JS文件? 三:设置Babel来使旧浏览器也支持ES6的代码 四:添加一个debug包来记录日志 ...

  6. 解决MAVEN项目因achetype加载太慢的问题

    解决方案: 加载太慢由于achetype-catalog.xml文件的访问问题,导致了整个构建过程的缓慢,所以是否能够将文件保存到本地,成为一种解决思路.翻阅Maven官方文档可以找到,确实是可以的. ...

  7. C/C++调用Golang 一

    C/C++调用Golang 一 (开发环境: 操作系统: windows 7 32位操作系统 C++: visual studio 2010 Golang:go version go1.9 windo ...

  8. Mac说——关闭SIP

    今天在安装keras的时候总是提示numpy无法安装,百度了下,说是新版本的os系统加入了spi机制. 什么是SIP: 系统集成保护(System Integrity Protection,SIP), ...

  9. 【原创】重复造轮子之高仿EntityFramework

    前言 在上一篇<[原创]打造基于Dapper的数据访问层>中,Dapper在应付多表自由关联.分组查询.匿名查询等应用场景时经常要手动写SQL语句.看着代码里满屏的红色SQL字符串,简直头 ...

  10. 淘宝NPM源的使用

    npm作为国外的node仓库安装工具,自然会受到我大长城防火墙的干扰,国内用户在安装相关的资源的时候,会出现安装失败,以及速度很慢的情况.为了解决npm安装的问题,国内出现了很多npm的镜像网址,ta ...