当前位置: 移动技术网 > IT编程>开发语言>.net > WeihanLi.Redis自定义序列化及压缩方式

WeihanLi.Redis自定义序列化及压缩方式

2019年04月14日  | 移动技术网IT编程  | 我要评论

猴王出世缩写,山花红烂漫 打内蒙古一地名,催根生

weihanli.redis自定义序列化及压缩方式

intro

weihanli.redis 是基于 stackexchange.redis 的扩展,提供了一些常用的业务组件和对泛型的更好支持,默认使用 json.net 为基础的 json序列化,使用 gzip 进行数据压缩。

从 1.3.0 版本开始支持自定义序列化和压缩方式,下面介绍一下如何实现自定义序列化以及压缩。基本用法可以查看项目说明或这篇

自定义序列化

自定义序列化只需要实现自己的 idataserializer 就可以了,用自己的序列化实现 idataserializer 接口,并注入服务即可(注:序列化器一个生命周期应当是 singleton )。

binary序列化的 binarydataserializer 示例代码:

    public class binarydataserializer : idataserializer
    {
        private readonly binaryformatter _binaryformatter = new binaryformatter();

        public t deserializer<t>(byte[] bytes)
        {
            using (var memorystream = new memorystream(bytes))
            {
                return (t)_binaryformatter.deserialize(memorystream);
            }
        }

        public byte[] serialize<t>(t obj)
        {
            using (var memorystream = new memorystream())
            {
                _binaryformatter.serialize(memorystream, obj);
                return memorystream.toarray();
            }
        }
    }
    iservicecollection services = new servicecollection();
    services.addredisconfig(options => { });
    // custom serializer
    services.addsingleton<idataserializer, binarydataserializer>();
    // set resolver
    dependencyresolver.setdependencyresolver(services);

weihanli.common 中实现了三个序列化器,binarydataserializer/xmldataserializer/jsondataserializer,可以参考 https://github.com/weihanli/weihanli.common/blob/dev/src/weihanli.common/helpers/idataserializer.cs

自定义压缩

如果要使用自定义压缩,首先需要启用压缩,需要设置 enablecompresstrue,然后注入自己的压缩方式,自定义压缩方式需要实现 idatacompressor 接口,目前用到的只是同步方法,异步方法可以暂时不实现。

    iservicecollection services = new servicecollection();
    services.addredisconfig(options => { options.enablecompress = true; });
    // custom compressor
    services.addsingleton<idatacompressor, mockdatacompressor>();
    // set resolver
    dependencyresolver.setdependencyresolver(services);

mockdatacompressor 什么都没做,只是把数据原样返回了,并没有做处理,示例代码:

        publicclass mockdatacompressor : idatacompressor
        {
            public byte[] compress(byte[] sourcedata)
            {
                return sourcedata;
            }

            public task<byte[]> compressasync(byte[] sourcedata)
            {
                return task.fromresult(sourcedata);
            }

            public byte[] decompress(byte[] compresseddata)
            {
                return compresseddata;
            }

            public task<byte[]> decompressasync(byte[] compresseddata)
            {
                return task.fromresult(compresseddata);
            }
        }

sample

这里提供一个示例项目,可以参考。

自定义序列化和压缩方式示例代码:

        public static void main(string[] args)
        {
            iservicecollection services = new servicecollection();
            services.addredisconfig(options => { options.enablecompress = true; });
            services.addsingleton<idataserializer, binarydataserializer>();
            services.addsingleton<idatacompressor, mockdatacompressor>();
            dependencyresolver.setdependencyresolver(services);

            console.readline();
        }

end

如果在使用过程中有遇到什么问题,欢迎与我联系,最近想大调整,为 .netstandard 重构一下,如果您有什么建议或者想法欢迎和我联系,多谢支持。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网