开箱即用 - 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

相关文章

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

React 记忆缓存的三种方法实现

《React记忆缓存的三种方法实现》本文主要介绍了React记忆缓存的三种方法实现,包含React.memo、useMemo、useCallback,用于避免不必要的组件重渲染和计算,感兴趣的可以... 目录1. React.memo2. useMemo3. useCallback使用场景与注意事项在 Re

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使