我的编程空间,编程开发者的网络收藏夹
学习永远不晚

深入了解Redis的性能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

深入了解Redis的性能

简介

多少次你发现自己在几个月的开发和无数的努力后陷入了毫无性能而言的web应用?多少次你在好奇如果你无法向普通用户传达快与最快的标准,你的客户还应该把你当作专家?多少你听到有关Google和Facebook一些糟糕的对比?让我告诉你,我的客户是怎么看待这些的:

我曾开发一个有着复杂处理和过滤的web应用,因为很多业务规则和UI要求。再加上一些过时技术的第三方提供者,对于他们而言,速度意味着15年的工作丢进垃圾桶,然后重新开始。我的应用不是那么快,有时处理一个请求花费6~8s才会处理完,业务规则的验证、过滤和格式化响应。而客户不接受这样。并说如果Google做就会做好。同样,Facebook也行。我无法向客户解释速度后面的硬件是多么的庞大,服务器的压力怎样。我仅仅回复说可以做更好,我在记住Redis后保证可以做到。


那么,在我们深入Redis之前,我先介绍下NoSql。

大多数开发者习惯用关系型数据库。数据驱动开发或者领域驱动开发(作为一个整体框架编码或者用Fluent API NHibernate),关系型数据库的概念一样。另一方面,NoSql引领了新的数据存储时尚。在.NET社区最流行的是MongoDb,RavenDb和Redis。我已经写了一篇怎么使用MongDb的文章,你可以在这里找到。我使用它记录重要活动、错误和异常等的日志。

在NoSql的世界里,概念和所有流行的数据库基本是一样的。基本上它是存在你机器上某处的JSon文档或者你可以操作的某种.NET客户机或驱动。NoSql的伟大之处在于它解决了关系型数据库与OO语言如C#或Java时的一个主要缺点:错配阻抗。


Redis其实和任何的NoSql数据库一样。但是它是一个内存数据库而表现十分出色。

简单的说,Redis可以给你难以置信的存取你的对象状态的能力从而使你的应用更加快速。有时候,你的应用速度可以优化8到10倍。这并不是开玩笑的而且你不需要背后有Google或Facebook那样的基础设施。如果你想知道更多的关于Redis背后的思想和它的历史的内容,可以上网查找更多。有很多文章是关于这些的。

Redis代表了远程字典服务( Remote Dictionary Service) 。它是一个键值存储就像C#的字典对象。所以让我们看看如何使用:


首先,按照下面的步骤安装并运行Redis:

打开redis.io,下载win64版本的redis(它并不会根据你的系统指定相应的版本) 将下载的内容复制到Redis文件夹(你也可以命名为其他你喜欢的名字) 点击 redis-server.exe 启动服务端 点击 redis-client.exe 运行客户端命令行工具 现在我们试着运行一些基本的命令来检测安装是否正确。在客户端命令行界面: 输入 set azul "hello world" 来添加一条记录,你会收到ok的反馈。这意味着你已经添加了一个键为azul值为"hello world"的条目(顺便说下,azul在卡拜尔语中是问候的意思) 输入 get azul取得相应的值,你会收到反馈 hello world 输入 delete azul会删除这个条目

因为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,也可以将Redis做为云服务。很多像Digital Ocean和Widnows Azure这类的供应商都提供该服务。我们将从Digital Ocean开始(主要考虑到价钱,并且我认为Azure的Redis服务有点贵)


我们使用PuTTY的ssh(安全连接模式)来连接到Digital Ocean。下载PuTTY并将IP地址配置为你的DO droplet地址(droplet是你在DO上创建的linux主机)。然后启动PuTTY并用DO提供的root账户和密码登录。运行以下命令以保持你的linux主机的更新:apt-get update (linux用户现在很激动吧).

现在你正在或已经保持更新了。然后运行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应用的整体性能。


注意scheduleClient将会暴露很多有关增加、添加、移除和使用列表、哈希等的函数。尝试下探索更多。。。

你也可以设置你的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可能会给你一些你的客户或者老板没有给你的,关于构建可靠软件的激情的认可。

希望这能帮到一些人!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

深入了解Redis的性能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

深入了解Redis的性能

简介 多少次你发现自己在几个月的开发和无数的努力后陷入了毫无性能而言的web应用?多少次你在好奇如果你无法向普通用户传达快与最快的标准,你的客户还应该把你当作专家?多少你听到有关Google和Facebook一些糟糕的对比?让我告诉你,我的
2022-06-04

深入了解pip库的重要性与功能的必要性

在当前的互联网时代,软件开发已经成为了一项非常重要的技能。无论是个人开发者还是企业开发团队,他们都需要一些工具来帮助他们更高效地开发和管理项目。其中一个必备的工具就是pip库。pip库是Python语言的软件包管理器,它可以帮助我们快速、
深入了解pip库的重要性与功能的必要性
2024-02-02

深入了解Node.js中的一些特性

Node.js作为一门新兴的后台语言,旨在帮助程序员快速构建可伸缩的应用程序。Node.js有很多吸引人的地方,有关它的报道不计其数,本文将针对EventEmitter、Streams、Coding Style、Linting、Coding
2022-06-04

深入了解 MySQL 的跨平台特性

MySQL 是一款开源的关系型数据库管理系统,广泛应用于各大企业和网站中。其跨平台特性使得它可以在不同操作系统上运行,包括 Windows、Linux、Mac OS 等。在本文中,我们将深入了解 MySQL 的跨平台特性,并提供具体的代码示
深入了解 MySQL 的跨平台特性
2024-03-01

深入了解Canvas的国际化功能

随着全球化的发展,多语言支持在互联网应用中变得越来越重要。其中,Canvas作为一种常用的HTML5绘图技术,也需要适应多语言的需求。本文将探索Canvas的多语言支持,并介绍一些实际应用案例。一、Canvas的基本概念和特点Canvas
深入了解Canvas的国际化功能
2024-01-17

深入了解CSS中display属性的常见属性值

深入了解CSS中display属性的常见属性值,需要具体代码示例引言:CSS的display属性是控制元素如何显示的重要属性之一。它决定了元素在文档中的呈现方式,包括是否生成盒子、是否独占一行、是否可见等。本文将深入介绍display属
深入了解CSS中display属性的常见属性值
2024-02-02

深入了解:了解Pip镜像源的功能和作用

深入探究:Pip镜像源的功能与作用,需要具体代码示例引言:Python 是一门非常流行的编程语言,广泛应用于各种领域的开发项目中。在 Python 开发过程中,Pip 是一个重要的工具,用于管理 Python 包和依赖项。Pip 默认从官
深入了解:了解Pip镜像源的功能和作用
2024-01-16

深入了解Java线程池的原理使用及性能优化

JAVA线程池是一种管理和复用线程资源的机制,可以提高程序的效率和响应速度。本文将介绍线程池的原理、使用方法和性能优化技巧,帮助读者深入了解和应用JAVA线程池
2023-05-17

深入了解PHP trait DTO的扩展性与定制性

在面向对象编程中,数据传输对象(DTO)模式被广泛应用于管理和传输数据。在PHP中,使用trait可以实现DTO的扩展性与定制性,为代码的编写和维护提供了便利。本文将深入探讨PHP trait DTO的相关概念,并提供具体的代码示例,帮助读
2023-10-21

深入了解网页中overflow属性的意义

深入了解网页中overflow的含义,需要具体代码示例在网页开发中,我们经常会遇到一些内容溢出的情况,即内容超出其容器的可视区域,这时就需要用到CSS属性overflow来控制内容的展示方式。本文将深入探讨overflow属性的含义和具体
深入了解网页中overflow属性的意义
2024-01-29

深入了解PHP参数隐藏的重要性

PHP参数隐藏是构建安全可靠的网站和应用程序的关键一环。通过隐藏参数,可以保护敏感信息不被恶意用户窃取,提高系统的安全性和稳定性。在本文中,我们将深入探讨PHP参数隐藏的重要性,并结合具体的代码示例来说明如何实现参数隐藏。一、PHP参数隐
深入了解PHP参数隐藏的重要性
2024-03-09

深入了解Golang插件:探索五种插件的功能和特性

Golang插件解析:深入了解五种插件的功能与特点,需要具体代码示例引言:在Golang开发中,插件是一种常见的技术方案,可以帮助实现代码的可扩展性和模块化。通过插件,我们可以将功能细分为不同的模块,方便维护和管理。本文将深入介绍五种常见
深入了解Golang插件:探索五种插件的功能和特性
2024-01-16

深入了解绝对定位的重要性与必需性

深入解析绝对定位的重要性与必要性,需要具体代码示例绝对定位(absolute positioning)是CSS中一种非常重要的布局方式,它可以让元素脱离文档流并相对于其最近的已定位父元素进行定位。通过绝对定位,我们可以精确地控制元素在页面
深入了解绝对定位的重要性与必需性
2024-01-23

编程热搜

目录