欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis深入了解內(nèi)存淘汰與事務(wù)操作

 更新時(shí)間:2022年07月28日 09:09:12   作者:kaico2018  
將Redis用作緩存時(shí),Redis數(shù)據(jù)存在內(nèi)存中,如果內(nèi)存空間用滿,就會(huì)自動(dòng)驅(qū)逐老的數(shù)據(jù)。Redis事務(wù)是一個(gè)單獨(dú)的隔離操作:事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會(huì)被其他客戶端發(fā)送來的命令請(qǐng)求所打斷

Redis內(nèi)存淘汰策略

為什么要有淘汰策略?

答:將Redis用作緩存時(shí),Redis數(shù)據(jù)存在內(nèi)存中,如果內(nèi)存空間用滿,就會(huì)自動(dòng)驅(qū)逐老的數(shù)據(jù)。

redis配置文件:可以配置redis存放數(shù)據(jù)的閾值(例如:100mb),再配置淘汰策略。

六種淘汰策略

  • noeviction:當(dāng)內(nèi)存使用達(dá)到閾值的時(shí)候,所有引起申請(qǐng)內(nèi)存的命令會(huì)報(bào)錯(cuò)。
  • allkeys-lru:在主鍵空間中,優(yōu)先移除最近未使用的key。(推薦)
  • volatile-lru:在設(shè)置了過期時(shí)間的鍵空間中,優(yōu)先移除最近未使用的key。
  • allkeys-random:在主鍵空間中,隨機(jī)移除某個(gè)key。
  • volatile-random:在設(shè)置了過期時(shí)間的鍵空間中,隨機(jī)移除某個(gè)key。
  • volatile-ttl:在設(shè)置了過期時(shí)間的鍵空間中,具有更早過期時(shí)間的key優(yōu)先移除。

如何配置淘汰策略?

在redis.conf文件中, 設(shè)置Redis 內(nèi)存大小的限制,我們可以設(shè)置maxmemory ,當(dāng)數(shù)據(jù)達(dá)到限定大小后,會(huì)選擇配置的策略淘汰數(shù)據(jù)。

比如:maxmemory 300mb。

通過配置 maxmemory-policy 設(shè)置Redis的淘汰策略。比如:maxmemory-policy volatile-lru

Redis中的自動(dòng)過期機(jī)制

首先需要配置redis配置文件,開啟 key 失效監(jiān)聽。

當(dāng)key失效時(shí),可以執(zhí)行我們的客戶端回調(diào)監(jiān)聽的方法。

需要在Redis中配置:notify-keyspace-events “Ex”

代碼在之前的基礎(chǔ)上增加:Springboot整合key失效監(jiān)聽

RedisListenerConfig 配置類

@Configuration
public class RedisListenerConfig {
    @Bean
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
}

監(jiān)聽 key 的類

@Component
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }
    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiraKey = message.toString();
        System.out.println("失效的key:" + expiraKey);
    }
}

注意:如果是多個(gè)springboot項(xiàng)目或者多個(gè) jvm 服務(wù)監(jiān)聽同一個(gè)key的話,每一個(gè) jvm 都會(huì)監(jiān)聽到這個(gè)key失效并且執(zhí)行相應(yīng)的邏輯代碼。

多服務(wù)(jvm)監(jiān)聽Redis key失效通知,如何保證只有一個(gè)jvm是執(zhí)行監(jiān)聽的代碼?

答:可以使用 zookeeper 的選舉機(jī)制,多個(gè)服務(wù)注冊(cè)到zookeeper中,選舉出一個(gè)leader,由為 leader 的jvm來執(zhí)行監(jiān)聽代碼。

Redis中的事務(wù)操作

  • Multi 開啟事務(wù)
  • EXEC 提交事務(wù)
  • Watch 可以監(jiān)聽一個(gè)或者多個(gè)key,在提交事務(wù)之前是否有發(fā)生了變化 如果發(fā)生邊了變化就不會(huì)提交事務(wù),沒有發(fā)生變化才可以提交事務(wù) 版本號(hào)碼 樂觀鎖
  • Discard 取消提交事務(wù)

注意:Redis官方是沒有提供回滾方法,只提供了取消事務(wù)。

Redis中本身就是單線程的能夠保證線程安全問題,不需要考慮線程安全問題。

取消事務(wù)跟回滾有什么區(qū)別呢?為什么redis不支持回滾事務(wù)?

Mysql中開啟了事務(wù),對(duì)該行數(shù)據(jù)上行鎖—,Commit 數(shù)據(jù)可以提交

回滾:對(duì)事務(wù)取消和行鎖都會(huì)撤銷

Redis沒有回滾事務(wù)的概念,單純?nèi)∠聞?wù)(不提交事務(wù)) 不上鎖

watch和Multi的區(qū)別

Watch相當(dāng)于樂觀鎖,在事務(wù)提交之前沒有發(fā)生變化才可以提交事務(wù)。

Multi 就是開啟事務(wù),操作數(shù)據(jù)之后可以提交事務(wù)或者取消提交事務(wù)。

到此這篇關(guān)于Redis深入了解內(nèi)存淘汰與事務(wù)操作的文章就介紹到這了,更多相關(guān)Redis內(nèi)存淘汰與事務(wù)操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis Cluster 集群搭建你會(huì)嗎

    Redis Cluster 集群搭建你會(huì)嗎

    這篇文章主要介紹了Redis Cluster 集群搭建過程,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Redis執(zhí)行Lua腳本的好處與示例代碼

    Redis執(zhí)行Lua腳本的好處與示例代碼

    Redis在2.6推出了腳本功能,允許開發(fā)者使用Lua語(yǔ)言編寫腳本傳到Redis中執(zhí)行。下面這篇文章主要給大家介紹了關(guān)于Redis執(zhí)行Lua腳本的好處與示例代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-10-10
  • Redis的setNX分布式鎖超時(shí)時(shí)間失效 -1問題及解決

    Redis的setNX分布式鎖超時(shí)時(shí)間失效 -1問題及解決

    這篇文章主要介紹了Redis的setNX分布式鎖超時(shí)時(shí)間失效 -1問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Redis拒絕連接問題分析與解決方案

    Redis拒絕連接問題分析與解決方案

    在分布式系統(tǒng)中,Redis作為高性能的內(nèi)存數(shù)據(jù)庫(kù),廣泛用于緩存、消息隊(duì)列、會(huì)話管理等場(chǎng)景,然而,隨著系統(tǒng)復(fù)雜度和并發(fā)量的增加,Redis連接問題時(shí)有發(fā)生,尤其是"拒絕連接"的錯(cuò)誤,本文將深入分析Redis拒絕連接的常見原因,并詳細(xì)講解每種原因的解決方案
    2024-10-10
  • IDEA中的Redis插件連接Redis服務(wù)器

    IDEA中的Redis插件連接Redis服務(wù)器

    本文主要介紹了IDEA中的Redis插件連接Redis服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • RedisTemplate常用操作方法總結(jié)(set、hash、list、string等)

    RedisTemplate常用操作方法總結(jié)(set、hash、list、string等)

    本文主要介紹了RedisTemplate常用操作方法總結(jié),主要包括了6種常用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 讓Redis在你的系統(tǒng)中發(fā)揮更大作用的幾點(diǎn)建議

    讓Redis在你的系統(tǒng)中發(fā)揮更大作用的幾點(diǎn)建議

    Redis在很多方面與其他數(shù)據(jù)庫(kù)解決方案不同:它使用內(nèi)存提供主存儲(chǔ)支持,而僅使用硬盤做持久性的存儲(chǔ);它的數(shù)據(jù)模型非常獨(dú)特,用的是單線程。另一個(gè)大區(qū)別在于,你可以在開發(fā)環(huán)境中使用Redis的功能,但卻不需要轉(zhuǎn)到Redis
    2014-06-06
  • 使用Redis命令操作數(shù)據(jù)庫(kù)的常見錯(cuò)誤及解決方法

    使用Redis命令操作數(shù)據(jù)庫(kù)的常見錯(cuò)誤及解決方法

    由于Redis是內(nèi)存數(shù)據(jù)庫(kù),因此可能會(huì)存在一些安全問題,下面這篇文章主要給大家介紹了關(guān)于使用Redis命令操作數(shù)據(jù)庫(kù)的常見錯(cuò)誤及解決方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Windows下安裝Redis服務(wù)的圖文教程

    Windows下安裝Redis服務(wù)的圖文教程

    Redis是有名的NoSql數(shù)據(jù)庫(kù),一般Linux都會(huì)默認(rèn)支持。但在Windows環(huán)境中,可能需要手動(dòng)安裝設(shè)置才能有效使用。下面通過本文給大家介紹Windows下安裝Redis服務(wù)的圖文教程,感興趣的朋友一起看看吧
    2018-08-08
  • redis 解決key的亂碼問題,并清理詳解

    redis 解決key的亂碼問題,并清理詳解

    這篇文章主要介紹了redis 解決key的亂碼問題,并清理詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評(píng)論