就像咱们平常PC上使用压缩软件,能够节省空间,memcached使用时把数据放置到内存里面,对数据使用压缩处理,到底好不好啊,不好请帮忙解释下

2010-12-25 20:16:25

8 Answers

不建议使用、压缩、解压影响性能。另外也不会把太大的数据存在Memcached里吧。

如果用了:
add的时候要压缩
get的时候要解压
假如要做value+1操作就要解压、加1、压缩三步

2010-12-25 22:45:28

很赞同楼上的说法。

在实际的操作过程中要不要压缩是取决于数据大小,要么全都不压缩,要么判断数据大小压缩,

举个例子,比如一个1k的数据 即使压缩,这又能节省多少空间呢?

cache 的意义是 以空间换取时间! 所以只要空间上能换取时间的话,那么这么做是有意义的,当然这也不是绝对的,否则就不会有压缩这一概念了,可以规定制定大小内不压缩,超过大小的才去压缩,但是这里会把时间有稍微浪费在了判断数据大小上。。 总之看你自己的实际情况决定吧。

2010-12-26 00:08:54

这个不能简单说有没有必要,任何一种技术都有应用场景

压不压缩我觉得可以从以下几方面考虑:

1.memcached容量是不是饱和了,饱和了,才有必要启用压缩

2.确定压缩率, 太小的数据进行压缩,反而会带来数据膨胀

3.压缩会带来效率损失,这个还需要考虑CPU、内存等是的占用情况

2010-12-26 01:31:09

从效率来考虑,如果单纯为节省memcached内存的目的出发来决定压不压缩就不是一个很好的做法。

2010-12-26 03:27:38

压缩可作为序列化的一种。

结构化数据存入别的系统一般需要经过序列化,如果序列化后的数据比较紧凑、省空间就没必要额外压缩了,否则,使用性价比比较高的序列化格式代替缺省的即可。

比如文件打包,我常用zip格式而不是rar,因为rar那点高出zip的压缩率需要很多额外的计算,所以zip有更高性价比;而zip打包本身很快的,就无需很在意额外计算。

2010-12-26 04:35:10

可以压缩,可以降低网络传输的开销。
当然压缩策略不是所有数据都进行压缩,可以对小数据不压缩,比如@毛杭军提到的value+1操作数据,对大数据进行压缩:

//Memcache::setCompressThreshold — Enable automatic compression of large values
bool Memcache::setCompressThreshold ( int $threshold [, float $min_savings ] )

举例:

//自动启用压缩策略,当数据大于2k时,以0.2的压缩比进行zlib $memcache->setCompressThreshold(2000,0.2);
2010-12-26 05:56:29
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制