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

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

  1. Redis打造URL缩短服务

    用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. bash脚本编程之二 字符串测试及for循环

    shell中大量的测试和比较选项而困惑呢? 这个技巧可以帮助您解密不同类型的文件.算术和字符串测试,这样您就能够知道什么时候使用 test. [ ]. [[ ]].(( )) 或 if-then-el ...

  2. PHP的轻量消息队列php-resque使用说明

    日志未经声明,均为AlloVince原创.版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可. 消息队列处理后台任务带来的问题 项目中经常会有后台运行任务的需求,比如发送邮件时,因为要 ...

  3. for 循环

    #include <iostream> int main(){ ; ; val <= ; ++val) { sum += val; } std::cout << &quo ...

  4. oracle11g 修改字符集

    查看当前字符集SQL语句: select * from nls_database_parameters where parameter ='NLS_CHARACTERSET'; 修改字符集操作如下,首 ...

  5. NSDictionary to jsonString

    NSDictionary to jsonString [self DataTOjsonString:dic] -(NSString*)DataTOjsonString:(id)object { NSS ...

  6. adb通信原理分析

    关于这个问题,自己研究了一下,没有研究出来 在网络上搜罗了一下,基本上关于ADB的原理用了两张图表示:        我表示没有看懂这两个图, 又开始查阅一些一些资料: 首先知道adb的通信有Sock ...

  7. java多线程-Java中的Copy-On-Write容器

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  8. strace命令介绍(转)

    原文链接:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信 ...

  9. [学习笔记] 七步从AngularJS菜鸟到专家(6):服务 [转]

    这是"AngularJS – 七步从菜鸟到专家"系列的第六篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.在第五篇我们讨论了Angular内建的directives.在这一章,我们 ...

  10. 读取iOS通讯录

    首先导入头文件 #import <AddressBook/AddressBook.h> 获取权限 读取通讯录 - (void)loadPerson { ABAddressBookRef a ...