分布式缓存--redis和memcache
2016-11-27 15:40
483 查看
redis
日常开发中,总会接触到一些好玩的东西,比如这篇的redis,一说到redis,可能就有人跟memcache做比较了,是呀,memcache只能说是简单的kv内存数据结构,而redis支持的数据类型就丰富多了,当然最能让人看上眼的就是SortedSet。
有了它,我们就可以玩一些“贪心”的问题,比如适合“贪心”的优先队列,说到优先队列,我们以前实现了仅仅是内存形式的,
哎,内存毕竟是内存,当有海量数据的时候,最好能有一个序列化到硬盘的操作。。。恰恰这个场景redis就可以办到。。。
一:快速搭建
好了,我们知道redis比较适合做的事情了,现在我们可以进行快速搭建。
第一步:下载redis-2.0.2.zip (32 bit)。然后改名为redis放在D盘中。
最重要的也就是下面两个:
redis-server.exe: 这个就是redis的服务端程序。
redis-cli.exe: 服务端开启后,我们的客户端就可以输入各种命令测试了。
从图中我们可以看到两点:
①:没有指定config file。
原来redis建议我们做一个配置文件,那我就搞段配置。
daemonize: 是否以“守护进程”的方式开启,当是守护进程的时候就不受控制台的影响了。
logfile: log文件位置。
database: 开启数据库的个数。
dbfilename: 数据快照文件名。
save * *: 保存快照的频率,第一个为时间,第二个为写操作。
将这些配置好后,我们再看看:
②:我们看到redis默认的开放端口为6379。
二:安装驱动
好了,redis已经搭建完毕了,现在我们就要用C#去操作redis,这也是我最渴望的功能,优先队列~,先下载C#驱动,
就可以看到如下3个dll。
最后我们做下小测试:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 var client = new RedisClient("127.0.0.1", 6379); 6 7 //最后一个参数为我们排序的依据 8 var s = client.AddItemToSortedSet("12", "百度", 400); 9 10 client.AddItemToSortedSet("12", "谷歌", 300); 11 client.AddItemToSortedSet("12", "阿里", 200); 12 client.AddItemToSortedSet("12", "新浪", 100); 13 client.AddItemToSortedSet("12", "人人", 500); 14 15 //升序获取最一个值:"新浪" 16 var list = client.GetRangeFromSortedSet("12", 0, 0); 17 18 foreach (var item in list) 19 { 20 Console.WriteLine(item); 21 } 22 23 //降序获取最一个值:"人人" 24 list = client.GetRangeFromSortedSetDesc("12", 0, 0); 25 26 foreach (var item in list) 27 { 28 Console.WriteLine(item); 29 } 30 31 Console.Read(); 32 } 33 }
AddItemToSortedSet: 第三个参数也就是我们要排序的依据,这也非常适合我们做topK的问题,非常爽~
memcache
这篇开始决定把系列文章的名字改掉,想了个好名字,反正不是玩单机版的就行了。好了,这篇我们看看一种非持久化的缓存服务器memcache,说到缓存本能反映就是cache,session什么的,是的,可以说这
些都是基于.net进程的,通俗点也就做不了多机器的共享,典型的一个就是SSO。
一: 安装
memcahce像redis,mongodb一样都需要开启他们自己的服务端,我们下载Memcached_1.2.5.zip,然后放到C盘,修改文件
名为memcached。
1:install
install可以说是万能通用命令,首先我们转到memcached目录,然后 memcached.exe -d install 即可。
2:start
现在我们只要启动start即可,要注意的就是memecache默认的端口是11211,当然我也不想重新指定端口了。
3:stop,uninstall
这两个就不截图了,一个是停止,一个是卸载,反正都是万能通用命令。
二:驱动程序
memcache的服务器我们就已经开启好了,由于在公司最近一直都在用php,算了还是用C#驱动吧,谁让这是.net
社区呢,下载C#驱动,既然是缓存服务器,只要有基本的CURD,我想应该就差不多了。
1 using System; 2 using System.Collections.Generic; 3 4 namespace BeIT.MemCached 5 { 6 class Example 7 { 8 public static void Main(string[] args) 9 { 10 //通过配置文件初始化memcache实例 11 MemcachedClient cache = MemcachedClient.GetInstance("MyConfigFileCache"); 12 13 //编辑(可以模拟session操作,缓存20分钟) 14 cache.Set("name", "一线码农", DateTime.Now.AddMinutes(20)); 15 16 //获取 17 var result = cache.Get("name"); 18 19 Console.WriteLine("获取name的缓存数据为: " + result); 20 21 //删除 22 cache.Delete("name"); 23 24 Console.WriteLine("\n成功删除cache中name的数据"); 25 26 result = cache.Get("name"); 27 28 Console.WriteLine("\n再次获取cache中name的数据为:" + (result ?? "null") + "\n"); 29 30 //查看下memecahce的运行情况 31 foreach (KeyValuePair<string, Dictionary<string, string>> host in cache.Status()) 32 { 33 Console.Out.WriteLine("Host: " + host.Key); 34 foreach (KeyValuePair<string, string> item in host.Value) 35 { 36 Console.Out.WriteLine("\t" + item.Key + ": " + item.Value); 37 } 38 Console.Out.WriteLine(); 39 } 40 41 Console.Read(); 42 } 43 } 44 }
我们再定义下配置文件,既然memcache可以用于分布式,那就避免不了将cache分摊到几台服务器上去,可以看到,下面的
配置也是非常简单的,当然分配的法则自然是memcache自身的算法决定的,最后别忘了在另一台服务器上开放一个端口就它
就行了。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="beitmemcached" type="System.Configuration.NameValueSectionHandler" /> </configSections> <appSettings> </appSettings> <beitmemcached> <add key="MyConfigFileCache" value="127.0.0.1:11211" /> <!--<add key="MyConfigFileCache" value="127.0.0.1:11211,127.0.0.1:8888" />--> </beitmemcached> </configuration>
下面是打包程序:BeITMemcached ,也可以到codegoogle去下载。
相关文章推荐
- 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型
- 分布式缓存Memcache和Redis
- JEESZ-Redis分布式缓存安装和使用
- 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)
- 分布式缓存技术redis学习系列----深入理解Spring Redis的使用
- 分布式缓存技术redis学习系列(六)——sentinel哨兵机制
- JEESZ-Redis分布式缓存安装和使用
- 网站缓存技术总结( ehcache、memcache、redis对比)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- 网站缓存技术总结( ehcache、memcache、redis对比)
- memcached&redis等分布式缓存的实现原理
- C# Redis Server分布式缓存编程(二)
- 基于 Redis 的分布式缓存实现方案及可靠性加固策略
- 史上最全互联网分布式缓存技术视频教程(redis、memcached、ssdb)
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
- JEESZ-Redis分布式缓存安装和使用
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- 分布式缓存Redis之数据类型
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- ehcache memcache redis 三大缓存男高音