您的位置:首页 > 数据库 > Memcache

分布式缓存--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去下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: