redis性能管理

redis的數據庫是存放在內存當中,所以對內存的監控至關重要

redis內存監控和解析

1.如何查看redis內存使用情況

[root@localhost utils]# redis-cli -h 20.0.0.170 -p 6379 
20.0.0.170:6379> info memory
used_memory:853336        //redis中數據占用的內存
used_memory_rss:10473472  //redis向操作系統申請的內存
used_memory_peak:854312   //redis使用內存的峰值

作為一個運維工程師,每天的系統巡檢工作是必不可少的。(比如硬件巡檢,數據庫 nginx redis docker k8s )

但是在redis內存方面,最重要的就是以上三點

2.內存碎片率

內存碎片率=Redis向操作系統申請的內存 / Redis中的數據占用的內存

mem_fragmentation_ratio = used_memory_rss / used_memory

mem_fragmentation_ratio:內存碎片率。

系統以及分配給了redis,但是redis未能夠有效利用的內存

[root@localhost ~]# redis-cli info memory | grep ratio
allocator_frag_ratio:1.29  
//分配器碎片比例,redis主進程調度時產生的內存空間,越小越好
值越高,代表內存越高,內存的浪費就越多allocator_rss_ratio:5.99
分配器占用物理內存的比例,就算告訴大家主進程調度執行時占用了多少物理內存rss_overhead_ratio:1.22
rss是向系統申請的內存空間,表示redis占用物理內存額外的開銷比例,比例越低越好。redis實際占用的物理內存和向系統申請的內存越接近,額外的開銷越低mem_fragmentation_ratio:13.23
內存碎片的比例,越低越好,占用內存數值越低,表示內存使用率越高。

內存碎片產生的原因

  • Redis內部有自已的內存管理器,為了提高內存使用的效率,來對內存的申請和釋放進行管理。
  • Redis中的值刪除的時候,并沒有把內存直接釋放、交還給操作系統,而是交給了Redis內部有內存管理器。
  • Redis中申請內存的時候,也是先看自己的內存管理器中是否有足夠的內存可用。
  • Redis的這種機制,提高了內存的使用率,但是會使Redis中有部分自己沒在用,卻不釋放的內存,導致了內存碎片的發生。
    ?

如何自動清理碎片

vim /etc/redis/6379.conf
最后一行插入
activedefrag yes

手動清理

[root@localhost ~]# redis-cli memory purge
OK
手動清理

內存使用率

redis實例的內存使用率超過可用最大內存,操作系統將開始進行內存與swap空間交換。

避免內存交換發生的方法:

  • 針對緩存數據大小選擇安裝Redis 實例
  • 盡可能的使用Hash數據結構存儲
  • 設置key的過期時間

設置redis最大內存閥值

一旦到達閥值,自動清理碎片,開啟key的回收機制。

key的回收機制策略

vim /etc/redis/6379.conf
line 599maxmemory-policy volatile-lru
使用redis內置的LRU算法,把已經設置了過期時間的鍵值對中淘汰數據,移除最近最少使用鍵值對(針值對已經設置了過期時間的鍵值對)maxmemory-policy volatile-ttl
已經設置了過期時間的鍵值對,從當中挑選一個即將過期的鍵值對(針對有設置過期時間的鍵值對)maxmemory-policy volatile-random:
從已經設置了過期時間的鍵值對當中隨即淘汰一個鍵值對,挑選數據隨機淘汰鍵值對。(對設置了過期時間的鍵值對進行隨機移除。)allkeys-lru:
LRU算法當中,對所有的鍵值對進行淘汰,移除最少使用的鍵值對。(針對所有鍵值對)allkeys-random:
從所有鍵值對當中任意選擇選擇數據進行淘汰(無差別淘汰,不使用)maxmemory-policy noeviction
禁止鍵值對回收(不刪除任何鍵值對,直到redis把內存塞滿,寫不了,報錯)

在工作中,一定要給redis 占用內存設置閥值 !!!!

而且在實際工作中,盡量使用禁止鍵值對回收,或者使用將最少使用鍵值對刪除。

隨機刪除萬萬不可使用!!!!!

redis占用內存的效率問題如何解決

  • 1.日常巡檢當中,對redis的占用情況做監控
  • 2.設置redis占用系統內存的閥值,避免占用系統全部內存
  • 3.內存碎片清理 手動,自動
  • 4.配置一個合適的key回收機制

redis的雪崩,緩存擊穿,緩存穿透的原因和解決方案

redis的雪崩

大量的應用請求無法在redis 緩存當中處理,請求會全部發送到嗎后臺數據庫,數據庫本身并發能力本身就很差,一旦高并發數據庫會很快崩潰。

什么情況會導致雪崩?

  • redis集群大面積故障
  • redis緩存中,大量數據同時過期,大量請求無法得到處理
  • redis實例宕機

解決方案

  • 事前:高可用架構,方式整個緩存故障。主從復制和哨兵模式,redis集群
  • 事中:在國內用的比較多的方式:HySTRIX,熔斷(到達閥值自動斷開),降級(到達閥值立刻降級),限流三個手段來降低雪崩發生之后的損失。
  • 數據庫不死即可,慢可以,但不能沒有響應
  • 事后:數據備份

redis的緩存擊穿

緩存擊穿主要是熱點數據緩存過期,或者被刪除,多個請求并發訪問熱點數據,請求也是轉發到數據庫了,導致數據庫的性能快速下降。

經常被請求的緩存數據,最好設置為永不過期。

鍵值對還在,但是值被替換,原有的請求找不到之后,同樣也回去請求后臺數據庫,也是擊穿的類型一種

redis的緩存穿透:

緩存中沒數據,數據庫中也沒有對應數據,但是有用戶一直在發起這個都沒有的請求,而且請求的數據格式很大。黑客在利用漏洞攻擊,壓垮應用數據庫。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161030.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161030.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161030.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

觸發設備離線

業務場景 業務開發過程中,我們經常會需要判斷遠程終端是否在線,當終端離線的時候我們需要發送消息告知相應的系統, 環形隊列 1.創建一個index從0到30的環形隊列(本質是個數組) 2.環上每一個slot是一個Set&#xf…

python 執行系統命令

subprocess 模塊和 os.system 或 os.popen 等函數相比,功能更為強大和靈活,是 Python 官方推薦的執行系統命令的方法。主要的優勢包括: 更強的錯誤處理:subprocess 模塊可以更精細地控制錯誤輸出和錯誤代碼,而 os.syst…

自定義springboot的生命周期函數在項目啟動完成后去取配置文件中的值

主要是實現smartLifecycle類 package com.ruoyi.workflow.util;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springfr…

MYSQL索引使用注意事項

索引使用注意事項: 1.索引列運算 不要在索引列上進行運算操作,否則索引將失效; 2.字符串不加引號 字符串類型使用時,不加引號,否則索引將失效; 3.模糊查詢 如果僅僅是尾部模糊匹配,索引將不會失…

防火墻暴露端口

如果你想開通防火墻上的端口,具體的操作方式可能會取決于你所使用的操作系統。以下是一些常見操作系統的步驟: 1. Linux(例如,Ubuntu 或 CentOS): 使用 ufw(適用于 Ubuntu): # 開…

RK平臺查看板子上的dts信息

簡介 dts文件描述了硬件每個模塊的信息,我們嵌入式軟件的調試很多時候都是在改dts文件,有時候我們不確定板子上的固件是否已經更新了我們的修改,這時候我們可以直接讀取板子上的dts信息,下面來演示一下。 進入uboot命令行模式 …

關于軟raid的實現及常見問題

RAID概念 磁盤陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁盤構成的具有冗余能力的陣列”之意。 磁盤陣列是由很多價格較便宜的磁盤,以硬件(RAID卡)或軟件(MDADM&…

關于用css設置input輸入框hover的時候的樣式以及當input為disabled的時候,不要讓hover樣式生效

效果如果&#xff1a; 編輯狀態下的時候&#xff1a; 只讀狀態下的時候&#xff1a; 代碼如圖&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

【前端學java】語法練習-工具類的封裝(13)

往期回顧&#xff1a; 【前端學java】JAVA開發的依賴安裝與環境配置 &#xff08;0&#xff09;【前端學 java】java的基礎語法&#xff08;1&#xff09;【前端學java】JAVA中的packge與import&#xff08;2&#xff09;【前端學java】面向對象編程基礎-類的使用 &#xff08…

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

maven打包可執行jar含依賴lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

sql調優

慢查詢 SQL 治理方案 一、SQL 性能下降的原因 在對 SQL 進行分析之前&#xff0c;需要明確可能導致 SQL 執行性能下降的原因進行分析&#xff0c;執行性能下降可以體現在很多方面&#xff1a; 查詢語句寫的爛索引沒加好表數據過大數據庫連接數不夠查詢的數據量過大被其他慢s…

MyBatisPlus代碼生成

基礎依賴 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

visual studio 如何建立 C 語言項目

安裝這個 模塊。 新建 空項目 創建完成 寫demo 點擊運行&#xff1a;

【1day】泛微e-office OA系統user_page接口未授權訪問漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現

Web項目從Tomcat遷移到TongWeb

注意事項 1. 使用JNDI方式獲取數據源&#xff1a; ①在TongWeb創建JDBC連接池; ②修改Web項目數據源配置. #spring.datasource.urljdbc:mysql://127.0.0.1:3306/demo #spring.datasource.usernametest #spring.datasource.passwordspring.datasource.jndi-namedemo2. 修…

Spring cloud - Hystrix源碼

其實只是Hystrix初始化部分&#xff0c;我們從源碼的角度分析一下EnableCircuitBreaker以及HystrixCommand注解的初始化過程。 從EnableCircuitBreaker入手 我們是通過在啟動類添加EnableCircuitBreaker注解啟用Hystrix的&#xff0c;所以&#xff0c;源碼解析也要從這個注解…

最新PHP熊貓頭圖片表情斗圖生成源碼

這是一款能生成熊貓頭表情斗圖的自適應系統源碼&#xff0c;無論是在電腦還是手機上都可以正常使用&#xff01;這個源碼集成了搜狗搜索圖片接口&#xff0c;可以輕松地一鍵搜索數百萬張圖片&#xff0c;并且還包含了表情制作等功能模塊。對于一些新站來說&#xff0c;這是一個…

Cloud微服務

當我們談論“云微服務”時&#xff0c;通常是指基于云計算和微服務架構的應用程序開發和部署模型。以下是關于云微服務的一些詳細信息&#xff1a; 微服務架構&#xff1a; 微服務架構是一種軟件設計和開發模式&#xff0c;將應用程序劃分為一組小型、獨立的服務單元。每個服…