欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Redis的性能

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

簡(jiǎn)介

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

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


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

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

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


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

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

Redis代表了遠(yuǎn)程字典服務(wù)( Remote Dictionary Service) 。它是一個(gè)鍵值存儲(chǔ)就像C#的字典對(duì)象。所以讓我們看看如何使用:


首先,按照下面的步驟安裝并運(yùn)行Redis:

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

因?yàn)镽edis是一個(gè)字典,可以以如下方式保存鍵值:
 

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

在這個(gè)示例中的值是一個(gè)json對(duì)象。這意味著你可以向Redis中添加復(fù)雜的對(duì)象。但沒(méi)必要這么做,因?yàn)镽edis支持5種數(shù)據(jù)類(lèi)型以滿足你的需求。

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

復(fù)制代碼 代碼如下:
Set schedule:id 1

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

幕后

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

你可以在物理機(jī),虛擬機(jī)上使用Redis,也可以將Redis做為云服務(wù)。很多像Digital Ocean和Widnows Azure這類(lèi)的供應(yīng)商都提供該服務(wù)。我們將從Digital Ocean開(kāi)始(主要考慮到價(jià)錢(qián),并且我認(rèn)為Azure的Redis服務(wù)有點(diǎn)貴)


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

現(xiàn)在你正在或已經(jīng)保持更新了。然后運(yùn)行apt-get install build-essential為你的linux服務(wù)器安裝所有缺失的工具。哦了。另外對(duì)于這些設(shè)置還有很多更詳細(xì)的博文。我不得不承認(rèn),因?yàn)槲覍?duì)linux世界不太熟悉,所以在配置的時(shí)候著實(shí)費(fèi)了翻手腳。

在 Visual Studio 中使用

在起始頁(yè),添加一個(gè)MVC項(xiàng)目,并使用Nuget包管理器添加Servicestack.redis。這樣你就可以連接到Redis并做一些有意思的事。

你需要按以下步驟做來(lái)連接Redis并被取得緩存的對(duì)象列表。
 

using(IRedisClient client = RedisClient)
 {
  var scheduleClient= client.GetTypedClient<Schedule>();
  var schedules = scheduleClient.GetAll();
 }

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

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


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

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

在完整的反HelloWorld應(yīng)用風(fēng)格(我承認(rèn)我是其中之一!)的勇士興奮的跳向天空之前,我還應(yīng)該提醒一件事:從你的控制器連到你的數(shù)據(jù)庫(kù)(就是Redis?。┎皇莻€(gè)好主意,如果這對(duì)你來(lái)說(shuō)很奇怪,我認(rèn)為你需要讀一些關(guān)于設(shè)計(jì)和架構(gòu)方面的東西。我不理解Microsoft的指導(dǎo)書(shū)讓用戶添加一個(gè)MVC項(xiàng)目,你就可以開(kāi)始構(gòu)建一耳光偉大的商業(yè)web應(yīng)用了。因?yàn)椴皇沁@樣。


然而,下面是一個(gè)添加對(duì)象的例子,在這個(gè)情況下式一個(gè)調(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);
 }

因?yàn)镽edis是一個(gè)緩存服務(wù),是可以通過(guò)設(shè)置一個(gè)超時(shí)時(shí)間讓輸入過(guò)期。你也可以通過(guò)移除那個(gè)超時(shí)來(lái)逆向這個(gè)過(guò)程。

這僅是一個(gè)關(guān)于Redis的簡(jiǎn)介,給你提供一個(gè)提高web引用性能的方法啟示。在某些情況下,Redis可能會(huì)給你一些你的客戶或者老板沒(méi)有給你的,關(guān)于構(gòu)建可靠軟件的激情的認(rèn)可。

希望這能幫到一些人!

相關(guān)文章

  • Redis連接超時(shí)異常的處理方法

    Redis連接超時(shí)異常的處理方法

    這篇文章主要給大家介紹了關(guān)于Redis連接超時(shí)異常的處理方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringSession+Redis實(shí)現(xiàn)集群會(huì)話共享的方法

    SpringSession+Redis實(shí)現(xiàn)集群會(huì)話共享的方法

    為了保證WEB應(yīng)用的承載能力, 需要對(duì)WEB應(yīng)用進(jìn)行集群處理.這篇文章主要介紹了SpringSession+Redis實(shí)現(xiàn)集群會(huì)話共享的方法,需要的朋友參考下吧
    2018-08-08
  • 詳解三分鐘快速搭建分布式高可用的Redis集群

    詳解三分鐘快速搭建分布式高可用的Redis集群

    這篇文章主要介紹了詳解三分鐘快速搭建分布式高可用的Redis集群,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 分布式利器redis及redisson的延遲隊(duì)列實(shí)踐

    分布式利器redis及redisson的延遲隊(duì)列實(shí)踐

    這篇文章為大家主要介紹了分布式利器redis及redisson的延遲隊(duì)列實(shí)踐,搜遍全網(wǎng)好像還沒(méi)有使用redisson的延遲隊(duì)列的,redisson作為一個(gè)分布式利器,這么好用的工具沒(méi)人用有點(diǎn)可惜
    2022-03-03
  • 解鎖redis鎖的正確姿勢(shì)

    解鎖redis鎖的正確姿勢(shì)

    這篇文章主要為大家詳細(xì)介紹了解鎖redis鎖的正確姿勢(shì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Linux下redis5.0.5的安裝過(guò)程與配置方法

    Linux下redis5.0.5的安裝過(guò)程與配置方法

    這篇文章主要介紹了Linux下redis5.0.5的安裝過(guò)程與配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 使用RedisAtomicInteger計(jì)數(shù)出現(xiàn)少計(jì)問(wèn)題及解決

    使用RedisAtomicInteger計(jì)數(shù)出現(xiàn)少計(jì)問(wèn)題及解決

    這篇文章主要介紹了使用RedisAtomicInteger計(jì)數(shù)出現(xiàn)少計(jì)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 利用Redis統(tǒng)計(jì)網(wǎng)站在線活躍用戶的方法

    利用Redis統(tǒng)計(jì)網(wǎng)站在線活躍用戶的方法

    Redis支持對(duì)String類(lèi)型的value進(jìn)行基于二進(jìn)制位的置位操作。通過(guò)將一個(gè)用戶的id對(duì)應(yīng)value上的一位,通過(guò)對(duì)活躍用戶對(duì)應(yīng)的位進(jìn)行置位,就能夠用一個(gè)value記錄所有活躍用戶的信息。下面這篇文章主要介紹了利用Redis統(tǒng)計(jì)網(wǎng)站在線活躍用戶的方法,需要的朋友可以參考。
    2017-01-01
  • Redis出現(xiàn)(error)NOAUTH?Authentication?required.報(bào)錯(cuò)的解決辦法(秒懂!)

    Redis出現(xiàn)(error)NOAUTH?Authentication?required.報(bào)錯(cuò)的解決辦法(秒懂!)

    這篇文章主要給大家介紹了關(guān)于Redis出現(xiàn)(error)NOAUTH?Authentication?required.報(bào)錯(cuò)的解決辦法,對(duì)于 這個(gè)錯(cuò)誤這通常是因?yàn)镽edis服務(wù)器需要密碼進(jìn)行身份驗(yàn)證,但客戶端沒(méi)有提供正確的身份驗(yàn)證信息導(dǎo)致的,需要的朋友可以參考下
    2024-03-03
  • 在K8s上部署Redis集群的方法步驟

    在K8s上部署Redis集群的方法步驟

    這篇文章主要介紹了在K8s上部署Redis集群的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論