.NET Core中使用Redis与Memcached的序列化问题详析(4)

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

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdssss.html