成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第一節(jié):Redis簡(jiǎn)介

enali / 2035人閱讀

摘要:上一篇文章實(shí)戰(zhàn)安裝下一篇文章實(shí)戰(zhàn)第一章初識(shí)第二節(jié)數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介是一個(gè)遠(yuǎn)程內(nèi)存數(shù)據(jù)庫(kù),它不僅性能強(qiáng)勁,而且還具有復(fù)制特性以及為解決問(wèn)題而生的獨(dú)一無(wú)二的數(shù)據(jù)模型,是一個(gè)速度非常快的非關(guān)系數(shù)據(jù)庫(kù)。

上一篇文章:Pyhton--Redis實(shí)戰(zhàn):Mac brew安裝redis
下一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介

Redis是一個(gè)遠(yuǎn)程內(nèi)存數(shù)據(jù)庫(kù),它不僅性能強(qiáng)勁,而且還具有復(fù)制特性以及為解決問(wèn)題而生的獨(dú)一無(wú)二的數(shù)據(jù)模型,是一個(gè)速度非??斓姆顷P(guān)系數(shù)據(jù)庫(kù)(no-relational database)。

Redis提供了5種不同類型的數(shù)據(jù)結(jié)構(gòu),它可以存儲(chǔ)鍵(key)與5種不同類型的值(value)之間的映射(mapping),各式各樣的問(wèn)題都可以很自然地映射到這些數(shù)據(jù)結(jié)構(gòu)上:Redis的數(shù)據(jù)結(jié)構(gòu)致力于幫助用戶解決問(wèn)題,而不會(huì)像其他數(shù)據(jù)庫(kù)那樣,要求用戶扭曲問(wèn)題來(lái)適應(yīng)數(shù)據(jù)庫(kù)。除此之外,通過(guò)復(fù)制、持久化(persistence)和客戶端分片(client-side sharding)等特性,用戶可以很方便地將Redis擴(kuò)展成一個(gè)能夠包含數(shù)百GB數(shù)據(jù)、每秒處理上百萬(wàn)此請(qǐng)求的系統(tǒng)。

持久化:將存儲(chǔ)在內(nèi)存的鍵值對(duì)數(shù)據(jù)持久化帶硬盤(pán)。
Redis與其它數(shù)據(jù)庫(kù)和軟件的對(duì)比

如果你熟悉關(guān)系數(shù)據(jù)庫(kù),那么你肯定寫(xiě)過(guò)用來(lái)關(guān)聯(lián)兩個(gè)表的數(shù)據(jù)的SQL查詢。而Redis則屬于人民常說(shuō)的NoSQL數(shù)據(jù)庫(kù)或者非關(guān)系數(shù)據(jù)庫(kù):Redis不使用表,它的數(shù)據(jù)庫(kù)也不會(huì)預(yù)定義或者強(qiáng)制要求用戶對(duì)Redis存儲(chǔ)的不同數(shù)據(jù)進(jìn)行關(guān)聯(lián)。

高性能鍵值對(duì)緩存服務(wù)器memcached也經(jīng)常被拿來(lái)于Redis進(jìn)行比較:這兩者都可以用于存儲(chǔ)鍵值映射,彼此的性能也相差無(wú)幾,但是Redis能夠自動(dòng)以兩種不同的方式將數(shù)據(jù)寫(xiě)入硬盤(pán),并且Redis除了能存儲(chǔ)普通的字符串鍵之外,還可以存儲(chǔ)其它4種數(shù)據(jù)結(jié)構(gòu),而memcached只能存儲(chǔ)普通的字符串。這些不同之處使得Redis可以用于解決更為廣泛的問(wèn)題,并且即可以用于主數(shù)據(jù)庫(kù)(primary database)使用,又可以作為其他存儲(chǔ)系統(tǒng)的輔助數(shù)據(jù)庫(kù)(auxiliar database)來(lái)使用。

一般來(lái)說(shuō),用戶只會(huì)在Redis的性能或者功能是必要的情況下,才會(huì)將數(shù)據(jù)存儲(chǔ)到Redis中。如果程序?qū)π阅芤蟛桓?,又或者因?yàn)橘M(fèi)用原因而沒(méi)有辦法將大量數(shù)據(jù)庫(kù)存儲(chǔ)到內(nèi)存中,那么用戶可以選擇使用關(guān)系數(shù)據(jù)庫(kù),或者其他非關(guān)系數(shù)據(jù)庫(kù)。

下表展示了一部分功能上與Redis有重疊的數(shù)據(jù)庫(kù)服務(wù)器和緩存服務(wù)器。從這個(gè)表可以看出Redis與這些數(shù)據(jù)庫(kù)及軟件之間的區(qū)別。

名稱 類型 數(shù)據(jù)存儲(chǔ)選項(xiàng) 查詢類型 附加功能
Redis 使用內(nèi)存存儲(chǔ)(in-memory)的非關(guān)系數(shù)據(jù)庫(kù) 字符串、列表、集合、散列表、有序集合 每種數(shù)據(jù)類型都有自己的專屬命令,另外還有批量操作(bulk operation)和不完全(partial)的事務(wù)支持。 發(fā)布與訂閱,主從復(fù)制(master/slave replication),持久化,腳本(存儲(chǔ)過(guò)程,stored procedure)
memcached 使用內(nèi)存存儲(chǔ)的鍵值緩存 鍵值之間的映射 創(chuàng)建命令、讀取命令、更新命令、刪除命令以及其他幾個(gè)命令。 為提升性能而設(shè)的多線程服務(wù)器。
MySQL 關(guān)系數(shù)據(jù)庫(kù) 每個(gè)數(shù)據(jù)庫(kù)可以包含多個(gè)表,每個(gè)表包含多個(gè)行,可以處理多個(gè)表的視圖(view)、支持空間(spatial)和第三方擴(kuò)展 SELECT、INSERT、UPDATE、DELETE、函數(shù)、存儲(chǔ)過(guò)程。 支持ACID性質(zhì)(需要使用InnoDB)。主從復(fù)制和主主復(fù)制(master/master replication)
PostgreSQL 關(guān)系數(shù)據(jù)庫(kù) 每個(gè)數(shù)據(jù)庫(kù)可以包含多個(gè)表,每個(gè)表可以包含多個(gè)行;可以處理多個(gè)表的視圖;支持空間和第三方擴(kuò)展;支持可定制類型。 SELECT、INSERT、UPDATE、DELETE、內(nèi)置函數(shù)、自定義的存儲(chǔ)過(guò)程。 支持ACID性質(zhì)。主從復(fù)制,由第三方支持的多主復(fù)制(multi-master replication)
MongoDB 使用硬盤(pán)存儲(chǔ)(on-disk)的非關(guān)系文檔存儲(chǔ) 每個(gè)數(shù)據(jù)庫(kù)可以包含多個(gè)表,每個(gè)表可以包含多個(gè)無(wú)schema(schema-less)的BSON文檔 創(chuàng)建命令、讀取命令、更新命令、刪除命令、條件查詢命令等。 支持map-reduce操作,主從復(fù)制。分片??丶饕╯patial index)
附加特性

在使用類似Redis這樣的內(nèi)存數(shù)據(jù)庫(kù)時(shí),一個(gè)首先要考慮的問(wèn)題就是【當(dāng)服務(wù)器關(guān)閉時(shí),服務(wù)器存儲(chǔ)的數(shù)據(jù)將何去何從呢?】

Redis擁有兩種不同形式的持久化方法,他們都可以用小而緊湊的格式將存儲(chǔ)在內(nèi)存中的數(shù)據(jù)寫(xiě)入硬盤(pán):

第一種持久化方法為:時(shí)間點(diǎn)轉(zhuǎn)儲(chǔ)(point-in-time dump)。轉(zhuǎn)儲(chǔ)操作既可以在【指定時(shí)間段內(nèi)有指定數(shù)量的寫(xiě)操作執(zhí)行】這一條件被滿足時(shí)執(zhí)行,又可以通過(guò)調(diào)用兩條轉(zhuǎn)儲(chǔ)的硬盤(pán)(dump-to-disk)命令中的任何一條來(lái)執(zhí)行。

第二種持久化方法為:將所有修改了數(shù)據(jù)庫(kù)的命令都寫(xiě)入一個(gè)只追加(append-only)文件里面,用戶可以根據(jù)數(shù)據(jù)的重要程度,將只追加寫(xiě)入設(shè)置為:從不同步、每秒同步一次、寫(xiě)入一個(gè)命令就同步一次。

盡管Redis的性能很好,但受限于Redis的內(nèi)存存儲(chǔ)設(shè)計(jì),有時(shí)候只使用一臺(tái)Redis服務(wù)器可能沒(méi)有辦法處理所有請(qǐng)求,因此,為了擴(kuò)展Redis的讀性能,并為Redis提供故障轉(zhuǎn)移(failover)支持,Redis實(shí)現(xiàn)了主從復(fù)制特性:

執(zhí)行復(fù)制的從服務(wù)器會(huì)連接上主服務(wù)器,接受主服務(wù)器發(fā)送的整個(gè)數(shù)據(jù)庫(kù)的初始副本(copy);

之后主服務(wù)器執(zhí)行的寫(xiě)命令,都會(huì)被發(fā)送給所有連接著的【從服務(wù)器】去執(zhí)行,從而實(shí)時(shí)的更新從服務(wù)器的數(shù)據(jù)集。

因?yàn)椤緩姆?wù)器】包含的數(shù)據(jù)會(huì)不斷的更新,所以客戶端可以向任意一個(gè)從服務(wù)器發(fā)送【讀請(qǐng)求】,以此來(lái)避免對(duì)主服務(wù)器進(jìn)行集中式訪問(wèn)。

使用Redis的理由

有memcached使用經(jīng)驗(yàn)的讀者可能知道,用戶只能用APPEND命令將數(shù)據(jù)添加到已有字符串的末尾。memcached的文檔中聲明,可以用APPEND命令來(lái)管理元素列表。這很好,用戶可以將元素追加到一個(gè)字符串的末尾,并將那個(gè)字符串當(dāng)做列表來(lái)使用。但隨后如何刪除這些元素呢?memcached采用的方法是通過(guò)黑名單(blacklist)來(lái)隱藏列表里面的元素,從而避免對(duì)元素執(zhí)行讀寫(xiě)、更新、寫(xiě)入(包括在一次數(shù)據(jù)庫(kù)查詢之后執(zhí)行的memcached寫(xiě)入)等操作。相反的,Redis的LIST和SET允許用戶添加或則刪除元素。

使用Redis而不是 memcached來(lái)解決問(wèn)題,不僅可以讓代碼變得更簡(jiǎn)短、更易懂、更易維護(hù),而且還可以使代碼的允許速度更快(因?yàn)橛脩舨恍枰ㄟ^(guò)讀取數(shù)據(jù)庫(kù)來(lái)更新數(shù)據(jù))。除此之外,在其他很多情況下,Redis的效率和易用性也比關(guān)系數(shù)據(jù)庫(kù)要好的多。

數(shù)據(jù)庫(kù)的一個(gè)常見(jiàn)用法是存儲(chǔ)長(zhǎng)期的報(bào)告數(shù)據(jù),并將這些報(bào)告數(shù)據(jù)用作固定時(shí)間范圍內(nèi)的聚合數(shù)據(jù)(aggregates)。收集聚合數(shù)據(jù)的常見(jiàn)做法是:

先將各個(gè)行插入一個(gè)報(bào)告表里面

之后再通過(guò)掃描這些行來(lái)收集聚合數(shù)據(jù)

再根據(jù)收集到的聚合數(shù)據(jù)來(lái)更新聚合表中已有的那些行。

之所以使用插入行的方式來(lái)存儲(chǔ),是因?yàn)閷?duì)于大部分?jǐn)?shù)據(jù)庫(kù)來(lái)說(shuō),出入行操作的執(zhí)行速度非常快(插入行只會(huì)在硬盤(pán)文件末尾進(jìn)行寫(xiě)入)。不過(guò),對(duì)表里面的行進(jìn)行更新卻是一個(gè)非常慢的操作,因?yàn)檫@種更新除了會(huì)引起一次隨機(jī)讀(random read)之外,還可能會(huì)引起一次隨機(jī)寫(xiě)(random write)。而Redis里面,用戶可以直接使用原子的(atomic)INCR命令及其變種來(lái)計(jì)算聚合數(shù)據(jù),并且因?yàn)镽edis將數(shù)據(jù)存儲(chǔ)在內(nèi)存里面,而且發(fā)送給Redis的命令請(qǐng)求并不需要經(jīng)過(guò)典型的查詢分析器(parser)或者查詢優(yōu)化器(optimizer)進(jìn)行處理,所有對(duì)Redis存儲(chǔ)的數(shù)據(jù)執(zhí)行隨機(jī)寫(xiě)的速度總是非常迅速的。

使用Redis而不是關(guān)系數(shù)據(jù)庫(kù)或則其他硬盤(pán)存儲(chǔ)數(shù)據(jù)庫(kù),可以避免寫(xiě)入不必要的臨時(shí)數(shù)據(jù),也免去了對(duì)臨時(shí)數(shù)據(jù)進(jìn)行掃描或則刪除的麻煩,并最終改善程序的性能。

【工具會(huì)極大地改變?nèi)藗兘鉀Q問(wèn)題的方式】

上一篇文章:Pyhton--Redis實(shí)戰(zhàn):Mac brew安裝redis
下一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42518.html

相關(guān)文章

  • Python--Redis實(shí)戰(zhàn)一章初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介

    摘要:上一篇文章實(shí)戰(zhàn)第一章初識(shí)第一節(jié)簡(jiǎn)介下一篇文章實(shí)戰(zhàn)第一章初識(shí)第三節(jié)你好文章投票試煉可以存儲(chǔ)鍵與種不同的數(shù)據(jù)結(jié)構(gòu)類型之間的映射,這中數(shù)據(jù)結(jié)構(gòu)類別分別是字符串列表集合散列和有序集合。 上一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第一節(jié):Redis簡(jiǎn)介下一篇文章:Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第三節(jié):你好Redis-文章投票試煉 Redis可...

    ghnor 評(píng)論0 收藏0
  • Python--Redis實(shí)戰(zhàn)一章初識(shí)Redis:第三節(jié):你好Redis-文章投票試煉

    摘要:為了防止用戶對(duì)同一篇文章進(jìn)行多次投票,網(wǎng)站需要為每一篇文章記錄一個(gè)已投票用戶名單。上一篇文章實(shí)戰(zhàn)第一章初識(shí)第二節(jié)數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介下一篇文章實(shí)戰(zhàn)第二章使用構(gòu)建應(yīng)用第一節(jié)登錄和緩存 上一篇文章: Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介下一篇文章:Python--Redis實(shí)戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第一節(jié):登錄和cookie緩存 ...

    Meils 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<