Redis打造URL缩短服务

用Redis打造URL缩短服务

 

此文章的英文版本已首发于 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项目

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

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

然后创建主页

做出来大概是这样

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

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

将数据保存到Redis

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

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

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

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

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

这是一个简单的生成算法

然后就可以保存了

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

从Redis中读取数据

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

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

终于好了

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

还可以启动一个monitor看一下

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

自定义URL正常

这个是随机生成的URL

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

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

原文地址:https://www.cnblogs.com/Leo_wl/p/3979123.html