用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

时间: 2024-11-03 11:51:50

用Redis打造URL缩短服务的相关文章

使用Apache来构建URL缩短服务

用 Apache HTTP 服务器的 mod_rewrite 功能创建你自己的短链接. 很久以前,人们开始在 Twitter 上分享链接.140 个字符的限制意味着 URL 可能消耗一条推文的大部分(或全部),因此人们使用 URL 缩短服务.最终,Twitter 加入了一个内置的 URL 缩短服务(t.co). 字符数现在不重要了,但还有其他原因要缩短链接.首先,缩短服务可以提供分析功能 —— 你可以看到你分享的链接的受欢迎程度.它还简化了制作易于记忆的 URL.例如,bit.ly/INtrav

NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器. 在目前广泛的Web应用中,都会出现一种场景:在某一个时刻,网站会迎来一个用户请求的高峰期(比如:淘宝的双十一购物狂欢节,12306的春运抢票节等),一般的设计中,用户的请求都会被直接写入数据库或文件中,在高并发的情形下会对数据库服务器或文件服务器造成巨大的压力,同时呢,也使响应延迟加剧.这也说明

百度云打造智能化照片服务

最近,百度云"图片智能分类与人脸搜索功能"的上线引发了IT界的广泛关注,据介绍"图片智能分类与人脸搜索功能"推出了一系列智能化的照片服务,在满足用户基本云存储需求的同时,增加了个性化.智能化.自动化的元素.众所周知,近年来百度对云产品非常重视,如今百度云已经成为综合的服务平台,用户不仅能使用百度云的网盘服务,还能与手机进行结合,实现一些基于手机平台的功能,诸如通话记录.短信.视频.文件等也可借助百度云来备份.不难看出,百度云已经在平台化方面取得了重大成就,那么&qu

java-爬虫-14-采用Redis创建url仓库,实现分布式爬虫

前言 使用之前单应用的队列仓库存储抓取的url存在以下两个弊端: 单应用时候,加入服务宕机了,则单应用中的队列仓库里面的url就会为空,则此时就会从页面的首页重新抓取 在加快爬虫抓取速度时候,我们有时候需要部署多节点,实现多节点抓取,加快抓取速度,但是多节点抓取同一个页面时候,怎样保证哪些url已经抓取了,而不需要再次抓取了,此时如果是单应用队列仓库将会不能区分 使用redis创建的url仓库(公共的仓库) 恰好解决了这个问题 多节点可以实现负载均衡,可以保证服务稳定性(其中一个挂掉了,不会对其

redis加入到windows服务命令

执行以下命令Redis-server.exe --service-install redis.windows.conf删除服务redis-server --service-uninstall开启服务redis-server --service-start停止服务redis-server --service-stop redis-server --service-install –service-name redisService1 –port 10001redis-server --servic

神马小说:使用opensearch打造高性能搜索服务

神马小说--- 使用opensearch打造高性能搜索服务 [使用背景] 神马小说是最早使用opensearch的用户,和opensearch一起成长.目前神马小说每天2亿搜索pv,1000w 用户.产品形态分全网sc,垂搜,app三大块. opensearch在使用中表现稳定可靠,每天平均latency 40ms,平均qps 2500. [使用过程] 神马小说团队有着资深的搜索背景,在小说产品刚起步的时候,面临着自己搭建引擎或者选用opensearch的基础方向问题.当时选择opensearc

使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务

1.使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务 http://www.tuicool.com/articles/BFzye2 2.ElasticSearch+LogStash+Kibana+Redis日志服务的高可用方案 http://www.tuicool.com/articles/EVzEZzn 3.示例 开源实时日志分析ELK平台部署 http://baidu.blog.51cto.com/71938/1676798?utm_source=t

爱唯婚车网,上海悦点信息科技有限公司打造的婚庆用车服务的O2O响应式平台。

爱唯婚车网,上海悦点信息科技有限公司打造的婚庆用车服务的O2O响应式平台.身在生活节奏飞快的都市里,即将迎来人生的大事,没有时间去安排一切,但是又不想让亲爱的他(她)失望,也想让所有的亲朋好友见证自己的幸福的时候,怎么办呢?现在不用担心了.只需打开浏览器,轻轻地敲几下键盘.所有的事情都变得简单了.不管你是需要自己配选车辆,组成独特的风景线,还是你相信我们的工作人员,选择精心搭配的套餐,又或者是想要跑车加入,小小的任性一把,在这里都可以实现.在这里只有你想不到的,没有做不到的!选好中意的车辆之后,

调用URL 接口服务

1.Net调用URL 接口服务 using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.W