最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入了解Redis的性能

 更新時間:2015年06月28日 11:42:01   投稿:goldensun  
這篇文章主要介紹了Redis的性能,作者通過Visual Studio上的C#程序?qū)ζ溥M行了分析,需要的朋友可以參考下

簡介

多少次你發(fā)現(xiàn)自己在幾個月的開發(fā)和無數(shù)的努力后陷入了毫無性能而言的web應用?多少次你在好奇如果你無法向普通用戶傳達快與最快的標準,你的客戶還應該把你當作專家?多少你聽到有關Google和Facebook一些糟糕的對比?讓我告訴你,我的客戶是怎么看待這些的:

我曾開發(fā)一個有著復雜處理和過濾的web應用,因為很多業(yè)務規(guī)則和UI要求。再加上一些過時技術的第三方提供者,對于他們而言,速度意味著15年的工作丟進垃圾桶,然后重新開始。我的應用不是那么快,有時處理一個請求花費6~8s才會處理完,業(yè)務規(guī)則的驗證、過濾和格式化響應。而客戶不接受這樣。并說如果Google做就會做好。同樣,F(xiàn)acebook也行。我無法向客戶解釋速度后面的硬件是多么的龐大,服務器的壓力怎樣。我僅僅回復說可以做更好,我在記住Redis后保證可以做到。


那么,在我們深入Redis之前,我先介紹下NoSql。

大多數(shù)開發(fā)者習慣用關系型數(shù)據(jù)庫。數(shù)據(jù)驅(qū)動開發(fā)或者領域驅(qū)動開發(fā)(作為一個整體框架編碼或者用Fluent API NHibernate),關系型數(shù)據(jù)庫的概念一樣。另一方面,NoSql引領了新的數(shù)據(jù)存儲時尚。在.NET社區(qū)最流行的是MongoDb,RavenDb和Redis。我已經(jīng)寫了一篇怎么使用MongDb的文章,你可以在這里找到。我使用它記錄重要活動、錯誤和異常等的日志。

在NoSql的世界里,概念和所有流行的數(shù)據(jù)庫基本是一樣的?;旧纤谴嬖谀銠C器上某處的JSon文檔或者你可以操作的某種.NET客戶機或驅(qū)動。NoSql的偉大之處在于它解決了關系型數(shù)據(jù)庫與OO語言如C#或Java時的一個主要缺點:錯配阻抗。


Redis其實和任何的NoSql數(shù)據(jù)庫一樣。但是它是一個內(nèi)存數(shù)據(jù)庫而表現(xiàn)十分出色。

簡單的說,Redis可以給你難以置信的存取你的對象狀態(tài)的能力從而使你的應用更加快速。有時候,你的應用速度可以優(yōu)化8到10倍。這并不是開玩笑的而且你不需要背后有Google或Facebook那樣的基礎設施。如果你想知道更多的關于Redis背后的思想和它的歷史的內(nèi)容,可以上網(wǎng)查找更多。有很多文章是關于這些的。

Redis代表了遠程字典服務( Remote Dictionary Service) 。它是一個鍵值存儲就像C#的字典對象。所以讓我們看看如何使用:


首先,按照下面的步驟安裝并運行Redis:

  •     打開redis.io,下載win64版本的redis(它并不會根據(jù)你的系統(tǒng)指定相應的版本)
  •     將下載的內(nèi)容復制到Redis文件夾(你也可以命名為其他你喜歡的名字)
  •     點擊 redis-server.exe 啟動服務端
  •     點擊 redis-client.exe 運行客戶端命令行工具
  • 現(xiàn)在我們試著運行一些基本的命令來檢測安裝是否正確。在客戶端命令行界面:
  •     輸入 set azul "hello world" 來添加一條記錄,你會收到ok的反饋。這意味著你已經(jīng)添加了一個鍵為azul值為"hello world"的條目(順便說下,azul在卡拜爾語中是問候的意思)
  •     輸入 get azul取得相應的值,你會收到反饋 hello world
  •     輸入 delete azul會刪除這個條目

因為Redis是一個字典,可以以如下方式保存鍵值:
 

復制代碼 代碼如下:
Set schedule:1 "{'origin':'Montreal','destination':'Toronto'}"

在這個示例中的值是一個json對象。這意味著你可以向Redis中添加復雜的對象。但沒必要這么做,因為Redis支持5種數(shù)據(jù)類型以滿足你的需求。

你也可以以如下方式指定key:
 

復制代碼 代碼如下:
Set schedule:id 1

對于執(zhí)行多個set 和get,可以使用mset 和mget來代替。我將不再對這些命令進行討論。你可以查看Redis文檔并盡情嘗試。

幕后

到目前為止我們所做的一切都打破了常規(guī)。但在幕后卻是Redis客戶端通過Redis協(xié)議向服務器發(fā)送指令。服務器對內(nèi)存中的數(shù)據(jù)執(zhí)行這些指令,并返回響應結果。
做為服務的Redis

你可以在物理機,虛擬機上使用Redis,也可以將Redis做為云服務。很多像Digital Ocean和Widnows Azure這類的供應商都提供該服務。我們將從Digital Ocean開始(主要考慮到價錢,并且我認為Azure的Redis服務有點貴)


我們使用PuTTY的ssh(安全連接模式)來連接到Digital Ocean。下載PuTTY并將IP地址配置為你的DO droplet地址(droplet是你在DO上創(chuàng)建的linux主機)。然后啟動PuTTY并用DO提供的root賬戶和密碼登錄。運行以下命令以保持你的linux主機的更新:apt-get update (linux用戶現(xiàn)在很激動吧).

現(xiàn)在你正在或已經(jīng)保持更新了。然后運行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();
 }

哪怕你緩存了很多對象這也是一個非??焖俚牟僮鳌T赗edis中緩存即用的對象是很好的想法,這免去了可能的業(yè)務處理操作(應用規(guī)則或其他過濾和格式化操作).

數(shù)據(jù)庫中重復提取的對象(很多時候是相同的)最好放到Redis中。通常我們要在倉庫中緩存的數(shù)據(jù)(更多細節(jié)請瀏覽緩存?zhèn)}庫模式cached repository pattern)也最好放到Redis中。這樣你就可以快速取得操作結果,大幅提升Web應用的整體性能。


注意scheduleClient將會暴露很多有關增加、添加、移除和使用列表、哈希等的函數(shù)。嘗試下探索更多。。。

你也可以設置你的Redis客戶端來看一下(不是用Glimpse-;))在添加monitor command的這種情況下發(fā)生了什么(在我們開始時添加azul的同一個地方)。

在完整的反HelloWorld應用風格(我承認我是其中之一?。┑挠率颗d奮的跳向天空之前,我還應該提醒一件事:從你的控制器連到你的數(shù)據(jù)庫(就是Redis!)不是個好主意,如果這對你來說很奇怪,我認為你需要讀一些關于設計和架構方面的東西。我不理解Microsoft的指導書讓用戶添加一個MVC項目,你就可以開始構建一耳光偉大的商業(yè)web應用了。因為不是這樣。


然而,下面是一個添加對象的例子,在這個情況下式一個調(diào)度器:

 

//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可能會給你一些你的客戶或者老板沒有給你的,關于構建可靠軟件的激情的認可。

希望這能幫到一些人!

相關文章

  • Redis集群服務器的實現(xiàn)(圖文步驟)

    Redis集群服務器的實現(xiàn)(圖文步驟)

    本文介紹了Redis集群服務器的優(yōu)勢,為讀者提供了全面的Redis集群服務器知識和使用技巧,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Redis數(shù)據(jù)庫原理深入刨析

    Redis數(shù)據(jù)庫原理深入刨析

    在之前的文章我們介紹過,Redis服務器在啟動之初,會初始化RedisServer的實例,在這個實例中存在很多重要的屬性結構,同理本篇博客中介紹的數(shù)據(jù)庫實現(xiàn)原理也會和其中的某些屬性相關,我們繼續(xù)看一下吧
    2022-11-11
  • React事件綁定的方式及區(qū)別詳解

    React事件綁定的方式及區(qū)別詳解

    React提供了多種方式來綁定事件處理函數(shù),每種方式有其獨特的特點和適用場景,理解 React中不同的事件綁定方式及其差異,不僅有助于編寫高效的代碼,也能在面試中展示你對React的深刻理解,本文將詳細講解React中常見的事件綁定方式,包括其區(qū)別、優(yōu)缺點以及適用場景
    2024-12-12
  • Redis教程(二):String數(shù)據(jù)類型

    Redis教程(二):String數(shù)據(jù)類型

    這篇文章主要介紹了Redis教程(二):String數(shù)據(jù)類型,本文講解了String數(shù)據(jù)類型概述、相關命令列表、命令使用示例三部分內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 一文搞懂Redis中的慢查詢?nèi)罩竞捅O(jiān)視器

    一文搞懂Redis中的慢查詢?nèi)罩竞捅O(jiān)視器

    我們都知道MySQL有慢查詢?nèi)罩?但Redis也有慢查詢?nèi)罩?可用于監(jiān)視和優(yōu)化查詢,本文給大家詳細介紹了Redis中的慢查詢?nèi)罩竞捅O(jiān)視器,文章通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Redis中散列類型的常用命令小結

    Redis中散列類型的常用命令小結

    散列類型的鍵值其實也是一種字典解耦,其存儲了字段和字段值的映射,但字段值只能是字符串,不支持其他數(shù)據(jù)類型,所以說散列類型不能嵌套其他的數(shù)據(jù)類型。下面就來詳細介紹下Redis中散列類型的常用命令,有需要的可以參考學習。
    2016-09-09
  • Redis中LFU算法的深入分析

    Redis中LFU算法的深入分析

    這篇文章主要給大家介紹了關于Redis中LFU算法的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • Redis慢查詢的實現(xiàn)

    Redis慢查詢的實現(xiàn)

    本文主要介紹了Redis慢查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • CentOS6.4 安裝Redis 教程詳解

    CentOS6.4 安裝Redis 教程詳解

    這篇文章主要介紹了CentOS6.4 安裝Redis 教程詳解,需要的朋友可以參考下
    2017-05-05
  • 編譯安裝redisd的方法示例詳解

    編譯安裝redisd的方法示例詳解

    這篇文章主要介紹了編譯安裝redisd的方法示例詳解,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02

最新評論

特克斯县| 南投市| 赣榆县| 平罗县| 仙桃市| 南靖县| 苏尼特左旗| 福清市| 淮阳县| 中西区| 古蔺县| 浠水县| 广平县| 沁源县| 海宁市| 兴海县| 务川| 盖州市| 林州市| 玛纳斯县| 莱阳市| 邛崃市| 乐都县| 新晃| 涞水县| 屯昌县| 新津县| 海晏县| 甘孜| 廊坊市| 宝丰县| 昌平区| 康保县| 博湖县| 台东县| 宜黄县| 淳安县| 阿尔山市| 阜宁县| 兴化市| 黔南|