WeihanLi.Redis自定义序列化及压缩方式
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
自定义压缩
如果要使用自定义压缩,首先需要启用压缩,需要设置 EnableCompress为 true,然后注入自己的压缩方式,自定义压缩方式需要实现 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 重构一下,如果您有什么建议或者想法欢迎和我联系,多谢支持。
WeihanLi.Redis自定义序列化及压缩方式的更多相关文章
- SpringBoot自定义序列化的使用方式--WebMvcConfigurationSupport
场景及需求: 项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串. 例如: [ { "id": 1, ...
- 【转】SpringBoot自定义序列化的使用方式--WebMvcConfigurationSupport
场景及需求: 项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串. 例如:[ { "id": 1, ...
- Java 自定义序列化、反序列化
1.如果某个成员变量是敏感信息,不希望序列化到文件/网络节点中,比如说银行密码,或者该成员变量所属的类是不可序列化的, 可以用 transient 关键字修饰此成员变量,序列化时会忽略此成员变量. c ...
- SpringBoot缓存管理(三) 自定义Redis缓存序列化机制
前言 在上一篇文章中,我们完成了SpringBoot整合Redis进行数据缓存管理的工作,但缓存管理的实体类数据使用的是JDK序列化方式(如下图所示),不便于使用可视化管理工具进行查看和管理. 接下来 ...
- Spring整合Redis&JSON序列化&Spring/Web项目部署相关
几种JSON框架用法和效率对比: https://blog.csdn.net/sisyphus_z/article/details/53333925 https://blog.csdn.net/wei ...
- fastjson自定义序列化竟然有这么多姿势?
本文介绍下fastjson自定义序列化的各种操作. 一.什么是fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSO ...
- SpringBoot缓存篇Ⅱ --- 整合Redis以及序列化机制
一.Redis环境搭建 系统默认是使用ConcurrentMapCacheManager,然后获取和创建ConcurrentMapCache类型的缓存组件,再将数据保存在ConcurrentMap中 ...
- C#序列化与反序列化方式简单总结
序列化和反序列化 相关类: System.SerializableAttribute特性(或称为属性), System.Runtime.Serialization.ISerializable(自定义序 ...
- .Net Core 自定义序列化格式
序列化对大家来说应该都不陌生,特别是现在大量使用WEBAPI,JSON满天飞,序列化操作应该经常出现在我们的代码上. 而我们最常用的序列化工具应该就是Newtonsoft.Json,当然你用其它工具类 ...
随机推荐
- Mybatis实体类属性与数据库字段不一致解决办法
例如:实体类 String userName 数据库:name 解决办法一: 通过给字段加别名,别名写成实体类属性一 eg:select name userName from student ...
- mysql explain中key_len值的说明
在mysql 的explain的输出中,有个key_len的列,其数据是如何计算的呢? 在看到了淘宝的dba以前发布的博客后,我在mysql 5.6上操作一番,了解了一点. 环境准备 – 创建表. u ...
- 安装nginx和php
安装nginx 1.安装依赖包 yum -y install gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel perl pe ...
- VirtualBox不能为虚拟电脑打开一个新任务——The VirtualBox kernel modules do not match this version of VirtualBox
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=608 一.问题产生的环境 物理机操作系统:Ubuntu 17.10 (Ubuntu版本查看命令: cat /etc/ ...
- tkinter中scale拖拉改变值控件(十一)
scale拖拉改变值控件 使用户通过拖拽改变值 简单的实现: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya. ...
- 安装Navicat for MySQL
注: 以下内容引自 https://www.cnblogs.com/da19951208/p/6403607.html Navicat for MySQL下载.安装与破解 一:下载Navicat ...
- 如何解决-win7系统打开截图工具显示“截图工具当前未在计算机上运行”
打开win7系统自带截图工具,显示"截图工具当前未在计算机上运行.请重新启动计算机,然后重试", 解决方法 1.首先在C盘中搜索tpcps.dll: 2.将数据最大那个tpcp ...
- BZOJ_2561_最小生成树_最小割
BZOJ_2561_最小生成树_最小割 题意: 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条 ...
- 映射内网ftp服务器到公网后内网访问出错问题
上文说道映射后外网无法访问解决:https://www.cnblogs.com/Dev0ps/p/9073048.html 添加了ftp的pasv_address的地址 ,内网客户端要设置主动模式(a ...
- Solr相似性算法
Solr相似性算法 介绍 Solr 4及之前的版本默认采用VSM(向量空间模型)进行相似度的计算(或打分).之后的版本,则采用Okapi BM25(一种二元独立模型的扩展),属于概率模型. 检索模型通 ...