public class Startup { //... public void ConfigureServices(IServiceCollection services) { services.AddMvc(); //Important step for Memcached Cache services.AddDefaultMemcached(option=> { option.AddServer("127.0.0.1",11211); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //Important step for Memcache Cache app.UseDefaultMemcached(); } }
在控制器中使用时和Redis是一模一样的。
这里需要注意的是,在EasyCaching中,默认使用的序列化方法并不是DefaultTranscoder中的Bson,而是BinaryFormatter
如何去替换默认的序列化操作呢?
同样以MessagePack为例,先通过nuget安装package
Install-Package EasyCaching.Serialization.MessagePack
剩下的操作和Redis是一样的!
public void ConfigureServices(IServiceCollection services) { //others.. services.AddDefaultMemcached(op=> { op.AddServer("127.0.0.1",11211); }); //specify the Transcoder use messagepack serializer. services.AddDefaultMessagePackSerializer(); }
因为在EasyCaching中,有一个自己的Transcoder,这个Transcoder对IEasyCachingSerializer进行注入,所以只需要指定对应的Serializer即可。
总结
一、 先来看看文中提到的4种序列化的库
System.Runtime.Serialization.Formatters.Binary在使用上需要加上[Serializable],效率是最慢的,优势就是类库里面就有,不需要额外引用其他package。
Newtonsoft.Json使用起来比较友善,可能是用的多的缘故,也不需要我们对已经定义好的类加一些Attribute上去。
protobuf-net使用起来可能就略微麻烦一点,可以在定义类的时候加上相应的Attribute,也可以在运行时去处理(要注意处理子类),不过它的口碑还是不错的。
MessagePack-CSharp虽然可以不添加Attribute,但是不加比加的时候也会有所损耗。
至于如何选择,可能就要视情况而定了!
有兴趣的可以用BenchmarkDotNet跑跑分,我也简单写了一个可供参考:SerializerBenchmark
二、在对缓存操作的时候,可能会更倾向于“隐式”操作,能直接将一个object扔进去,也可以直接将一个object拿出来,至少能方便使用方。
三、序列化操作时,Redis要比Memcached简单一些。
最后,如果您在使用EasyCaching,有问题或建议可以联系我!
前半部分的示例代码:CachingSerializer
后半部分的示例代码:sample
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章: