码迷,mamicode.com
首页 > 其他好文 > 详细

用Redis打造URL缩短服务

时间:2014-09-18 14:37:13      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   os   ar   strong   for   数据   2014   

此文章的英文版本已首发于 CodeProject : Building a simple URL shorten service with Redis

阅读文章之前,我建议你先下载源码,一边看文章,一边看代码。

代码在这里下载:http://www.codeproject.com/KB/NoSQL/819235/MicroUrl.zip

Redis是什么东西

简单地说,Redis和memcached很像,也是一个内存数据库,但是,Redis可以把数据保存到硬盘,因此,Redis不但可以做缓存,还可以作为一个NoSQL数据库。

制作Web部分

首先,以no authentication方式在Visual Studio里面创建一个ASP.NET MVC项目

bubuko.com,布布扣

然后新建一个类来存储URL数据

bubuko.com,布布扣

ExpireMode 是一个自定义的枚举,我们先定义他

bubuko.com,布布扣

然后创建主页

bubuko.com,布布扣

做出来大概是这样

bubuko.com,布布扣

值得一提的是 HtmlHeper 的 EnumDropDownListFor方法,这个方法是在 ASP.NET MVC 5.2中新增的,在以前的版本中,我们要自己创建这些Item,非常麻烦,现在,我们可以用这个方法直接生成,用attribute指定显示名。

然后弄一个成功页面,挺简单的。

bubuko.com,布布扣

将数据保存到Redis

有了上面这些准备后,我们就可以开始写关于Redis的代码了。

首先你要安装 ServiceStack.Redis 这个Nuget包,如果需要一个有强名称的DLL,可以装这个: ServiceStack.Redis.Signed

然后我们用 using 语句using一个创建好的client, 然后生成一个用于 MicroUrlItems 的 typed client

bubuko.com,布布扣

在向Redis保存对象之前,对象需要有一个Primary Key,这里我们用 ServiceStack.DataAnnotations.PrimaryKey 这个attribute进行标记,这个属性最终是这样子

bubuko.com,布布扣

如果用户没指定缩短后的URL,那就随机生成一个

bubuko.com,布布扣

这是一个简单的生成算法

bubuko.com,布布扣

然后就可以保存了

bubuko.com,布布扣
最后一步,如果用户指定了有效期,我们要在Redis里面设置他的expire

bubuko.com,布布扣

从Redis中读取数据

bubuko.com,布布扣

我们用上面的方法创建一个typed client,然后在里面查找,如果找到,返回HTTP 302,在URL被访问后,如果他的ExpireModeByLastAccessed,我们要进行renew。

还有一件事,就是这个Action里面的Route attribute默认是不参与工作的,我们要把他map上去

bubuko.com,布布扣

终于好了

在运行网站之前,我们需要先启动Redis(在 http://redis.io/download 可以下载),对于Windows,我们可以调用这个命令启动Redis服务器

bubuko.com,布布扣

还可以启动一个monitor看一下

bubuko.com,布布扣

然后启动网站,试下我们的功能

bubuko.com,布布扣

自定义URL正常

bubuko.com,布布扣

这个是随机生成的URL

在执行这些操作后,我们可以在monitor里面看到具体有哪些Redis命令被执行了

bubuko.com,布布扣

 

此文章的英文版本已首发于 CodeProject : Building a simple URL shorten service with Redis

用Redis打造URL缩短服务

标签:blog   http   io   os   ar   strong   for   数据   2014   

原文地址:http://www.cnblogs.com/henryzhu/p/building-a-url-shorten-service-with-redis.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!