亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

redis概述:

Redis是一個(gè)開(kāi)源的Key-Value存儲(chǔ)系統(tǒng),其中Value支持String、list、set、hash、zset五種數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)都支持push/pop、add/remove、取交集并集、排序等豐富的操作,并且這些操作都是原子性的。

與同為NoSQL型緩存數(shù)據(jù)庫(kù)的memcached類(lèi)似,Redis的數(shù)據(jù)都存在內(nèi)存中,數(shù)據(jù)的運(yùn)算都在內(nèi)存中進(jìn)行,不會(huì)發(fā)生IO,這也是Redis為什么這么快的一個(gè)原因;區(qū)別是Redis具備持久化方式,會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)(RDB)或者把修改操作追加寫(xiě)入記錄文件中(AOF)。

也就是說(shuō),Redis的數(shù)據(jù)存放在內(nèi)存中,但Redis也支持持久化將數(shù)據(jù)存入磁盤(pán)或文件。

Redis是單線程的,但是多任務(wù)并發(fā)時(shí)可以開(kāi)啟多個(gè)Redis,并且Redis支持主從同步,避免了宕機(jī)帶來(lái)的影響,以及寫(xiě)時(shí)同步技術(shù)實(shí)現(xiàn)了數(shù)據(jù)讀寫(xiě)分離(主機(jī)負(fù)責(zé)寫(xiě)入、從機(jī)負(fù)責(zé)讀取)。

ps:Redis的特點(diǎn)是單線程+多路IO復(fù)用

 

Redis緩存的使用,極大的提升了應(yīng)用程序的性能和效率,特別是數(shù)據(jù)查詢方面。但同時(shí),它也帶來(lái)了一些問(wèn)題。其中,最要害的問(wèn)題,就是數(shù)據(jù)的一致性問(wèn)題,從嚴(yán)格意義上講,這個(gè)問(wèn)題無(wú)解。如果對(duì)數(shù)據(jù)的一致性要求很高,那么就不能使用緩存。

另外的一些典型問(wèn)題就是,緩存穿透、緩存雪崩和緩存擊穿。目前,業(yè)界也都有比較流行的解決方案。本篇文章,來(lái)給大家講解一下Redis穿透的解決方法—布隆過(guò)濾器

緩存穿透

緩存穿透,是指查詢一個(gè)數(shù)據(jù)庫(kù)一定不存在的數(shù)據(jù)。正常的使用緩存流程大致是,數(shù)據(jù)查詢先進(jìn)行緩存查詢,如果key不存在或者key已經(jīng)過(guò)期,再對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢,并把查詢到的對(duì)象,放進(jìn)緩存。如果數(shù)據(jù)庫(kù)查詢對(duì)象為空,則不放進(jìn)緩存。

Redis穿透的解決方法—布隆過(guò)濾器

 

代碼流程

  1. 參數(shù)傳入對(duì)象主鍵ID
  2. 根據(jù)key從緩存中獲取對(duì)象
  3. 如果對(duì)象不為空,直接返回
  4. 如果對(duì)象為空,進(jìn)行數(shù)據(jù)庫(kù)查詢
  5. 如果從數(shù)據(jù)庫(kù)查詢出的對(duì)象不為空,則放入緩存(設(shè)定過(guò)期時(shí)間)

想象一下這個(gè)情況,如果傳入的參數(shù)為-1,會(huì)是怎么樣?這個(gè)-1,就是一定不存在的對(duì)象。就會(huì)每次都去查詢數(shù)據(jù)庫(kù),而每次查詢都是空,每次又都不會(huì)進(jìn)行緩存。假如有惡意攻擊,就可以利用這個(gè)漏洞,對(duì)數(shù)據(jù)庫(kù)造成壓力,甚至壓垮數(shù)據(jù)庫(kù)。即便是采用UUID,也是很容易找到一個(gè)不存在的KEY,進(jìn)行攻擊。

布隆過(guò)濾器(Bloom Filter)

它實(shí)際上是一個(gè)很長(zhǎng)的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過(guò)濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。它的優(yōu)點(diǎn)是空間效率和查詢時(shí)間都比一般的算法要好的多,缺點(diǎn)是有一定的誤識(shí)別率和刪除困難。

Redis穿透的解決方法—布隆過(guò)濾器

 

布隆過(guò)濾器解決方法:

將數(shù)據(jù)庫(kù)中所有的查詢條件,放入布隆過(guò)濾器中,

當(dāng)一個(gè)查詢請(qǐng)求過(guò)來(lái)時(shí),先經(jīng)過(guò)布隆過(guò)濾器進(jìn)行查,如果判斷請(qǐng)求查詢值存在,則繼續(xù)查;如果判斷請(qǐng)求查詢不存在,直接丟棄。

布隆過(guò)濾器原理

原理就是一個(gè)對(duì)一個(gè)key進(jìn)行k個(gè)hash算法獲取k個(gè)值,在比特?cái)?shù)組中將這k個(gè)值散列后設(shè)定為1,然后查的時(shí)候如果特定的這幾個(gè)位置都為1,那么布隆過(guò)濾器判斷該key存在。

布隆過(guò)濾器可能會(huì)誤判,如果它說(shuō)不存在那肯定不存在,如果它說(shuō)存在,那數(shù)據(jù)有可能實(shí)際不存在;

Redis的bitmap只支持2^32大小,對(duì)應(yīng)到內(nèi)存也就是512MB,誤判率萬(wàn)分之一,可以放下2億左右的數(shù)據(jù),性能高,空間占用率及小,省去了大量無(wú)效的數(shù)據(jù)庫(kù)連接。

因此我們可以通過(guò)布隆過(guò)濾器,將Redis緩存穿透控制在一個(gè)可容范圍內(nèi)。

 

Redis穿透的解決方法—布隆過(guò)濾器

 

分享到:
標(biāo)簽:Redis
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定