开箱即用 - Memcache缓存

2024-06-03 11:32
文章标签 缓存 开箱 即用 memcache

本文主要是介绍开箱即用 - 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
命令安装

开箱即用 - Memcache缓存

安装后的服务

开箱即用 - Memcache缓存

客户端使用

NuGet安装EnyimMemcached

开箱即用 - Memcache缓存

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 1client.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缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026861

相关文章

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

Spring 缓存在项目中的使用详解

《Spring缓存在项目中的使用详解》Spring缓存机制,Cache接口为缓存的组件规范定义,包扩缓存的各种操作(添加缓存、删除缓存、修改缓存等),本文给大家介绍Spring缓存在项目中的使用... 目录1.Spring 缓存机制介绍2.Spring 缓存用到的概念Ⅰ.两个接口Ⅱ.三个注解(方法层次)Ⅲ.

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓