用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

作者:朱恒成(Henry Charles) (http://www.cnblogs.com/henryzhu/) 

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

  1. 用Redis打造URL缩短服务

    此文章的英文版本已首发于 CodeProject : Building a simple URL shorten service with Redis 阅读文章之前,我建议你先下载源码,一边看文章,一 ...

  2. Redis作为消息队列服务场景应用案例

    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例   一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

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

    神马小说--- 使用opensearch打造高性能搜索服务 [使用背景] 神马小说是最早使用opensearch的用户,和opensearch一起成长.目前神马小说每天2亿搜索pv,1000w 用户. ...

  4. windows下安装Redis并部署成服务

    windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...

  5. Redis Sentinel 高可用服务搭建

    阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...

  6. redis注册成window服务

    注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...

  7. redis注册为window服务

    打开redis安装路径并执行:redis-server --service-install redis.windows.conf 安装服务命令 执行完命令后打开电脑服务 此时服务还未启动,执行命令:r ...

  8. redis注册成window服务 标签: redis

    注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...

  9. mysql和redis加入到windows服务

    mysql加入到windows服务: mysqld --install  Mysql5.6 mysqld --remove mysql5.6  从windows的服务中删除mysql服务 net st ...

随机推荐

  1. [Sqlite] --> Sqlite于Windows、Linux 和 Mac OS X 在安装过程

    一个:于 Windows 安装 SQLite  1,下载 请訪问SQLite下载页面http://www.sqlite.org/download.html.从Windows 区下载预编译的二进制文件. ...

  2. IIS7.0 Appcmd 命令详解

    原文 IIS7.0 Appcmd 命令详解 一:准备工作 APPcmd.exe 位于 C:\Windows\System32\inetsrv 目录 使用 Cd c:\Windows\System32\ ...

  3. linux下一个Oracle11g RAC建立(四)

    linux下一个Oracle11g RAC建立(四) 三.配置共享存储 配置ASM管理准备 1)OCRDISK :存储CRS资源配置信息 2)VOTEDISK:仲裁盘.记录节点状态 3)DataDis ...

  4. JavaScript的类型、值和变量的总结

    前言:JavaScript的数据类型分为两类:原始类型和对象类型.5种原始类型:数字.字符串.布尔值.null(空).undefined(未定义).对象是属性的集合,每个属性都由“名/值对”(值可以是 ...

  5. 利用System.Net.Mail 的SmtpClient发送邮件

    原文:利用System.Net.Mail 的SmtpClient发送邮件 几个月前总结过关于Jmail发送邮件,当时用Jmail发送邮件发送速度有点慢(可能对Jmail了解不是很多).现在改为用微软提 ...

  6. 查询出各个学科的前3名的同学信息的Sql

    查找各个学科的成绩前3名的学生信息Sql,有2种方法,一种是利用sql的row_number() over()函数,另一种是用子查询, 表设计如下 如果不考虑各个学科的成绩有并列的情况的话,有如下两种 ...

  7. Swift初体验(两)

    // 写功能初体验 func getMyName(firstName first:String, lastName last:String) -> String{ //return first ...

  8. 1213 How Many Tables(简单并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 简单并查集,统计单独成树的数量. 代码: #include <stdio.h> #i ...

  9. JBPM——MyEclipse开发环境的搭建

    第一次接触JBPM我不知道如何在工程中的应用.查了一些资料.大约在JBPM随着时代的发展有一定的了解.首先JBPM它是JBoss件平台的一个组成部分.是一个灵活的,易扩展的工作流管理系统,仅仅只是这个 ...

  10. 【Linux】Vim编辑器-批量注释与反注释

    [-] vim编辑器---批量注释与反注释 方法一 块选择模式 插入注释 取消注释 方法二 替换命令 批量注释 取消注释 实例演示   vim编辑器---批量注释与反注释 在使用vim编写代码的时候, ...