国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

復(fù)習(xí)第二章之Redis

這篇具有很好參考價(jià)值的文章主要介紹了復(fù)習(xí)第二章之Redis。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、什么是Redis

Redis 本質(zhì)上是一個(gè) Key-Value 類型的內(nèi)存數(shù)據(jù)庫(kù),很像 memcached,整個(gè) 數(shù)據(jù)庫(kù)統(tǒng)統(tǒng)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過(guò)異步操作把數(shù)據(jù)庫(kù)數(shù)據(jù) flush 到硬盤 上進(jìn)行保存。因?yàn)槭羌儍?nèi)存操作,Redis 的性能非常出色,每秒可以處理超過(guò) 10 萬(wàn)次讀寫(xiě)操作,是已知性能最快的 Key-Value DB。

Redis 的出色之處不僅僅是性能,Redis 最大的魅力是支持保存多種數(shù)據(jù)結(jié)構(gòu),此外單 個(gè) value 的最大限制是1GB,不像 memcached 只能保存 1MB 的數(shù)據(jù),另外 Redis 也可以對(duì)存入的 Key-Value 設(shè)置 expire 時(shí)間。

Redis 的主要缺點(diǎn)是數(shù)據(jù)庫(kù)容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫(xiě),因此 Redis 適合的場(chǎng)景主要
局限在較小數(shù)據(jù)量的高性能操作和運(yùn)算上。

二、Redis的數(shù)據(jù)類型

Redis 的數(shù)據(jù)結(jié)構(gòu)有五種,分別是:

String——字符串
String 數(shù)據(jù)結(jié)構(gòu)是簡(jiǎn)單的 key-value 類型,value 不僅可以是 String,也可以是數(shù)字(當(dāng)數(shù)字類型用 Long 可以表示的時(shí)候 encoding 就是整型,其他都存儲(chǔ)在 sdshdr 當(dāng)做字符串)。

Hash——字典
在 Memcached 中,我們經(jīng)常將一些結(jié)構(gòu)化的信息打包成 hashmap,在客戶端序列化后存儲(chǔ)為一個(gè)字符串的值(一般是 JSON 格式),比如用戶的昵稱、年齡、性別、積分等。

List——列表
List 說(shuō)白了就是鏈表(redis 使用雙端鏈表實(shí)現(xiàn)的 List),相信學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)知識(shí)的人都應(yīng)該能理解其結(jié)構(gòu)。

Set——集合
Set 就是一個(gè)集合,集合的概念就是一堆不重復(fù)值的組合。利用 Redis 提供的 Set 數(shù)據(jù)結(jié)構(gòu),可以存儲(chǔ)一些集合性的數(shù)據(jù)。

Sorted Set——有序集合
和 Sets 相比,Sorted Sets 是將 Set 中的元素增加了一個(gè)權(quán)重參數(shù) score,使得集合中的元素能夠按 score 進(jìn)行有序排列,比如一個(gè)游戲的用戶得分排行榜。
注意: 這里的Sorted Set有爭(zhēng)議,也有人說(shuō)是zset,但總的來(lái)說(shuō)原理是一樣的只是在叫法上有些不一樣,也有可能是隨著redis的更新所導(dǎo)致的名稱的變換,有懂的人可以評(píng)論區(qū)留言交流一下。

2.1 Redis的使用場(chǎng)景

Redis(REmote DIctionary Server)是一個(gè)基于內(nèi)存的高性能鍵值存儲(chǔ)系統(tǒng)。由于其快速、可靠和靈活的特性,Redis 在各種場(chǎng)景下被廣泛應(yīng)用,包括以下幾個(gè)常見(jiàn)的使用場(chǎng)景:

  1. 緩存(Caching):Redis 作為內(nèi)存數(shù)據(jù)庫(kù),對(duì)于經(jīng)常訪問(wèn)的數(shù)據(jù)進(jìn)行緩存是它最常見(jiàn)的用途之一。通過(guò)將計(jì)算結(jié)果、數(shù)據(jù)庫(kù)查詢結(jié)果或經(jīng)常使用的數(shù)據(jù)存儲(chǔ)在 Redis 中,可以大大提高系統(tǒng)響應(yīng)速度和吞吐量。Redis 提供了靈活的緩存策略和過(guò)期時(shí)間設(shè)置,以滿足不同緩存需求。

  2. 分布式鎖(Distributed Locking):Redis 提供了一種簡(jiǎn)單高效的方法來(lái)實(shí)現(xiàn)分布式鎖。通過(guò)使用 Redis 的原子操作,比如 SETNX(set if not exist)命令,可以實(shí)現(xiàn)多個(gè)分布式節(jié)點(diǎn)之間的互斥訪問(wèn),確保某個(gè)任務(wù)只能由一個(gè)節(jié)點(diǎn)處理。

  3. 會(huì)話存儲(chǔ)(Session Storage):在分布式環(huán)境中,使用 Redis 儲(chǔ)存和管理用戶會(huì)話數(shù)據(jù)可以實(shí)現(xiàn)無(wú)狀態(tài)應(yīng)用。將用戶的登錄狀態(tài)或其他會(huì)話數(shù)據(jù)存儲(chǔ)在 Redis 中,使得不同節(jié)點(diǎn)之間可以共享會(huì)話狀態(tài),提高了系統(tǒng)的可伸縮性和容錯(cuò)性。

  4. 消息隊(duì)列(Message Queue):Redis 的 Pub/Sub(發(fā)布/訂閱)功能可以用作輕量級(jí)的消息隊(duì)列系統(tǒng)。通過(guò)發(fā)布者將消息發(fā)送到指定的頻道,訂閱者可以實(shí)時(shí)獲取到消息并進(jìn)行處理。這種方式可用于實(shí)現(xiàn)異步消息傳遞、任務(wù)分發(fā)和事件驅(qū)動(dòng)等應(yīng)用。

  5. 計(jì)數(shù)器和統(tǒng)計(jì)信息(Counters & Statistics):Redis 提供了一些特殊的數(shù)據(jù)類型(如計(jì)數(shù)器和有序集合),可用于存儲(chǔ)和操作計(jì)數(shù)器、計(jì)量數(shù)據(jù)和統(tǒng)計(jì)信息。它支持原子操作,可以快速地對(duì)計(jì)數(shù)器進(jìn)行增減操作,并提供了方便的集合操作(如按范圍獲取數(shù)據(jù)、按權(quán)重排序)。

  6. 實(shí)時(shí)排行榜(Leaderboard):Redis 的有序集合數(shù)據(jù)類型可以用于創(chuàng)建實(shí)時(shí)排行榜。通過(guò)將用戶的分?jǐn)?shù)和標(biāo)識(shí)存儲(chǔ)在有序集合中,可以方便地進(jìn)行排名、范圍查詢和 Top N 查詢等操作,用于實(shí)現(xiàn)游戲排行榜、熱門內(nèi)容排名等功能。

除了以上場(chǎng)景,Redis 還可以用于實(shí)現(xiàn)分布式緩存、實(shí)時(shí)數(shù)據(jù)分析、時(shí)間序列數(shù)據(jù)存儲(chǔ)等各種應(yīng)用。由于 Redis 的高性能和豐富的功能,可以根據(jù)具體需求靈活地在各種場(chǎng)景下使用。

2.2 Redis的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):
a) 性能極高 – Redis 能支持超過(guò) 100K+ 每秒的讀寫(xiě)頻率。

b) 豐富的數(shù)據(jù)類型 – Redis 支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。

c) 原子 – Redis 的所有操作都是原子性的,同時(shí) Redis 還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行。

attention 原子性定義:例如,A 想要從自己的帳戶中轉(zhuǎn) 1000 塊錢到 B 的帳戶里。那個(gè)從 A 開(kāi)始轉(zhuǎn)帳,到轉(zhuǎn)帳結(jié)束的這一個(gè)過(guò)程,稱之為一個(gè)事務(wù)。如果在 A 的帳戶已經(jīng)減去了 1000 塊錢的時(shí)候,忽然發(fā)生了意外,比如停電什么的,導(dǎo)致轉(zhuǎn)帳事務(wù)意外終止了,而此時(shí) B 的帳戶里還沒(méi)有增加 1000 塊錢。那么,我們稱這個(gè)操作失敗了,要進(jìn)行回滾。回滾就是回到事務(wù)開(kāi)始之前的狀態(tài),也就是回到 A 的帳戶還沒(méi)減 1000 塊的狀態(tài),B 的帳戶的原來(lái)的狀態(tài)。此時(shí)A 的帳戶仍然有 3000 塊,B 的帳戶仍然有 2000 塊。我們把這種要么一起成功(A 帳戶成功減少 1000,同時(shí) B 帳戶成功增加 1000),要么一起失?。ˋ 帳戶回到原來(lái)狀態(tài),B 帳戶也回到原來(lái)狀態(tài))的操作叫原子性操作。如果把一個(gè)事務(wù)可看作是一個(gè)程序,它要么完整的被執(zhí)行,要么完全不執(zhí)行,這種特性就叫原子性。

d)豐富的特性 – Redis 還支持 publish/subscribe, 通知, key 過(guò)期等等特性。

缺點(diǎn):
a)由于是內(nèi)存數(shù)據(jù)庫(kù),所以,單臺(tái)機(jī)器,存儲(chǔ)的數(shù)據(jù)量,跟機(jī)器本身的內(nèi)存大小。雖然 redis 本身有 key 過(guò)期策略,但是還是需要提前預(yù)估和節(jié)約內(nèi)存。如果內(nèi)存增長(zhǎng)過(guò)快,需要定期刪除數(shù)據(jù)。
b) 如果進(jìn)行完整重同步,由于需要生成 rdb 文件,并進(jìn)行傳輸,會(huì)占用主機(jī)的 CPU,并會(huì)消耗現(xiàn)網(wǎng)的帶寬。不過(guò) redis2.8 版本,已經(jīng)有部分重同步的功能,但是還是有可能有完整重同步的。比如,新上線的備機(jī)。
c) 修改配置文件,進(jìn)行重啟,將硬盤中的數(shù)據(jù)加載進(jìn)內(nèi)存,時(shí)間比較久。在這個(gè)過(guò)程中,redis 不能
提供服務(wù)。

三、Redis常見(jiàn)的問(wèn)題有哪些如何解決?

3.1 Redis 常見(jiàn)的性能問(wèn)題都有哪些?如何解決?

(1)、Master 寫(xiě)內(nèi)存快照,save 命令調(diào)度 rdbSave 函數(shù),會(huì)阻塞主線程的工作,當(dāng)快照比較大時(shí)對(duì)性能影響是非常大的,會(huì)間斷性暫停服務(wù),所以 Master 最好不要寫(xiě)內(nèi)存快照。
(2)、Master AOF 持久化,如果不重寫(xiě) AOF 文件,這個(gè)持久化方式對(duì)性能的影響是最小的,但是 AOF 文件會(huì)不斷增大,AOF 文件過(guò)大會(huì)影響 Master 重啟的恢復(fù)速度。Master 最好不要做任何持久化工作,包括內(nèi)存快照和 AOF日志文件,特別是不要啟用內(nèi)存快照做持久化,如果數(shù)據(jù)比較關(guān)鍵,某個(gè) Slave 開(kāi)啟 AOF 備份數(shù)據(jù),策略為每秒同步一次。
(3)、Master 調(diào)用 BGREWRITEAOF 重寫(xiě) AOF 文件,AOF 在重寫(xiě)的時(shí)候會(huì)占大量的 CPU 和內(nèi)存資源,導(dǎo)致服務(wù) load 過(guò)高,出現(xiàn)短暫服務(wù)暫?,F(xiàn)象。
(4)、Redis 主從復(fù)制的性能問(wèn)題,為了主從復(fù)制的速度和連接的穩(wěn)定性,Slave 和 Master 最好在同一個(gè)局域網(wǎng)內(nèi)。

3.2 Redis常見(jiàn)三大問(wèn)題

在大多數(shù)互聯(lián)網(wǎng)應(yīng)用中,緩存的使用方式如下:
復(fù)習(xí)第二章之Redis,redis,數(shù)據(jù)庫(kù),緩存
我們的查詢操作在緩存上完成,而對(duì)數(shù)據(jù)的增刪改則在數(shù)據(jù)庫(kù)完成。

3.2.1 緩存穿透

業(yè)務(wù)系統(tǒng)要查詢的數(shù)據(jù)根本就存在!當(dāng)業(yè)務(wù)系統(tǒng)發(fā)起查詢時(shí),按照上述流程,首先會(huì)前往緩存中查詢,由于緩存中不存在,然后再前往數(shù)據(jù)庫(kù)中查詢。由于該數(shù)據(jù)壓根就不存在,因此數(shù)據(jù)庫(kù)也返回空。這就是緩存穿透。
綜上所述:業(yè)務(wù)系統(tǒng)訪問(wèn)壓根就不存在的數(shù)據(jù),就稱為緩存穿透。

但是在如果大量查詢數(shù)據(jù)庫(kù)當(dāng)中不存在的數(shù)據(jù)會(huì)怎么樣呢?當(dāng)然會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的崩潰。
解決方法:
它需要在緩存之前再加一道屏障,里面存儲(chǔ)目前數(shù)據(jù)庫(kù)中存在的所有key,如下圖所示:

復(fù)習(xí)第二章之Redis,redis,數(shù)據(jù)庫(kù),緩存
當(dāng)業(yè)務(wù)系統(tǒng)有查詢請(qǐng)求的時(shí)候,首先去BloomFilter中查詢?cè)搆ey是否存在。若不存在,則說(shuō)明數(shù)據(jù)庫(kù)中也不存在該數(shù)據(jù),因此緩存都不要查了,直接返回null。若存在,則繼續(xù)執(zhí)行后續(xù)的流程,先前往緩存中查詢,緩存中沒(méi)有的話再前往數(shù)據(jù)庫(kù)中的查詢。

這種方法適用于數(shù)據(jù)命中不高,數(shù)據(jù)相對(duì)固定實(shí)時(shí)性低(通常是數(shù)據(jù)集較大)的應(yīng)用場(chǎng)景,代碼維護(hù)較為復(fù)雜,但是緩存空間占用少。

3.2.2 緩存雪崩

緩存其實(shí)扮演了一個(gè)保護(hù)數(shù)據(jù)庫(kù)的角色。它幫數(shù)據(jù)庫(kù)抵擋大量的查詢請(qǐng)求,從而避免脆弱的數(shù)據(jù)庫(kù)受到傷害。

如果緩存因某種原因發(fā)生了宕機(jī),那么原本被緩存抵擋的海量查詢請(qǐng)求就會(huì)像瘋狗一樣涌向數(shù)據(jù)庫(kù)。此時(shí)數(shù)據(jù)庫(kù)如果抵擋不了這巨大的壓力,它就會(huì)崩潰。

這就是緩存雪崩。緩存雪崩在實(shí)際當(dāng)中不只會(huì)對(duì)數(shù)據(jù)庫(kù)造成傷害,嚴(yán)重的話可能還會(huì)導(dǎo)致整個(gè)服務(wù)宕機(jī),因?yàn)樵诰唧w的應(yīng)用中服務(wù)可能是分布式的其中一臺(tái)機(jī)器宕機(jī)可能會(huì)導(dǎo)致請(qǐng)求無(wú)法繼續(xù)進(jìn)行,進(jìn)而導(dǎo)致整個(gè)服務(wù)宕機(jī)。

復(fù)習(xí)第二章之Redis,redis,數(shù)據(jù)庫(kù),緩存
解決方法:
Hystrix是一款開(kāi)源的“防雪崩工具”,它通過(guò) 熔斷、降級(jí)、限流三個(gè)手段來(lái)降低雪崩發(fā)生后的損失。

Hystrix就是一個(gè)Java類庫(kù),它采用命令模式,每一項(xiàng)服務(wù)處理請(qǐng)求都有各自的處理器。所有的請(qǐng)求都要經(jīng)過(guò)各自的處理器。處理器會(huì)記錄當(dāng)前服務(wù)的請(qǐng)求失敗率。一旦發(fā)現(xiàn)當(dāng)前服務(wù)的請(qǐng)求失敗率達(dá)到預(yù)設(shè)的值,Hystrix將會(huì)拒絕隨后該服務(wù)的所有請(qǐng)求,直接返回一個(gè)預(yù)設(shè)的結(jié)果。這就是所謂的“熔斷”。當(dāng)經(jīng)過(guò)一段時(shí)間后,Hystrix會(huì)放行該服務(wù)的一部分請(qǐng)求,再次統(tǒng)計(jì)它的請(qǐng)求失敗率。如果此時(shí)請(qǐng)求失敗率符合預(yù)設(shè)值,則完全打開(kāi)限流開(kāi)關(guān);如果請(qǐng)求失敗率仍然很高,那么繼續(xù)拒絕該服務(wù)的所有請(qǐng)求。這就是所謂的“限流”。而Hystrix向那些被拒絕的請(qǐng)求直接返回一個(gè)預(yù)設(shè)結(jié)果,被稱為“降級(jí)”。

Hystrix是由Netflix開(kāi)發(fā)的一款用于處理分布式系統(tǒng)之間的故障和延遲的開(kāi)源庫(kù)。它主要解決服務(wù)之間的依賴關(guān)系和網(wǎng)絡(luò)調(diào)用的不可靠性,通過(guò)提供容錯(cuò)機(jī)制和斷路器模式來(lái)提高系統(tǒng)的彈性和穩(wěn)定性。

Hystrix的核心概念包括:

  1. 斷路器(Circuit Breaker):Hystrix通過(guò)監(jiān)控對(duì)遠(yuǎn)程服務(wù)的調(diào)用,當(dāng)調(diào)用失敗率超過(guò)事先設(shè)定的閾值時(shí),會(huì)打開(kāi)斷路器,阻止對(duì)服務(wù)的請(qǐng)求,并返回預(yù)設(shè)的 fallback(回退)響應(yīng),避免繼續(xù)對(duì)故障的服務(wù)進(jìn)行調(diào)用,從而減少對(duì)故障服務(wù)的壓力。

  2. 回退(Fallback):當(dāng)斷路器打開(kāi)或遠(yuǎn)程服務(wù)調(diào)用失敗時(shí),Hystrix可以提供一個(gè)備選的回退響應(yīng),即返回一個(gè)默認(rèn)值、緩存數(shù)據(jù)或執(zhí)行一段備用邏輯,以保證系統(tǒng)的可用性,并進(jìn)行適當(dāng)?shù)慕导?jí)處理。

  3. 隔離策略(Isolation):為了提高系統(tǒng)的彈性和穩(wěn)定性,Hystrix將每個(gè)遠(yuǎn)程服務(wù)的調(diào)用封裝在獨(dú)立的線程池中,以實(shí)現(xiàn)請(qǐng)求的隔離。這樣可以避免一個(gè)故障服務(wù)的請(qǐng)求阻塞或影響其他服務(wù)。

  4. 超時(shí)控制(Timeout):Hystrix能夠根據(jù)服務(wù)的響應(yīng)時(shí)間設(shè)定超時(shí)時(shí)間,如果服務(wù)的響應(yīng)時(shí)間超過(guò)設(shè)定的時(shí)間,則認(rèn)為服務(wù)調(diào)用超時(shí),觸發(fā)回退邏輯。

  5. 實(shí)時(shí)監(jiān)控和度量(Metrics):Hystrix提供了實(shí)時(shí)監(jiān)控系統(tǒng)的功能,可以通過(guò)該功能收集和展示每個(gè)服務(wù)的調(diào)用指標(biāo)、錯(cuò)誤率、請(qǐng)求量、延遲等,以便于運(yùn)維人員實(shí)時(shí)監(jiān)控和調(diào)整服務(wù)的配置。

總結(jié)來(lái)說(shuō),Hystrix通過(guò)斷路器、回退、隔離策略、超時(shí)控制和實(shí)時(shí)監(jiān)控等機(jī)制,幫助開(kāi)發(fā)人員構(gòu)建彈性和可靠的分布式系統(tǒng),使得系統(tǒng)能夠更加優(yōu)雅地處理分布式系統(tǒng)之間的故障和延遲。它與Spring Cloud等微服務(wù)框架結(jié)合使用,可以提供更完善的分布式系統(tǒng)解決方案。

3.2.3 緩存擊穿

我們一般都會(huì)給緩存設(shè)定一個(gè)失效時(shí)間,過(guò)了失效時(shí)間后,該數(shù)據(jù)庫(kù)會(huì)被緩存直接刪除,從而一定程度上保證數(shù)據(jù)的實(shí)時(shí)性。

但是,對(duì)于一些請(qǐng)求量極高的熱點(diǎn)數(shù)據(jù)而言,一旦過(guò)了有效時(shí)間,此刻將會(huì)有大量請(qǐng)求落在數(shù)據(jù)庫(kù)上,從而可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)崩潰。其過(guò)程如下圖所示:
復(fù)習(xí)第二章之Redis,redis,數(shù)據(jù)庫(kù),緩存
如果某一個(gè)熱點(diǎn)數(shù)據(jù)失效,那么當(dāng)再次有該數(shù)據(jù)的查詢請(qǐng)求[req-1]時(shí)就會(huì)前往數(shù)據(jù)庫(kù)查詢。但是,從請(qǐng)求發(fā)往數(shù)據(jù)庫(kù),到該數(shù)據(jù)更新到緩存中的這段時(shí)間中,由于緩存中仍然沒(méi)有該數(shù)據(jù),因此這段時(shí)間內(nèi)到達(dá)的查詢請(qǐng)求都會(huì)落到數(shù)據(jù)庫(kù)上,這將會(huì)對(duì)數(shù)據(jù)庫(kù)造成巨大的壓力。此外,當(dāng)這些請(qǐng)求查詢完成后,都會(huì)重復(fù)更新緩存。
解決方法:
加鎖。
此方法只允許一個(gè)線程重建緩存,其他線程等待重建緩存的線程執(zhí)行完,重新從緩存獲取數(shù)據(jù)即可。

當(dāng)?shù)谝粋€(gè)數(shù)據(jù)庫(kù)查詢請(qǐng)求發(fā)起后,就將緩存中該數(shù)據(jù)上鎖;此時(shí)到達(dá)緩存的其他查詢請(qǐng)求將無(wú)法查詢?cè)撟侄?,從而被阻塞等待;?dāng)?shù)谝粋€(gè)請(qǐng)求完成數(shù)據(jù)庫(kù)查詢,并將數(shù)據(jù)更新值緩存后,釋放鎖;此時(shí)其他被阻塞的查詢請(qǐng)求將可以直接從緩存中查到該數(shù)據(jù)。

當(dāng)某一個(gè)熱點(diǎn)數(shù)據(jù)失效后,只有第一個(gè)數(shù)據(jù)庫(kù)查詢請(qǐng)求發(fā)往數(shù)據(jù)庫(kù),其余所有的查詢請(qǐng)求均被阻塞,從而保護(hù)了數(shù)據(jù)庫(kù)。但是,由于采用了互斥鎖,其他請(qǐng)求將會(huì)阻塞等待,此時(shí)系統(tǒng)的吞吐量將會(huì)下降。這需要結(jié)合實(shí)際的業(yè)務(wù)考慮是否允許這么做。

互斥鎖可以避免某一個(gè)熱點(diǎn)數(shù)據(jù)失效導(dǎo)致數(shù)據(jù)庫(kù)崩潰的問(wèn)題,而在實(shí)際業(yè)務(wù)中,往往會(huì)存在一批熱點(diǎn)數(shù)據(jù)同時(shí)失效的場(chǎng)景。那么,對(duì)于這種場(chǎng)景該如何防止數(shù)據(jù)庫(kù)過(guò)載呢?

設(shè)置不同的失效時(shí)間

當(dāng)我們向緩存中存儲(chǔ)這些數(shù)據(jù)的時(shí)候,可以將他們的緩存失效時(shí)間錯(cuò)開(kāi)。這樣能夠避免同時(shí)失效。如:在一個(gè)基礎(chǔ)時(shí)間上加/減一個(gè)隨機(jī)數(shù),從而將這些緩存的失效時(shí)間錯(cuò)開(kāi)

關(guān)于緩存的三大問(wèn)題參考自 緩存三大問(wèn)題及解決方案大家可以去看原文,原文作者講的更加細(xì)致。

3.3 數(shù)據(jù)庫(kù)緩存數(shù)據(jù)同步問(wèn)題

復(fù)習(xí)第二章之Redis,redis,數(shù)據(jù)庫(kù),緩存

當(dāng)我們使用緩存的時(shí)候,無(wú)可避免的會(huì)遇到這個(gè)問(wèn)題。當(dāng)我們?cè)诙嗑€程的場(chǎng)景下遇到這個(gè)問(wèn)題無(wú)論我們是先操作數(shù)據(jù)庫(kù)還是操作緩存都會(huì)出現(xiàn)線程安全問(wèn)題。
這個(gè)時(shí)候我們?nèi)绾卧诒WCCAP(一致性、效率、分區(qū)安全性)的前提下對(duì)緩存進(jìn)行同步呢?

延時(shí)雙刪

復(fù)習(xí)第二章之Redis,redis,數(shù)據(jù)庫(kù),緩存
延時(shí)指的是在數(shù)據(jù)庫(kù)更改操作完成之后要等待一會(huì),因?yàn)槲覀兊臄?shù)據(jù)庫(kù)可能是主從模式或者是集群模式,讀取數(shù)據(jù)的操作是在從數(shù)據(jù)庫(kù)上完成的。所以我們要保證數(shù)據(jù)庫(kù)的一致。

雙刪指的是兩次刪除緩存,第一次刪除緩存是為了讓線程直接去數(shù)據(jù)庫(kù)查找,第二次刪除則是為了保證數(shù)據(jù)的一致性;當(dāng)我對(duì)數(shù)據(jù)庫(kù)的修改并為未完成的時(shí)候數(shù)據(jù)被讀回到緩存了怎么辦呢?二次刪除防止的就是這種情況。

當(dāng)然這種方法只是保證了數(shù)據(jù)的最終一致性,如果對(duì)數(shù)據(jù)安全要求比較高的情況下,則需要通過(guò)加鎖的方法,或者添加事務(wù)來(lái)解決數(shù)據(jù)一致性的問(wèn)題了。也就是對(duì)CAP的取舍。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-621946.html

到了這里,關(guān)于復(fù)習(xí)第二章之Redis的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 軟件工程復(fù)習(xí)自用---第二章

    軟件工程復(fù)習(xí)自用---第二章

    ?????????? 可行性研究的目的不是解決問(wèn)題,而是確定問(wèn)題是否值得去解決 可行性研究分析過(guò)程 ????????進(jìn)一步分析和澄清問(wèn)題定義 ????????分析員應(yīng)該導(dǎo)出系統(tǒng)的邏輯模型 ????????探索若干種可供選擇的主要解法 要至少?gòu)囊韵氯齻€(gè)方面研究每種解法的可行

    2024年01月20日
    瀏覽(23)
  • 單片機(jī)復(fù)習(xí)題第二章

    單片機(jī)復(fù)習(xí)題第二章

    1.在AT89S52單片機(jī)中,如果采用6MHz晶振,一個(gè)機(jī)器周期為 2us 。 時(shí)鐘周期的振蕩頻率為fosc,則時(shí)鐘周期T=1/fosc。 一個(gè)機(jī)器周期包括12個(gè)時(shí)鐘周期。 2.內(nèi)部RAM中,位地址為40H,88H的位,該位所在字節(jié)的字節(jié)地址分別為 28H,88H 。 位地址為00H-7FH的這128位,位于片內(nèi)RAM字節(jié)地址20H-

    2024年02月04日
    瀏覽(88)
  • 階段七第二章連接數(shù)據(jù)庫(kù),邏輯控制器,定時(shí)器,分布式

    階段七第二章連接數(shù)據(jù)庫(kù),邏輯控制器,定時(shí)器,分布式

    準(zhǔn)備工作 : 1.啟動(dòng)數(shù)據(jù)庫(kù) 2.加載mysql的JDBC驅(qū)動(dòng) · 方法1:在測(cè)試計(jì)劃下方的位置,點(diǎn)擊瀏覽添加JDBC的jar包 · 方法2:將JDBC的jar拷貝到lib目錄,并重啟jmeter 3.JDBC連接池配置參數(shù): 編寫(xiě)JDBC腳本步驟 :(搜索指定商品,在返回結(jié)果中檢查是否包含指定商品的ID的URL) 1、添加JDBC

    2024年01月22日
    瀏覽(23)
  • 計(jì)算機(jī)網(wǎng)絡(luò)重點(diǎn)概念整理-第二章 物理層【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計(jì)算機(jī)網(wǎng)絡(luò)重點(diǎn)概念整理-第二章 物理層【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計(jì)算機(jī)網(wǎng)絡(luò)復(fù)習(xí)系列文章傳送門: 第一章 計(jì)算機(jī)網(wǎng)絡(luò)概述 第二章 物理層 第三章 數(shù)據(jù)鏈路層 第四章 網(wǎng)絡(luò)層 第五章 傳輸層 第六章 應(yīng)用層 第七章 網(wǎng)絡(luò)安全 計(jì)算機(jī)網(wǎng)絡(luò)整理-簡(jiǎn)稱縮寫(xiě) 給大家整理了一下計(jì)算機(jī)網(wǎng)絡(luò)中的重點(diǎn)概念,以供大家期末復(fù)習(xí)和考研復(fù)習(xí)的時(shí)候使用。 參

    2024年02月08日
    瀏覽(30)
  • 計(jì)算機(jī)操作系統(tǒng)重點(diǎn)概念整理-第二章 進(jìn)程管理【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計(jì)算機(jī)操作系統(tǒng)重點(diǎn)概念整理-第二章 進(jìn)程管理【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計(jì)算機(jī)操作系統(tǒng)復(fù)習(xí)系列文章傳送門: 第一章 計(jì)算機(jī)系統(tǒng)概述 第二章 進(jìn)程管理 第三章 進(jìn)程同步 第四章 內(nèi)存管理 第五章 文件管理 第六章 輸出輸出I/O管理 給大家整理了一下計(jì)算機(jī)操作系統(tǒng)中的重點(diǎn)概念,以供大家期末復(fù)習(xí)和考研復(fù)習(xí)的時(shí)候使用。 參考資料是王道的計(jì)算

    2024年02月08日
    瀏覽(35)
  • Oracle-第二章-數(shù)據(jù)類型

    1.1四則運(yùn)算(加減乘除) 1.2取余(mod函數(shù)) 1.3截?。╰runc函數(shù),round函數(shù)-四舍五入-常用) 1.4值(abs函數(shù)) 1.5乘方(power函數(shù)) 1.6平方根(sqrt函數(shù)) 1.7向上取整(ceil函數(shù)) 1.8向下取整(floor函數(shù)) 1.9偽隨機(jī)數(shù)(dbms_random.value函數(shù)-在oracle中很少用) 1.10函數(shù)組合用法 1.11其他

    2024年02月08日
    瀏覽(29)
  • 第二章-數(shù)據(jù)傳輸安全

    第二章-數(shù)據(jù)傳輸安全

    VPN虛擬專用網(wǎng) :在ISP運(yùn)營(yíng)商公用網(wǎng)絡(luò)中搭建專用的安全數(shù)據(jù)通道 VPN :隧道 – 封裝技術(shù) 常見(jiàn)VPN :IPSec VPN、MPLS VPN、GRE VPN、SangFor VPN、PPTP VPN、L2TP VPN / L2F VPN 1)按應(yīng)用場(chǎng)景分(業(yè)務(wù)類型) Client-LAN VPN(access VPN)客戶端到網(wǎng)絡(luò):PPTP VPN、L2TP VPN / L2F VPN、SSL VPN、IPSec VPN LAN-LAN V

    2024年01月23日
    瀏覽(27)
  • 大數(shù)據(jù)之路-日志采集(第二章)

    大數(shù)據(jù)之路-日志采集(第二章)

    阿里巴巴的日志采集體系方案包括兩大體系: Ap us.JS Web(基于瀏覽器)日志采集技術(shù)方案: UserTrack APP 端(無(wú)線客戶端 日志采集技術(shù)方案。 本章從瀏覽器的頁(yè)面日志采集、無(wú)線客戶端的日志采集以及我們遇到的日志采集挑戰(zhàn)三塊內(nèi)容來(lái)闡述間里巴巴的日志采集經(jīng)驗(yàn)。 瀏覽器

    2024年01月25日
    瀏覽(25)
  • SV學(xué)習(xí)——數(shù)據(jù)類型(第二章)

    SV學(xué)習(xí)——數(shù)據(jù)類型(第二章)

    verilog有1995和2001版本,而SV是verilog的延伸,SV發(fā)布的時(shí)候直接就是3.0,之后可能不再存在verilog,而是統(tǒng)一用SV。SV是完全兼容verilog的。verilog文件以.v結(jié)尾,SV文件以.sv結(jié)尾。語(yǔ)法是全部兼容的,SV是verilog的擴(kuò)展和延伸。 verilog中有reg和wire兩種數(shù)據(jù)類型,都是四值邏輯 0,1,x,

    2024年02月10日
    瀏覽(25)
  • 【第二章:數(shù)據(jù)的表示和運(yùn)算】

    【第二章:數(shù)據(jù)的表示和運(yùn)算】

    探討的兩大主題:一步步遞進(jìn) 那么現(xiàn)在就需要探究 數(shù)據(jù)如何以2進(jìn)制的形式在計(jì)算機(jī)中表示的呢?? 那么還有就是計(jì)算機(jī)如何進(jìn)行數(shù)據(jù)的算術(shù)和邏輯運(yùn)算的?? 我們平常使用的是10進(jìn)制的數(shù)據(jù),然而計(jì)算機(jī)能夠識(shí)別的是2進(jìn)制的01序列串。 主要是權(quán)重的不同。一方面符號(hào)表示

    2024年02月04日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包