在保存到redis之前压缩对象

时间:2012-09-28 01:40:15

标签: c# compression redis servicestack

我刚刚开始关注ss和redis。我正在使用microsoft redis实现。打开压缩后,dump.rdb增长得太快了。

我想保存每秒进程统计信息。示例对象。

public class PerfData
{
    public long Id { get; set; }    
    public DateTime TimeStamp { get; set; }
    public string ProcessName { get; set; }
    public int ProcessId { get; set; }
    public TimeSpan TotalProcessorTime { get; set; }
    public TimeSpan UserProcessorTime { get; set; }
    public TimeSpan PrivilegedProcessorTime { get; set; }
    public float ProcessorTime { get; set; }
    public float WorkingSet { get; set; }
}

我已经看到了在客户端压缩的建议。这是否意味着我需要将对象转换为这样的东西?

public class PerfData
{
    public long Id { get; set; }    
    public DateTime TimeStamp { get; set; }
    public byte[] CompressedJson{get;set;}
}

欣赏任何建议和更正。谢谢!

1 个答案:

答案 0 :(得分:1)

ServiceStack's Redis Client中最基本的类是RedisNativeClient,其中所有操作都适用于byte[]。 RedisClient是RedisNativeClient的子类,因此您可以强制转换以获取较低级别的API。

您需要压缩您的值,该值将最终为byte[],您可以直接将其保存到redis中。你需要反过来让它再次退出,例如检索原始byte[]值并解压缩。

ServiceStack的Redis客户端已经依赖于ServiceStack.Common,其中包含convenient Stream Extensions来压缩/解压缩数据。