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

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

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

一、前言

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

二、Redis高階用法

1.消息隊列:Redis的列表數(shù)據(jù)結(jié)構(gòu)非常適合作為簡單的消息隊列。消息發(fā)布者可以使用LPUSH命令向隊列中添加消息,而多個消息訂閱者則可以通過阻塞線程使用BRPOP命令從隊列中取出消息。需要注意的是,Redis官方并不提供可靠消費/發(fā)布的機制,因此需要自行實現(xiàn)故障轉(zhuǎn)移、隊列持久化、隊列監(jiān)控和流量控制等功能。
2.Lua腳本:Redis支持使用Lua腳本在服務器端執(zhí)行一系列命令。這有助于減少客戶端與服務器之間的網(wǎng)絡開銷,并且可以實現(xiàn)復雜的原子操作。
3.事務:Redis支持事務,可以將一系列命令作為一個原子操作來執(zhí)行。這通過MULTI、EXEC、DISCARD和WATCH等命令來實現(xiàn),確保在事務執(zhí)行期間,中間步驟不會被其他客戶端打斷。
4.分布式鎖:Redis可以利用SET命令的NX(不覆蓋)參數(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)非常適合用來實現(xiàn)排行榜功能。例如,可以通過zadd命令添加分數(shù)和成員,然后使用zrevrange命令獲取排名最高的成員。
  • HyperLogLog:這是Redis用于基數(shù)統(tǒng)計的算法。當輸入元素的數(shù)量或體積非常大時,HyperLogLog所需的計算空間總是固定的且很小。通過pfadd命令添加元素,然后使用pfcount命令獲取基數(shù)統(tǒng)計結(jié)果。
  • 過期鍵管理:Redis可以為鍵設置過期時間,過期后鍵會自動被刪除。這對于緩存系統(tǒng)特別有用,可以避免長時間占用內(nèi)存。

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

 高可用挑戰(zhàn)

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

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

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

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

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

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

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

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

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

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

 功能性需求

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

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

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

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

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

相關(guān)文章

  • Redis配置文件代碼講解

    Redis配置文件代碼講解

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

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

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

    Redis過期監(jiān)聽機制,訂單超時自動取消方式

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

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

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

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

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

    詳解Redis如何處理Hash沖突

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

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

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

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

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

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

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

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

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

最新評論

金沙县| 隆子县| 余庆县| 平安县| 阿勒泰市| 牟定县| 广宗县| 丰县| 化德县| 平顶山市| 海门市| 策勒县| 含山县| 甘孜| 湖南省| 吐鲁番市| 汝南县| 汤原县| 卫辉市| 元氏县| 芮城县| 长治县| 泸定县| 应城市| 新竹县| 荆门市| 本溪市| 陵水| 郁南县| 信阳市| 新野县| 北流市| 化德县| 中方县| 无为县| 金昌市| 新民市| 灵山县| 温州市| 潞城市| 子洲县|