您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“redis秒殺活動(dòng)的設(shè)計(jì)思路是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
秒殺開始前30分鐘把秒殺庫(kù)存從數(shù)據(jù)庫(kù)同步到Redis Sorted Set
用戶秒殺庫(kù)存放入秒殺限制數(shù)長(zhǎng)度的Sorted Set
秒殺到指定秒殺數(shù)后,Sorted Set不在接受秒殺請(qǐng)求,并顯示返回標(biāo)識(shí)
秒殺活動(dòng)完全結(jié)束后,定時(shí)任務(wù)同步Redis數(shù)據(jù)到數(shù)據(jù)庫(kù),秒殺活動(dòng)結(jié)束
1,Redis
豐富的數(shù)據(jù)結(jié)構(gòu)(Data Structures)
Redis有序集合和Redis集合類似,是不包含相同字符串的合集
每個(gè)有序集合的成員都關(guān)聯(lián)著一個(gè)評(píng)分,這個(gè)評(píng)分用于把有序集合中的成員按最低分到最高分排列(排行榜應(yīng)用,取TOP N操作)
使用有序集合,你可以非??斓兀∣(log(N)))完成添加,刪除和更新元素的操作
元素是在插入時(shí)就排好序的,所以很快地通過評(píng)分(score)或者位次(position)獲得一個(gè)范圍的元素(需要精準(zhǔn)設(shè)定過期時(shí)間的應(yīng)用)
輕易地訪問任何你需要的東西: 有序的元素,快速的存在性測(cè)試,快速訪問集合中間元素
在一個(gè)巨型在線游戲中建立一個(gè)排行榜,每當(dāng)有新的記錄產(chǎn)生時(shí),使用ZADD 來更新它。你可以用ZRANGE輕松地獲取排名靠前的用戶, 你也可以提供一個(gè)用戶名,然后用ZRANK獲取他在排行榜中的名次。 同時(shí)使用ZRANK和ZRANGE你可以獲得與指定用戶有相同分?jǐn)?shù)的用戶名單。 所有這些操作都非常迅速
有序集合通常用來索引存儲(chǔ)在Redis中的數(shù)據(jù)。 例如:如果你有很多的hash來表示用戶,那么你可以使用一個(gè)有序集合,這個(gè)集合的年齡字段用來當(dāng)作評(píng)分,用戶ID當(dāng)作值。用ZRANGEBYSCORE可以簡(jiǎn)單快速地檢索到給定年齡段的所有用戶
Redis Hashes是字符串字段和字符串值之間的映射
盡管Hashes主要用來表示對(duì)象,但它們也能夠存儲(chǔ)許多元素
Redis集合是一個(gè)無序的,不允許相同成員存在的字符串合集(Uniq操作,獲取某段時(shí)間所有數(shù)據(jù)排重值)
支持一些服務(wù)端的命令從現(xiàn)有的集合出發(fā)去進(jìn)行集合運(yùn)算,如合并(并集:union),求交(交集:intersection),差集, 找出不同元素的操作(共同好友、二度好友)
用集合跟蹤一個(gè)獨(dú)特的事。想要知道所有訪問某個(gè)博客文章的獨(dú)立IP?只要每次都用SADD來處理一個(gè)頁面訪問。那么你可以肯定重復(fù)的IP是不會(huì)插入的( 利用唯一性,可以統(tǒng)計(jì)訪問網(wǎng)站的所有獨(dú)立IP)
Redis集合能很好的表示關(guān)系。你可以創(chuàng)建一個(gè)tagging系統(tǒng),然后用集合來代表單個(gè)tag。接下來你可以用SADD命令把所有擁有tag的對(duì)象的所有ID添加進(jìn)集合,這樣來表示這個(gè)特定的tag。如果你想要同時(shí)有3個(gè)不同tag的所有對(duì)象的所有ID,那么你需要使用SINTER
使用SPOP或者SRANDMEMBER命令隨機(jī)地獲取元素
Redis列表是簡(jiǎn)單的字符串列表,按照插入順序排序
你可以添加一個(gè)元素到列表的頭部(左邊:LPUSH)或者尾部(右邊:RPUSH)
一個(gè)列表最多可以包含232-1個(gè)元素(4294967295,每個(gè)表超過40億個(gè)元素)
在社交網(wǎng)絡(luò)中建立一個(gè)時(shí)間線模型,使用LPUSH去添加新的元素到用戶時(shí)間線中,使用LRANGE去檢索一些最近插入的條目
你可以同時(shí)使用LPUSH和LTRIM去創(chuàng)建一個(gè)永遠(yuǎn)不會(huì)超過指定元素?cái)?shù)目的列表并同時(shí)記住最后的N個(gè)元素
列表可以用來當(dāng)作消息傳遞的基元(primitive),例如,眾所周知的用來創(chuàng)建后臺(tái)任務(wù)的Resque Ruby庫(kù)
Redis字符串能包含任意類型的數(shù)據(jù)
一個(gè)字符串類型的值最多能存儲(chǔ)512M字節(jié)的內(nèi)容
利用INCR命令簇(INCR, DECR, INCRBY)來把字符串當(dāng)作原子計(jì)數(shù)器使用
使用APPEND命令在字符串后添加內(nèi)容
字符串(String)
列表(List)
集合(Set)
哈希(Hashes)
有序集合(Sorted Sets)
復(fù)制(Replication, Redis復(fù)制很簡(jiǎn)單易用,它通過配置允許slave Redis Servers或者M(jìn)aster Servers的復(fù)制品)
一個(gè)Master可以有多個(gè)Slaves
Slaves能通過接口其他slave的鏈接,除了可以接受同一個(gè)master下面slaves的鏈接以外,還可以接受同一個(gè)結(jié)構(gòu)圖中的其他slaves的鏈接
redis復(fù)制是在master段是非阻塞的,這就意味著master在同一個(gè)或多個(gè)slave端執(zhí)行同步的時(shí)候還可以接受查詢
復(fù)制在slave端也是非阻塞的,假設(shè)你在redis.conf中配置redis這個(gè)功能,當(dāng)slave在執(zhí)行的新的同步時(shí),它仍可以用舊的數(shù)據(jù)信息來提供查詢,否則,你可以配置當(dāng)redis slaves去master失去聯(lián)系是,slave會(huì)給發(fā)送一個(gè)客戶端錯(cuò)誤
為了有多個(gè)slaves可以做只讀查詢,復(fù)制可以重復(fù)2次,甚至多次,具有可擴(kuò)展性(例如:slaves對(duì)話與重復(fù)的排序操作,有多份數(shù)據(jù)冗余就相對(duì)簡(jiǎn)單了)
他可以利用復(fù)制去避免在master端保存數(shù)據(jù),只要對(duì)master端redis.conf進(jìn)行配置,就可以避免保存(所有的保存操作),然后通過slave的鏈接,來實(shí)時(shí)的保存在slave端
LRU過期處理(Eviction)
Redis允許為每一個(gè)key設(shè)置不同的過期時(shí)間,當(dāng)它們到期時(shí)將自動(dòng)從服務(wù)器上刪除(EXPIRE)
EVAL 和 EVALSHA 命令是從 Redis 2.6.0 版本開始的,使用內(nèi)置的 Lua 解釋器,可以對(duì) Lua 腳本進(jìn)行求值
Redis 使用單個(gè) Lua 解釋器去運(yùn)行所有腳本,并且, Redis 也保證腳本會(huì)以原子性(atomic)的方式執(zhí)行: 當(dāng)某個(gè)腳本正在運(yùn)行的時(shí)候,不會(huì)有其他腳本或 Redis 命令被執(zhí)行。 這和使用MULTI / EXEC 包圍的事務(wù)很類似。 在其他別的客戶端看來,腳本的效果(effect)要么是不可見的(not visible),要么就是已完成的(already completed)
LRU過期處理(Eviction)
事務(wù)
MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事務(wù)的基礎(chǔ)
事務(wù)是一個(gè)單獨(dú)的隔離操作:事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會(huì)被其他客戶端發(fā)送來的命令請(qǐng)求所打斷
事務(wù)中的命令要么全部被執(zhí)行,要么全部都不執(zhí)行,EXEC 命令負(fù)責(zé)觸發(fā)并執(zhí)行事務(wù)中的所有命令
Redis 的 Transactions 提供的并不是嚴(yán)格的 ACID 的事務(wù)
Transactions 還是提供了基本的命令打包執(zhí)行的功能: 可以保證一連串的命令是順序在一起執(zhí)行的,中間有會(huì)有其它客戶端命令插進(jìn)來執(zhí)行
Redis 還提供了一個(gè) Watch 功能,你可以對(duì)一個(gè) key 進(jìn)行 Watch,然后再執(zhí)行 Transactions,在這過程中,如果這個(gè) Watched 的值進(jìn)行了修改,那么這個(gè) Transactions 會(huì)發(fā)現(xiàn)并拒絕執(zhí)行
數(shù)據(jù)持久化
同時(shí)使用兩種持久化功能
特點(diǎn)
優(yōu)點(diǎn)
缺點(diǎn)
AOF持久化方式記錄每次對(duì)服務(wù)器寫的操作
redis重啟的時(shí)候會(huì)優(yōu)先載入AOF文件來恢復(fù)原始的數(shù)據(jù),因?yàn)樵谕ǔG闆r下AOF文件保存的數(shù)據(jù)集要比RDB文件保存的數(shù)據(jù)集要完整
使用AOF 會(huì)讓你的Redis更加耐久: 你可以使用不同的fsync策略:無fsync,每秒fsync,每次寫的時(shí)候fsync
AOF文件是一個(gè)只進(jìn)行追加的日志文件,所以不需要寫入seek
Redis 可以在 AOF 文件體積變得過大時(shí),自動(dòng)地在后臺(tái)對(duì) AOF 進(jìn)行重寫
AOF 文件有序地保存了對(duì)數(shù)據(jù)庫(kù)執(zhí)行的所有寫入操作, 這些寫入操作以 Redis 協(xié)議的格式保存, 因此 AOF 文件的內(nèi)容非常容易被人讀懂, 對(duì)文件進(jìn)行分析(parse)也很輕松。 導(dǎo)出(export) AOF 文件也非常簡(jiǎn)單
對(duì)于相同的數(shù)據(jù)集來說,AOF 文件的體積通常要大于 RDB 文件的體積
根據(jù)所使用的 fsync 策略,AOF 的速度可能會(huì)慢于 RDB
特點(diǎn)
優(yōu)點(diǎn)
缺點(diǎn)
RDB持久化方式能夠在指定的時(shí)間間隔能對(duì)你的數(shù)據(jù)進(jìn)行快照存儲(chǔ)
RDB是一個(gè)非常緊湊的文件,它保存了某個(gè)時(shí)間點(diǎn)得數(shù)據(jù)集,非常適用于數(shù)據(jù)集的備份
RDB是一個(gè)緊湊的單一文件, 非常適用于災(zāi)難恢復(fù)
RDB在保存RDB文件時(shí)父進(jìn)程唯一需要做的就是fork出一個(gè)子進(jìn)程,接下來的工作全部由子進(jìn)程來做,父進(jìn)程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能
與AOF相比,在恢復(fù)大的數(shù)據(jù)集的時(shí)候,RDB方式會(huì)更快一些
如果你希望在redis意外停止工作(例如電源中斷)的情況下丟失的數(shù)據(jù)最少的話,那么RDB不適合,Redis要完整的保存整個(gè)數(shù)據(jù)集是一個(gè)比較繁重的工作
RDB 需要經(jīng)常fork子進(jìn)程來保存數(shù)據(jù)集到硬盤上,當(dāng)數(shù)據(jù)集比較大的時(shí)候,fork的過程是非常耗時(shí)的,可能會(huì)導(dǎo)致Redis在一些毫秒級(jí)內(nèi)不能響應(yīng)客戶端的請(qǐng)求.如果數(shù)據(jù)集巨大并且CPU性能不是很好的情況下,這種情況會(huì)持續(xù)1秒,AOF也需要fork,但是你可以調(diào)節(jié)重寫日志文件的頻率來提高數(shù)據(jù)集的耐久度
RDB
AOF
選擇
分布式
快、輕量級(jí)、減少后端Cache Server連接數(shù)、易配置、支持ketama、modula、random、常用hash 分片算法
對(duì)于客戶端而言,redis集群是透明的,客戶端簡(jiǎn)單,遍于動(dòng)態(tài)擴(kuò)容
Proxy為單點(diǎn)、處理一致性hash時(shí),集群節(jié)點(diǎn)可用性檢測(cè)不存在腦裂問題
高性能,CPU密集型,而redis節(jié)點(diǎn)集群多CPU資源冗余,可部署在redis節(jié)點(diǎn)集群上,不需要額外設(shè)備
當(dāng)Master掛了后,VIP漂移到Slave;Slave 上keepalived 通知redis 執(zhí)行:slaveof no one ,開始提供業(yè)務(wù)
當(dāng)Master起來后,VIP 地址不變,Master的keepalived 通知redis 執(zhí)行slaveof slave IP host ,開始作為從同步數(shù)據(jù)
依次類推
Redis Cluster (Redis 3版本)
Keepalived
Twemproxy
高可用(HA)
單M-S結(jié)構(gòu)適用于不同用戶數(shù)據(jù)存在關(guān)聯(lián),但應(yīng)用可以實(shí)現(xiàn)讀寫分離的業(yè)務(wù)模式。Master主要提供寫操作,Slave主要提供讀操作,充分利用硬件資源
雙(多)M-S結(jié)構(gòu)適用于用戶間不存在或者存在較少的數(shù)據(jù)關(guān)聯(lián)的業(yè)務(wù)模式,讀寫效率是單M-S的兩(多)倍,但要求故障時(shí)單臺(tái)服務(wù)器能夠承擔(dān)兩個(gè)Mater Redis的資源需求
雙M-S結(jié)構(gòu)的特點(diǎn)是在每臺(tái)服務(wù)器上配置一個(gè)Master Redis,同時(shí)部署一個(gè)Slave Redis。由兩個(gè)Redis Sentinel同時(shí)對(duì)4個(gè)Redis進(jìn)行監(jiān)控。兩個(gè)Master Redis可以同時(shí)對(duì)應(yīng)用程序提供讀寫服務(wù),即便其中一個(gè)服務(wù)器出現(xiàn)故障,另一個(gè)服務(wù)器也可以同時(shí)運(yùn)行兩個(gè)Master Redis提供讀寫服務(wù)
缺點(diǎn)是兩個(gè)Master redis之間無法實(shí)現(xiàn)數(shù)據(jù)共享,不適合存在大量用戶數(shù)據(jù)關(guān)聯(lián)的應(yīng)用使用
單M-S結(jié)構(gòu)特點(diǎn)是在Master服務(wù)器中配置Master Redis(Redis-1M)和Master Sentinel(Sentinel-1M)
Slave服務(wù)器中配置Slave Redis(Redis-1S)和Slave Sentinel(Sentinel-1S)
其中 Master Redis可以提供讀寫服務(wù),但是Slave Redis只能提供只讀服務(wù)。因此,在業(yè)務(wù)壓力比較大的情況下,可以選擇將只讀業(yè)務(wù)放在Slave Redis中進(jìn)行
監(jiān)控(Monitoring): Redis Sentinel實(shí)時(shí)監(jiān)控主服務(wù)器和從服務(wù)器運(yùn)行狀態(tài)
提醒(Notification):當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問題時(shí), Redis Sentinel 可以向系統(tǒng)管理員發(fā)送通知, 也可以通過 API 向其他程序發(fā)送通知
自動(dòng)故障轉(zhuǎn)移(Automatic failover): 當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí),Redis Sentinel 可以將一個(gè)從服務(wù)器升級(jí)為主服務(wù)器, 并對(duì)其他從服務(wù)器進(jìn)行配置,讓它們使用新的主服務(wù)器。當(dāng)應(yīng)用程序連接到 Redis 服務(wù)器時(shí), Redis Sentinel會(huì)告之新的主服務(wù)器地址和端口
Redis Sentinel(redis自帶的集群管理工具 )
單M-S結(jié)構(gòu)
雙M-S結(jié)構(gòu)
單M-S結(jié)構(gòu)和雙M-S結(jié)構(gòu)比較
發(fā)布/訂閱(Pub/Sub)
監(jiān)控:Redis-Monitor
歷史redis運(yùn)行查詢:CPU、內(nèi)存、命中率、請(qǐng)求量、主從切換等
實(shí)時(shí)監(jiān)控曲線
2,數(shù)據(jù)類型Redis使用場(chǎng)景
String
計(jì)數(shù)器應(yīng)用
List
取最新N個(gè)數(shù)據(jù)的操作
消息隊(duì)列
刪除與過濾
實(shí)時(shí)分析正在發(fā)生的情況,用于數(shù)據(jù)統(tǒng)計(jì)與防止垃圾郵件(結(jié)合Set)
Set
Uniqe操作,獲取某段時(shí)間所有數(shù)據(jù)排重值
實(shí)時(shí)系統(tǒng),反垃圾系統(tǒng)
共同好友、二度好友
利用唯一性,可以統(tǒng)計(jì)訪問網(wǎng)站的所有獨(dú)立 IP
好友推薦的時(shí)候,根據(jù) tag 求交集,大于某個(gè) threshold 就可以推薦
Hashes
存儲(chǔ)、讀取、修改用戶屬性
Sorted Set
排行榜應(yīng)用,取TOP N操作
需要精準(zhǔn)設(shè)定過期時(shí)間的應(yīng)用(時(shí)間戳作為Score)
帶有權(quán)重的元素,比如一個(gè)游戲的用戶得分排行榜
過期項(xiàng)目處理,按照時(shí)間排序
“redis秒殺活動(dòng)的設(shè)計(jì)思路是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。