用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中读取数据

我们用上面的方法创建一个typed client,然后在里面查找,如果找到,返回HTTP 302,在URL被访问后,如果他的ExpireMode是ByLastAccessed,我们要进行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缩短服务的更多相关文章
- Redis打造URL缩短服务
用Redis打造URL缩短服务 此文章的英文版本已首发于 CodeProject : Building a simple URL shorten service with Redis 阅读文章之前 ...
- Redis作为消息队列服务场景应用案例
NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例 一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...
- 神马小说:使用opensearch打造高性能搜索服务
神马小说--- 使用opensearch打造高性能搜索服务 [使用背景] 神马小说是最早使用opensearch的用户,和opensearch一起成长.目前神马小说每天2亿搜索pv,1000w 用户. ...
- windows下安装Redis并部署成服务
windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
- redis注册成window服务
注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...
- redis注册为window服务
打开redis安装路径并执行:redis-server --service-install redis.windows.conf 安装服务命令 执行完命令后打开电脑服务 此时服务还未启动,执行命令:r ...
- redis注册成window服务 标签: redis
注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...
- mysql和redis加入到windows服务
mysql加入到windows服务: mysqld --install Mysql5.6 mysqld --remove mysql5.6 从windows的服务中删除mysql服务 net st ...
随机推荐
- GBDT(MART) 迭代决策树入门教程 | 简介
GBDT(MART) 迭代决策树入门教程 | 简介 http://blog.csdn.net/w28971023/article/details/8240756
- PHP数组的知识
- 问题: ActivityManager: Warning: Activity not started, its current task has been brought to the front
运行程序时看控制台有这样的错误,应用程序没跑起来. 解决办法:project-->Clean
- python学习笔记-Day7
class Province: # 静态字段(类变量/属性) country = '中国' def __init__(self, name): # 普通字段(实例变量/属性) self.name = ...
- 完全背包问题 POJ1384
完全背包即物品的数量不收限制, 根据01背包的思想,因为每件物品只能选1个,则要求我们不能依赖已选择物品i的选项的时候,所以需要逆序遍历 则在完全背包问题中,我们需要正序遍历. 此题时要求求出最小价值 ...
- Android.技术站点
总结Android相关的技术站点和blog 1. http://android-developers.blogspot.com/ 首推这个blog,有时间需要每篇blog读一遍. 2. nlopez ...
- throw er; Unhandled 'error' event Error: listen EADDRINUSE的解决方法
先把错误贴出来,如下: 出现此问题的原因是端口被占用,解决方法如下: 查看程序执行用到的端口的运行情况,本例是端口号3000; 占用该端口3000的进程是node,pid为244156,用kill命令 ...
- return和exit函数的区别
在上Linux课的时候,老师提到一句,调用vfork产生的子进程就是为了使用exec族函数来执行其他的代码逻辑. 在子进程退出的时候有两种方式,exit和exec族函数,不能使用return,为什么不 ...
- MongoDB介绍与windows下安装
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类 似json的bjson格式,因此可以存储比较复杂的数据类型. ...
- matlab微分方程dsolve使用
y=dsolve('Dy=exp(-x-y-2)','y(0)=-2','x') dy/dx 写成Dy (注意大小写) y(0)=-2 表示初始条件 'x'表示积分变量