最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis高階使用消息隊(duì)列分布式鎖排行榜等(高階用法)

 更新時(shí)間:2024年03月21日 15:37:40   作者:奮力向前123  
在大多數(shù)傳統(tǒng)的web系統(tǒng)中,使用Redis一般都是作為緩存使用,在大數(shù)據(jù)查詢時(shí)作為緩解性能的一種解決方案,這篇文章主要介紹了Redis高階使用消息隊(duì)列分布式鎖排行榜等,需要的朋友可以參考下

一、前言

在大多數(shù)傳統(tǒng)的web系統(tǒng)中,使用Redis一般都是作為緩存使用,在大數(shù)據(jù)查詢時(shí)作為緩解性能的一種解決方案。博主的的系統(tǒng)中使用Redis也主要使用到緩存的作用,還有做了注冊(cè)中心,分布式事務(wù)。其他的強(qiáng)大的功能,沒有運(yùn)用上。下面看一張圖,看看Redis高階還能用到哪些常見的場(chǎng)景。

二、Redis高階用法

1.消息隊(duì)列:Redis的列表數(shù)據(jù)結(jié)構(gòu)非常適合作為簡(jiǎn)單的消息隊(duì)列。消息發(fā)布者可以使用LPUSH命令向隊(duì)列中添加消息,而多個(gè)消息訂閱者則可以通過阻塞線程使用BRPOP命令從隊(duì)列中取出消息。需要注意的是,Redis官方并不提供可靠消費(fèi)/發(fā)布的機(jī)制,因此需要自行實(shí)現(xiàn)故障轉(zhuǎn)移、隊(duì)列持久化、隊(duì)列監(jiān)控和流量控制等功能。
2.Lua腳本:Redis支持使用Lua腳本在服務(wù)器端執(zhí)行一系列命令。這有助于減少客戶端與服務(wù)器之間的網(wǎng)絡(luò)開銷,并且可以實(shí)現(xiàn)復(fù)雜的原子操作。
3.事務(wù):Redis支持事務(wù),可以將一系列命令作為一個(gè)原子操作來執(zhí)行。這通過MULTI、EXEC、DISCARD和WATCH等命令來實(shí)現(xiàn),確保在事務(wù)執(zhí)行期間,中間步驟不會(huì)被其他客戶端打斷。
4.分布式鎖:Redis可以利用SET命令的NX(不覆蓋)參數(shù)來實(shí)現(xiàn)分布式鎖。獲取鎖的客戶端可以執(zhí)行臨界區(qū)的代碼,而其他客戶端則需要等待鎖的釋放。

public String lock(String key, int timeOutSecond) {
    for (; ; ) {
        String stamp = String.valueOf(System.nanoTime());
        boolean exist = redisTemplate.opsForValue().setIfAbsent(key, stamp, timeOutSecond, TimeUnit.SECONDS);
        if (exist) {
            return stamp;
        }
    }
}
public void unlock(String key, String stamp) {
    redisTemplate.execute(script, Arrays.asList(key), stamp);
}
  • 排行榜:Redis的有序集合數(shù)據(jù)結(jié)構(gòu)(zset)非常適合用來實(shí)現(xiàn)排行榜功能。例如,可以通過zadd命令添加分?jǐn)?shù)和成員,然后使用zrevrange命令獲取排名最高的成員。
  • HyperLogLog:這是Redis用于基數(shù)統(tǒng)計(jì)的算法。當(dāng)輸入元素的數(shù)量或體積非常大時(shí),HyperLogLog所需的計(jì)算空間總是固定的且很小。通過pfadd命令添加元素,然后使用pfcount命令獲取基數(shù)統(tǒng)計(jì)結(jié)果。
  • 過期鍵管理:Redis可以為鍵設(shè)置過期時(shí)間,過期后鍵會(huì)自動(dòng)被刪除。這對(duì)于緩存系統(tǒng)特別有用,可以避免長(zhǎng)時(shí)間占用內(nèi)存。

redis的數(shù)據(jù)結(jié)構(gòu)豐富,一般不會(huì)在功能性上造成困擾。但隨著請(qǐng)求量的增加,SLA要求的提高,我們勢(shì)必會(huì)對(duì)Redis進(jìn)行一些改造和定制性開發(fā)。

 高可用挑戰(zhàn)

redis提供了主從、哨兵、cluster等三種集群模式,其中cluster模式為目前大多數(shù)公司所采用的方式。

但是,redis的cluster模式,有不少的硬傷。redis cluster采用虛擬槽的概念,把所有的key映射到 0~16383個(gè)整數(shù)槽內(nèi),屬于無中心化的架構(gòu)。但它的維護(hù)成本較高,slave也不能夠參與讀取操作。

它的主要問題,在于一些批量操作的限制。由于key被hash到多臺(tái)機(jī)器上,所以mget、hmset、sunion等操作就非常的不友好,經(jīng)常發(fā)生性能問題。

redis的主從模式是最簡(jiǎn)單的模式,但無法做到自動(dòng)failover,通常在主從切換后,還需要修改業(yè)務(wù)代碼,這是不能忍受的。即使加上haproxy這樣的負(fù)載均衡組件,復(fù)雜性也是非常高的。

哨兵模式在主從數(shù)量比較多的時(shí)候,能夠顯著的體現(xiàn)它的價(jià)值。一個(gè)哨兵集群,能夠監(jiān)控成百上千個(gè)集群,但是哨兵集群本身的維護(hù)是比較困難的。幸運(yùn)的是,redis的文本協(xié)議非常簡(jiǎn)單,在netty中,甚至直接提供了redis的codec。自研一套哨兵系統(tǒng),加強(qiáng)它的功能,是可行的。

冷熱數(shù)據(jù)分離

redis的特點(diǎn)是,不管什么數(shù)據(jù),都一股腦地搞到內(nèi)存里做計(jì)算,這對(duì)于有時(shí)間序列概念,有冷熱數(shù)據(jù)之分的業(yè)務(wù),造成了非常大的成本考驗(yàn)。為什么大多數(shù)開發(fā)者喜歡把數(shù)據(jù)存放在MySQL中,而不是Redis中?除了事務(wù)性要求以外,很大原因是歷史數(shù)據(jù)的問題。

通常,這種冷熱數(shù)據(jù)的切換,是由中間件完成的。我們上面也談到了,Redis是一個(gè)文本協(xié)議,非常簡(jiǎn)單。做一個(gè)中間件,或者做一個(gè)協(xié)議兼容的Redis模擬存儲(chǔ),是比較容易的。

比如我們Redis中,只保留最近一年的活躍用戶。一個(gè)好幾年不活躍的用戶,突然間訪問了系統(tǒng),這時(shí)候我們獲取數(shù)據(jù)的時(shí)候,就需要中間件進(jìn)行轉(zhuǎn)換,從容量更大,速度更慢的存儲(chǔ)中查找。

這個(gè)時(shí)候,Redis的作用,更像是一個(gè)熱庫(kù),更像是一個(gè)傳統(tǒng)cache層做的事情,發(fā)生在業(yè)務(wù)已經(jīng)上規(guī)模的時(shí)候。但是注意,直到此時(shí),我們的業(yè)務(wù)層代碼,一直都是操作的redis的api。它們使用這眾多的函數(shù)指令,并不關(guān)心數(shù)據(jù)到底是真正存儲(chǔ)在redis中,還是在ssdb中。

 功能性需求

redis還能玩很多花樣。舉個(gè)例子,全文搜索。很多人都會(huì)首選es,但redis生態(tài)就提供了一個(gè)模塊:RediSearch,可以做查詢,可以做filter。

但我們通常還會(huì)有更多的需求,比如統(tǒng)計(jì)類、搜索類、運(yùn)營(yíng)效果分析等。這類需求與大數(shù)據(jù)相關(guān),即使是傳統(tǒng)的DB也不能勝任。這時(shí)候,我們當(dāng)然要把redis中的數(shù)據(jù),導(dǎo)入到其他平臺(tái)進(jìn)行計(jì)算啦。

如果你選擇的是redis數(shù)據(jù)庫(kù),那么dba打交道的,就是rdb,而不是binlog。有很多的rdb解析工具(比如redis-rdb-tools),能夠定期把rdb解析成記錄,導(dǎo)入到hadoop等其他平臺(tái)。

此時(shí),rdb成為所有團(tuán)隊(duì)的中樞,成為基本的數(shù)據(jù)交換格式。導(dǎo)入到其他db后的業(yè)務(wù),該怎么玩怎么玩,完全不會(huì)因?yàn)闃I(yè)務(wù)系統(tǒng)選用了redis就無法運(yùn)轉(zhuǎn)。

到此這篇關(guān)于Redis高階使用消息隊(duì)列分布式鎖排行榜等的文章就介紹到這了,更多相關(guān)Redis消息隊(duì)列內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis配置文件代碼講解

    Redis配置文件代碼講解

    在本篇文章里小編給大家整理的是一篇關(guān)于Redis配置文件的說明內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03
  • 關(guān)于linux redis安裝及安裝遇到的問題

    關(guān)于linux redis安裝及安裝遇到的問題

    這篇文章主要介紹了關(guān)于linux redis安裝及安裝遇到的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Redis過期監(jiān)聽機(jī)制,訂單超時(shí)自動(dòng)取消方式

    Redis過期監(jiān)聽機(jī)制,訂單超時(shí)自動(dòng)取消方式

    這篇文章主要介紹了Redis過期監(jiān)聽機(jī)制,訂單超時(shí)自動(dòng)取消方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • redis執(zhí)行l(wèi)ua腳本的實(shí)現(xiàn)方法

    redis執(zhí)行l(wèi)ua腳本的實(shí)現(xiàn)方法

    redis在2.6推出了腳本功能,允許開發(fā)者使用Lua語言編寫腳本傳到redis中執(zhí)行。本文就介紹了redis執(zhí)行l(wèi)ua腳本的實(shí)現(xiàn)方法,感興趣的可以了解一下
    2021-11-11
  • 通過prometheus監(jiān)控redis實(shí)時(shí)運(yùn)行狀態(tài)的操作方法

    通過prometheus監(jiān)控redis實(shí)時(shí)運(yùn)行狀態(tài)的操作方法

    本文詳細(xì)介紹了如何通過Prometheus監(jiān)控Redis的運(yùn)行狀態(tài),包括安裝配置Redis、Redis Exporter以及Prometheus,配置Prometheus監(jiān)控Redis指標(biāo),以及常見的Redis指標(biāo)和告警規(guī)則,需要的朋友可以參考下
    2025-02-02
  • 詳解Redis如何處理Hash沖突

    詳解Redis如何處理Hash沖突

    在 Redis 中,哈希表是一種常見的數(shù)據(jù)結(jié)構(gòu),通常用于存儲(chǔ)對(duì)象的屬性,對(duì)于哈希表,最常遇到的是哈希沖突,那么,當(dāng) Redis遇到Hash沖突會(huì)如何處理?本文我們將詳細(xì)介紹Redis如何處理哈希沖突,需要的朋友可以參考下
    2024-09-09
  • 使用Redis實(shí)現(xiàn)秒殺功能的簡(jiǎn)單方法

    使用Redis實(shí)現(xiàn)秒殺功能的簡(jiǎn)單方法

    這篇文章主要給大家介紹了關(guān)于使用Redis實(shí)現(xiàn)秒殺功能的簡(jiǎn)單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Redis?數(shù)據(jù)傾斜產(chǎn)生的原因及問題詳解

    Redis?數(shù)據(jù)傾斜產(chǎn)生的原因及問題詳解

    數(shù)據(jù)傾斜是指在Redis分布式集群(如Redis?Cluster或Codis)中,數(shù)據(jù)(內(nèi)存占用)或訪問請(qǐng)求(QPS)沒有均勻地分布到各個(gè)節(jié)點(diǎn)上,導(dǎo)致部分節(jié)點(diǎn)負(fù)載過高,而其他節(jié)點(diǎn)相對(duì)空閑的現(xiàn)象,文章詳細(xì)介紹了Redis數(shù)據(jù)傾斜的概念、原因、診斷方法以及解決方案,感興趣的朋友一起看看吧
    2026-01-01
  • Redis 持久化機(jī)制的使用小結(jié)

    Redis 持久化機(jī)制的使用小結(jié)

    Redis提供了幾種持久化機(jī)制,可以在不同的應(yīng)用場(chǎng)景中選擇適合的方式來保存數(shù)據(jù),以確保即使Redis服務(wù)器重啟或發(fā)生故障,數(shù)據(jù)仍然不會(huì)丟失,下面就來一起了解一下
    2026-04-04
  • Redis分布式限流生產(chǎn)環(huán)境落地方案

    Redis分布式限流生產(chǎn)環(huán)境落地方案

    本文主要介紹了Redis分布式限流生產(chǎn)環(huán)境落地方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02

最新評(píng)論

科尔| 兴山县| 土默特右旗| 沛县| 江永县| 长宁县| 灌阳县| 武胜县| 宁南县| 玉林市| 郓城县| 南通市| 建阳市| 宝丰县| 博白县| 巴里| 正宁县| 尼勒克县| 武川县| 墨江| 石泉县| 玉树县| 思茅市| 横峰县| 密山市| 崇礼县| 开江县| 深州市| 蓬安县| 哈巴河县| 罗山县| 旬邑县| 福州市| 绿春县| 涡阳县| 达州市| 疏附县| 田阳县| 游戏| 顺昌县| 昌宁县|