开箱即用 - Memcache
废话少说,先上代码C# memcache Demo
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的更多相关文章
- 开箱即用 - Memcache缓存
废话少说,先上代码C# memcache Demo memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型. 使用情景:怎么用都可以,注意的是它只 ...
- PHP之Memcache缓存详解
Mem:memory缩写(内存):内存缓存 1. 断电或者重启服务器内存数据即消失,即临时数据: Memcache默认端口:11211 存入方式:key=>>value ...
- 走进缓存的世界(三) - Memcache
系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...
- 网站缓存技术总结( ehcache、memcache、redis对比)
网站技术高速发展的今天,缓存技术已经成为大型网站的一个关键技术,缓存设计好坏直接关系的一个网站访问的速度,以及购置服务器的数量,甚至影响到用户的体验. 网站缓存按照存放的地点不同,可以分为客户端缓存. ...
- MemCache超详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- 如何在腾讯开放平台的云服务器上安装php和memcache 一
由于被通知腾讯的CEE要关闭了,必须自己切换到服务器,自己装php.烦到一个B. 首先找到官方wiki: http://wiki.qcloud.com/wiki/SUSE%E7%8E%AF%E5%A2 ...
- 搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
上一篇:搭建LNAMP环境(六)- PHP7源码安装MongoDB和MongoDB拓展 一.安装Memcached 1.yum安装libevent事件触发管理器 yum -y install libe ...
- 前端学PHP之PHP操作memcache
× 目录 [1]安装 [2]连接 [3]增删改查[4]分布式[5]状态[6]安全[7]应用 前面的话 和访问mysql服务器类似,PHP也是作为客户端API访问memcached服务器的,所以同样需要 ...
- 前端学PHP之MemCache
× 目录 [1]作用 [2]安装 [3]管理[4]命令 前面的话 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括 ...
随机推荐
- jQuery UI框架
jQuery UI框架 1.oschina开源社区-jQuery教程 2.jQuery PrimeUI(推荐) 3.弹出框.警告框.提示框.拖动支持.位置固定.选项卡切换 4.Bootstrap框架( ...
- Visual Studio 2015 & C#6.0 试用报告,持续更新。
昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不提,C#常年被人指责跨平台性不佳,我也是无能为力.即使有Mono等第三方跨平台工程,.NET ...
- 手机新闻网站,掌上移动新闻,手机报client,jQuery Mobile手机新闻网站,手机新闻网站demo,新闻阅读器开发
我们坐在地铁,经常来查看新浪手机新闻,腾讯新闻.或者刷微信看新闻更多功能.你有没有想过如何实现这些目标.移动互联网,更活泼. 因为HTML5到,jQuery Moblie到.今天我用jqm为了给你一个 ...
- Windows 7上使用HP QC的问题
C(Quantity Center)是一款不错的测试管理工具,最近把公司的操作系统从Windows XP升级到Windows 7之后,发现登录到QC Server的Addin页面,很多客户端组件不能正 ...
- VS生产的编辑方法和编辑窗体
MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已经给我们把CURD都简单的实现了.这篇的话就简单的看下它默 ...
- Tomcat过滤器模拟
直接上代码Filter.java public interface Filter { //过滤器 public void doFilter(Request request,Response respo ...
- 为ASP.NET MVC应用程序实现继承
为ASP.NET MVC应用程序实现继承 这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里 ...
- c#中queue的用法
Queue队列就是先进先出.它并没有实现 IList,ICollection.所以它不能按索引访问元素,不能使用Add和Remove.下面是 Queue的一些方法和属性 Enqueue():在队列的末 ...
- Winform系列
小菜学习编程-Winform系列(初学者) 前言 记得上次写<小菜的程序员道路(二)>,这篇文章的时候说过,要把工作以来整理的编程知识分享给大家,因为这半年来的工作实在是忙,现在也在忙 ...
- rabibtMQ安装及集群配置-linux
安装RabbitMQ RabbitMQ是流行的开源消息队列系统,用erlang语言开发,故首先需要安装erlang依赖及erlang. 安装erlang依赖的基本环境,通过yum方式进行安装: yum ...