最近要开发的一个项目是分布式缓存组件,解决参数缓存高效获取的问题。参数达到了500万级别,刚刚开始了解Redis。作设计的时候考虑到Value使用哪一种类型的问题?缓存
主要面临的是使用通常的String仍是使用Hash。原本直觉觉得使用String的效率会高,由于Redis在Memcached的基础上升级了,扩展的Value类型应该是为了方便。没想到在效率上也有了很大的提高。dom
测试的环境是一台Linux物理机,安装了最新版的Redis2.6. 测试数据以下:分布式
String类型的数据和Hash类型的数据各100w(前100万为String,后100万为Hash),随机取100次数据,比较两种的耗时;学习
测试的代码以下:测试
RedisClient client = new RedisClient("192.168.1.59", 6379); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 100; i++) { client.Get(new Random().Next(1000000).ToString()); } sw.Stop(); Console.WriteLine("使用String类型:"+sw.ElapsedMilliseconds); sw.Restart(); for (int i = 0; i < 100; i++) { long t = new Random().Next(1000000, 199999998); client.GetValueFromHash(t.ToString(), (t + 1).ToString()); } sw.Stop(); Console.WriteLine("使用Hash类型:"+sw.ElapsedMilliseconds);
虽然都是毫秒级别,可是结果对比下就一目了然,我应该选择那种类型:pwa
相差2倍的程度。设计
正在学习使用Redis的过程当中,记下来给初学的朋友参考,往后本身也好查阅。code