开箱即用 - 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缓存mysql数据库操作的原理和缓存过程浅析
转载自脚本之家 http://www.jb51.net/article/51831.htm 作者:忙碌的松鼠 对于大型网站如facebook,ebay等网站,如果没有Memcache做为中间缓存层, ...
- memcached基于socket访问memcache缓存服务器
memcached基于socket访问memcache缓存服务器 操作memcache常用三种方法: .memcache基于php_memcache.dll扩展(php扩展) .memcached基于 ...
- phalcon: 缓存片段,文件缓存,memcache缓存
几种缓存,需要用到前端配置,加后端实例配合着用 片段缓存: public function indexAction() { //渲染页面 $this->view->setTemplateA ...
- 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存
一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...
- 整理php操作memcache缓存为基础的方法
php操作memcache共享缓存方法 采用memcache的前提下,是需要在服务器端被配置memcahche环境! 证实memcahce经过正常的连接可以在程序中使用! <?php /** * ...
- 开箱即用 - Memcache
废话少说,先上代码C# memcache Demo memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型. 使用情景:怎么用都可以,注意的是它只 ...
- memcache缓存安装配置
memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.目前用memcache解决互联网上的大用户读取是非常流行的一种用法. 下载安装 前提要先安装libev ...
- DedeCMS V5.7开启memcache缓存的方法配置说明
一.安装Memcache服务:1.1.linux下的Memcache安装:-------------------------1. 下载 memcache的linux版本,注意 memcached 用 ...
- Windows服务器安装Memcache缓存服务及PHP扩展
一.Windows服务器安装Memcache缓存服务,需要下载windows稳定版Memcache程序memcached.zip,下载后解压到自定义服务目录,如D:\phpStudy\tools\me ...
随机推荐
- 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序
0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...
- Programming Assignment 4: Boggle
编程作业四 作业链接:Boggle & Checklist 我的代码:BoggleSolver.java 问题简介 Boggle 是一个文字游戏,有 16 个每面都有字母的骰子,开始随机将它们 ...
- 破解myeclipse10失败的一个奇葩原因
昨天开发用的myeclipse10突然弹窗提示我要激活,我清楚的记得安装时候已经破解并且看到激活信息了. 翻遍搜索出来的文章,改systemid之类的也试过了,问题依旧存在,很是绝望. 今早过来机灵了 ...
- 高可用api接口网络部署方案
我们平时接触的产品都是7*24小时不间断服务,产品中的api接口肯定也是高可用的,下面我向大家分享一下互联网公司api接口高可用的网络部署方案. 我们一般通过http://le.quwenzhe.c ...
- 利用mpvue开发微信小程序
最近公司部门负责人提出需求需要开发一款微信小程序,由于本人之前是做前端开发的,对于小程序开发一窍不通,但是很多时候我们都是把不会做变成我会学.于是便在网上寻找小程序开发教程,相比于相生的小程序开发,本 ...
- /dev/urandom非阻塞的发生器
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" /dev/urandom /dev/urandom ...
- Linux磁盘分区和挂载
Linux磁盘分区和挂载 分区 分区的方式: mbr分区 最多支持4个主分区 系统只能安装到主分区上 扩展分区要占用一个主分区 MBR最大支持2TB,但拥有最好的兼容性 gtp分区 支持无线多个主分区 ...
- C#根据淘宝接口网址获取客户端访问IP和网络运营商
网络运营商会为每台联网的电脑分配公网IP,如何获取它们?? 话不多说直接上代码: using System; using System.Collections.Generic; using Syste ...
- PAT乙级1029
1029 旧键盘 (20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在 ...
- PH复合电极的结构、测量原理及注意事项
PH复合电极的结构.测量原理及注意事项 PH计是很多实验中常用的仪器.如细胞培养基的配制.各种洗脱缓冲液的配制等.然而人们很容易忽视它,只知其然不知其所以然.当遇到测量不准确时,往往无从分析.下面从三 ...