亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于REIDS緩存框架的分析與實踐

        2014-12-25 05:02:58姜學(xué)軍史海洋
        科技視界 2014年26期
        關(guān)鍵詞:數(shù)據(jù)量調(diào)用內(nèi)存

        馬 冰 姜學(xué)軍 史海洋

        (沈陽理工大學(xué),遼寧 沈陽110159)

        1 特性

        Redis是一個高性能的key-value數(shù)據(jù)庫。redis的出現(xiàn),很大程度補(bǔ)償了memcached這類key/value存儲的不足,在部分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便[1]。它有以下幾個特點:

        1.1 速度快

        Redis使用標(biāo)準(zhǔn)C編寫實現(xiàn),而且數(shù)據(jù)加載到內(nèi)存上,所以讀寫速度非???。官方提供的數(shù)據(jù)表明,普通的Linux機(jī)器上,Redis的讀寫速度分別達(dá)到81000/s和110000/s。

        Redis使用單線程的IO復(fù)用模型。自己封裝了一個簡單的AeEvent事件處理框架,主要實現(xiàn)了epoll,kqueue和select,對于單純只有IO操作來說,單線程可以將速度優(yōu)勢發(fā)揮到最大。

        1.2 持久化

        由于所有數(shù)據(jù)保存于內(nèi)存中,所以對數(shù)據(jù)的更新將異步地保存到磁盤上。

        1.3 數(shù)據(jù)結(jié)構(gòu)

        相比于其他內(nèi)存型數(shù)據(jù)庫,Redis不只支持字符串類型,而是支持多種數(shù)據(jù)結(jié)構(gòu)。目前支持5種。分別為string(字符串)、hash(hash表)、list(雙向鏈表)、set(無序集合)、zset(有序集合)。

        1.4 自動操作

        Redis對不同數(shù)據(jù)類型操作時自動的,因此設(shè)置或增加key,從一個集合中增加或刪除一個元素都能安全的操作。

        1.5 支持多種語言

        Redis支持多種語言,諸如Ruby,Python,PHP,ErLang,Perl,Lua,Java,Scala等。

        1.6 主-從復(fù)制

        Redis支持簡單而快速的主從復(fù)制。官方提供數(shù)據(jù),Slave在21秒內(nèi)即完成了Amazon網(wǎng)站10Gkey Set的復(fù)制。

        1.7 Sharding

        目前只支持PHP,Ruby,Scala語言的Sharding功能。

        2 適應(yīng)場景

        1)小數(shù)據(jù)量,高速讀寫訪問。

        2)大數(shù)據(jù)量,有明顯熱點數(shù)據(jù)。

        3)大數(shù)據(jù)量,無熱點數(shù)據(jù)。

        4)所有數(shù)據(jù)in-memory。

        3 源碼分析

        4 比較MySQL與Redis存取效率比較

        (代碼都是用java語言完成,數(shù)據(jù)庫操作采用MyBatis框架,Redis操作使用Spring提供的方法)

        4.1 存儲性能比較

        4.2 查詢性能比較

        4.3 最后結(jié)果與分析

        表1 執(zhí)行五次來進(jìn)行比較兩者的時間(毫秒)

        可見,redis的存取性能要極大程度優(yōu)于數(shù)據(jù)庫,所以在應(yīng)用中合適的使用redis,能極大提升產(chǎn)品性能。

        Redis存取速度快的原因分析如下:

        4.3.1 純內(nèi)存操作

        Redis所有數(shù)據(jù)存儲于內(nèi)存中,內(nèi)存中的操作速度比磁盤快的多。

        4.3.2 Redis的存取底層使用異步非阻塞IO

        系統(tǒng)I/O可分為阻塞型,非阻塞同步型以及非阻塞異步型。

        阻塞型I/O意味著控制權(quán)只到調(diào)用操作結(jié)束了才會回到調(diào)用者手里.結(jié)果調(diào)用者被阻塞了,這段時間了做不了任何其它事情。

        非阻塞同步是會立即返回控制權(quán)給調(diào)用者的。調(diào)用者不需要等等,它從調(diào)用的函數(shù)獲取兩種結(jié)果:要么此次調(diào)用成功進(jìn)行了;要么系統(tǒng)返回錯誤標(biāo)識告訴調(diào)用者當(dāng)前資源不可用,你再等等或者再試度看吧。

        在非阻塞異步調(diào)用中,稍有不同。調(diào)用函數(shù)在立即返回時,還告訴調(diào)用者,這次請求已經(jīng)開始了。系統(tǒng)會使用另外的資源或者線程來完成這次調(diào)用操作,并在完成的時候知會調(diào)用者(比如通過回調(diào)函數(shù))[2]。

        In a non-blocking asynchronous call,the calling function returns control to the caller immediately,reporting that the requested action was started.The calling system will execute the caller’s request using additional system resources/threads and will notify the caller(by callback for example),when the result is ready for processing。[3]

        在以上三種IO形式中,非阻塞異步是性能最高、伸縮性最好的。

        4.3.3 采用Epoll接口實現(xiàn)IO復(fù)用

        與epoll模式相比較,有select模式,select模式是采用輪詢的方式,來檢測所有socket的狀態(tài),當(dāng)有很大的socket集時,即使有小部分是活躍的,內(nèi)核也需要把整個集合輪詢才能知道所有socket的狀態(tài)變化,而epoll模式是在創(chuàng)建時即對需要關(guān)注的socket注冊事件,當(dāng)某一個監(jiān)聽的socket有狀態(tài)變化,就將其保存到一個內(nèi)部數(shù)組中,當(dāng)應(yīng)用層需要檢測時直接返回該數(shù)組,不需要對所有socket逐一檢查,所以epoll模式的性能優(yōu)于select模式。

        5 Redis實踐

        5.1 有存活時間的數(shù)據(jù)存于redis中

        需要設(shè)置數(shù)據(jù)的一定存活時間。例如找回密碼功能,用戶需要填寫郵箱,然后發(fā)送一個連接到用戶郵箱中,該連接是有時間限制,半小時后即失效。此時就可以利用redis存儲數(shù)據(jù)可以設(shè)置有效時間的功能。并且不需要存儲于數(shù)據(jù)庫,讀取redis的效率更高。

        讀取時直接在redis中查詢key為"redis.global.forgetPass",如果有值則說明未超時,為空則說明連接失效。

        5.2 系統(tǒng)設(shè)置(基本不會變化數(shù)據(jù)存于redis中)

        一些全局的系統(tǒng)設(shè)置,基本上都是在第一次啟動應(yīng)用的時候設(shè)置,以后就不會再修改的數(shù)據(jù),可以存于redis中,設(shè)置不自動失效。

        5.3 業(yè)務(wù)數(shù)據(jù)

        所有業(yè)務(wù)數(shù)據(jù),可以通過數(shù)據(jù)庫主鍵ID當(dāng)成key或者一些層級關(guān)系生成redis存儲的key,將整個數(shù)據(jù)對象存儲于redis,極大的減少數(shù)據(jù)庫查詢次數(shù),提高應(yīng)用性能。

        例如:數(shù)據(jù)的層級為 代理商→租戶→用戶 則用戶可以在redis中存儲的數(shù)據(jù)為

        Key:redis.user.partnerId.customerId.userId

        Value:user的數(shù)據(jù)對象

        e.g.redis.user.1.33.21 redis.user.3.42.13。

        [1]百度百科.Redis[EB/OL].http://baike.baidu.com/view/4595959.htm,2014.

        [2]veryDemo.兩種高性能I/O設(shè)計模式(Reactor/Proactor)的比較[Z].2005.

        [3]Artima developer.Comparing Two High-Performance I/ODesign Patterns[Z].2005.

        猜你喜歡
        數(shù)據(jù)量調(diào)用內(nèi)存
        基于大數(shù)據(jù)量的初至層析成像算法優(yōu)化
        計算Lyapunov指數(shù)的模糊C均值聚類小數(shù)據(jù)量法
        高刷新率不容易顯示器需求與接口標(biāo)準(zhǔn)帶寬
        寬帶信號采集與大數(shù)據(jù)量傳輸系統(tǒng)設(shè)計與研究
        電子制作(2019年13期)2020-01-14 03:15:18
        核電項目物項調(diào)用管理的應(yīng)用研究
        “春夏秋冬”的內(nèi)存
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        基于內(nèi)存的地理信息訪問技術(shù)
        利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
        国产私人尤物无码不卡| 一个人午夜观看在线中文字幕| 台湾无码av一区二区三区| 久久免费看的少妇一级特黄片| 欧美日韩一区二区三区视频在线观看| 亚洲国产精品无码专区在线观看| 自拍情爱视频在线观看| 国产精品亚洲一区二区无码| 电影内射视频免费观看| 久久综合加勒比东京热| 日本www一道久久久免费榴莲| 亚洲av无码一区二区三区网址| 手机在线播放成人av| 岛国大片在线免费观看| 久久国产成人精品国产成人亚洲| 亚洲美女性生活一级片| 真人新婚之夜破苞第一次视频| 国产激情一区二区三区不卡av | 人妻去按摩店被黑人按中出| 国产精华液一区二区三区| 亚洲AV秘 无套一区二区三区 | 精品少妇一区二区三区四区| 欧美黑人又粗又大久久久| 亚洲av乱码一区二区三区按摩| 国产一区二区三区精品乱码不卡 | 精品无码国产污污污免费网站| 人妻精品久久久久中文字幕69| 青青青爽在线视频免费播放| 亚洲国产剧情在线精品视| 亚洲午夜精品久久久久久人妖| 狂猛欧美激情性xxxx大豆行情| 在线观看国产精品一区二区不卡| 中文字幕在线观看国产双飞高清 | 亚洲欧美综合精品成人网站| 亚洲人妻御姐中文字幕| 国产大片中文字幕| 亚洲av无码一区二区三区四区 | 精品国产精品久久一区免费| 欧美日韩中文亚洲另类春色| 国产麻豆剧传媒精品国产av| 九九在线中文字幕无码|