在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
简介 多少次你发现自己在几个月的开发和无数的努力后陷入了毫无性能而言的web应用?多少次你在好奇如果你无法向普通用户传达快与最快的标准,你的客户还应该把你当作专家?多少你听到有关Google和Facebook一些糟糕的对比?让我告诉你,我的客户是怎么看待这些的: 我曾开发一个有着复杂处理和过滤的web应用,因为很多业务规则和UI要求。再加上一些过时技术的第三方提供者,对于他们而言,速度意味着15年的工作丢进垃圾桶,然后重新开始。我的应用不是那么快,有时处理一个请求花费6~8s才会处理完,业务规则的验证、过滤和格式化响应。而客户不接受这样。并说如果Google做就会做好。同样,Facebook也行。我无法向客户解释速度后面的硬件是多么的庞大,服务器的压力怎样。我仅仅回复说可以做更好,我在记住Redis后保证可以做到。
大多数开发者习惯用关系型数据库。数据驱动开发或者领域驱动开发(作为一个整体框架编码或者用Fluent API NHibernate),关系型数据库的概念一样。另一方面,NoSql引领了新的数据存储时尚。在.NET社区最流行的是MongoDb,RavenDb和Redis。我已经写了一篇怎么使用MongDb的文章,你可以在这里找到。我使用它记录重要活动、错误和异常等的日志。 在NoSql的世界里,概念和所有流行的数据库基本是一样的。基本上它是存在你机器上某处的JSon文档或者你可以操作的某种.NET客户机或驱动。NoSql的伟大之处在于它解决了关系型数据库与OO语言如C#或Java时的一个主要缺点:错配阻抗。
简单的说,Redis可以给你难以置信的存取你的对象状态的能力从而使你的应用更加快速。有时候,你的应用速度可以优化8到10倍。这并不是开玩笑的而且你不需要背后有Google或Facebook那样的基础设施。如果你想知道更多的关于Redis背后的思想和它的历史的内容,可以上网查找更多。有很多文章是关于这些的。 Redis代表了远程字典服务( Remote Dictionary Service) 。它是一个键值存储就像C#的字典对象。所以让我们看看如何使用:
因为Redis是一个字典,可以以如下方式保存键值: 复制代码 代码如下: Set schedule:1 "{'origin':'Montreal','destination':'Toronto'}"
在这个示例中的值是一个json对象。这意味着你可以向Redis中添加复杂的对象。但没必要这么做,因为Redis支持5种数据类型以满足你的需求。 你也可以以如下方式指定key: 复制代码 代码如下: Set schedule:id 1
对于执行多个set 和get,可以使用mset 和mget来代替。我将不再对这些命令进行讨论。你可以查看Redis文档并尽情尝试。 幕后 到目前为止我们所做的一切都打破了常规。但在幕后却是Redis客户端通过Redis协议向服务器发送指令。服务器对内存中的数据执行这些指令,并返回响应结果。 你可以在物理机,虚拟机上使用Redis,也可以将Redis做为云服务。很多像Digital Ocean和Widnows Azure这类的供应商都提供该服务。我们将从Digital Ocean开始(主要考虑到价钱,并且我认为Azure的Redis服务有点贵)
现在你正在或已经保持更新了。然后运行apt-get install build-essential为你的linux服务器安装所有缺失的工具。哦了。另外对于这些设置还有很多更详细的博文。我不得不承认,因为我对linux世界不太熟悉,所以在配置的时候着实费了翻手脚。 在 Visual Studio 中使用 在起始页,添加一个MVC项目,并使用Nuget包管理器添加Servicestack.redis。这样你就可以连接到Redis并做一些有意思的事。 你需要按以下步骤做来连接Redis并被取得缓存的对象列表。 using(IRedisClient client = RedisClient) { var scheduleClient= client.GetTypedClient<Schedule>(); var schedules = scheduleClient.GetAll(); } 哪怕你缓存了很多对象这也是一个非常快速的操作。在Redis中缓存即用的对象是很好的想法,这免去了可能的业务处理操作(应用规则或其他过滤和格式化操作). 数据库中重复提取的对象(很多时候是相同的)最好放到Redis中。通常我们要在仓库中缓存的数据(更多细节请浏览缓存仓库模式cached repository pattern)也最好放到Redis中。这样你就可以快速取得操作结果,大幅提升Web应用的整体性能。
你也可以设置你的Redis客户端来看一下(不是用Glimpse-;))在添加monitor command的这种情况下发生了什么(在我们开始时添加azul的同一个地方)。 在完整的反HelloWorld应用风格(我承认我是其中之一!)的勇士兴奋的跳向天空之前,我还应该提醒一件事:从你的控制器连到你的数据库(就是Redis!)不是个好主意,如果这对你来说很奇怪,我认为你需要读一些关于设计和架构方面的东西。我不理解Microsoft的指导书让用户添加一个MVC项目,你就可以开始构建一耳光伟大的商业web应用了。因为不是这样。
//domain object public class Schedule { public int Id {get; set;} public string Origin {get; set;} public string Destination {get; set;} } using(IRedisClient client = RedisClient) { var scheduleClient= client.GetTypedClient<Schedule>(); var schedule= new Schedule { Id= scheduleClient.GetNextSequence(), Origin ="Montreal", Destination = "Quebec" } var schedules = scheduleClient.Store(schedule); } 因为Redis是一个缓存服务,是可以通过设置一个超时时间让输入过期。你也可以通过移除那个超时来逆向这个过程。 这仅是一个关于Redis的简介,给你提供一个提高web引用性能的方法启示。在某些情况下,Redis可能会给你一些你的客户或者老板没有给你的,关于构建可靠软件的激情的认可。 希望这能帮到一些人! |
请发表评论