一零七零、Redis基礎穩固篇

Redis是什么,優缺點?
Redis本質是一個K-V類型的內存數據庫
純內存操作,每秒可處理超過10w的讀寫操作
優點:
讀寫性能極高
非阻塞IO
單線程
支持持久化
支持事務
數據結構豐富


缺點:
容易受到物理內存的限制
主機宕機可能會造成數據的丟失


Redis為什么這么快?
基于內存存儲
單線程實現
非阻塞IO,IO多路復用

Redis與Memcached有哪些優勢?
支持的數據類型更豐富,String,Hash,list,set,zset等,memcached只支持K-V類型
Redis有持久化機制,Memcached沒有
Redis 原生支持集群模式,Memcached 沒有原生的集群模式,需要依靠客戶端來實現往集群中分片寫入數據;
Redis 支持發布訂閱模型、Lua 腳本、事務等功能,而 Memcached 不支持;


為什么用Redis做緩存?
1、高并發
2、高性能


Redis的常用場景有哪些?

  • 緩存
  • 排行榜
  • 計數器
  • 分布式會話
  • 社交網絡
  • 消息系統

Redis如何實現持久化?
1、AOF:日志追加的方式,將Redis的寫操作記錄下來,根據日志進行恢復追加
2、RDB:快照形式,在指定的時間間隔內將快照內的數據寫入磁盤,恢復時將快照文件讀入內存

?

Redis持久化數據和緩存怎么做擴容?
如果Redis被當做緩存使用,使用一致性哈希實現動態擴容縮容。
如果Redis被當做一個持久化存儲使用,必須使用固定的keys-to-nodes映射關系,節點的數量一旦確定不能變化。
否則的話(即Redis節點需要動態變化的情況),必須使用可以在運行時進行數據再平衡的一套系統,而當前只有Redis集群可以做到這樣。


Redis過期鍵的刪除策略?
Redis的過期刪除策略就是:惰性刪除和定期刪除兩種策略配合使用。
惰性刪除:惰性刪除不會去主動刪除數據,而是在訪問數據的時候,再檢查當前鍵值是否過期,如果過期則執行刪除并返回null給客戶端,如果沒有過期則返回正常信息給客戶端。它的優點是簡單,不需要對過期的數據做額外的處理,只有在每次訪問的時候才會檢查鍵值是否過期,缺點是刪除過期鍵不及時,造成了一定的空間浪費。
定期刪除:Redis會周期性的隨機測試一批設置了過期時間的key并進行處理。測試到的已過期的key將被刪除。

定時刪除:
在設置某個key 的過期時間同時,我們創建一個定時器,讓定時器在該過期時間到來時,立即執行對其進行刪除的操作。
優點:定時刪除對內存是最友好的,能夠保存內存的key一旦過期就能立即從內存中刪除。
缺點:對CPU最不友好,在過期鍵比較多的時候,刪除過期鍵會占用一部分CPU時間,對服務器的響應時間和吞吐量造成影響。

Redis key的過期時間和永久有效分別怎么設置?
通過expire或pexpire命令,客戶端可以以秒或毫秒的精度為數據庫中的某個鍵設置生存時間,讓某個鍵在某個時間點過期。


Redis內存淘汰策略?
當Redis內存不足的時候會進行淘汰,刪除不常用的數據。
Redis4.0之前:
volatile-lru:利用LRU算法移除設置過過期時間的key (LRU:最近使用Least Recently Used )
allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key(這個是最常用的)
volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-random:從數據集( server.db[i].dict)中任意選擇數據淘汰
no-eviction:禁止驅逐數據,也就是說當內存不足以容納新寫入數據時,新寫入操作會報錯。這個應該沒人使用吧!
Redis4.0后:
volatile-lfu:從已設置過期時間的數據集(server.db[i].expires)中挑選最不經常使用的數據淘汰(LFU(Least Frequently Used)算法,也就是最頻繁被訪問的數據將來最有可能被訪問到)
allkeys-lfu:當內存不足以容納新寫入數據時,在鍵空間中,移除最不經常使用的key。

如何保證緩存與數據庫雙寫時的數據一致性?
1、先刪除緩存,后更新數據庫
2、先更新數據庫,后刪除緩存


redis的集群模式有哪些?
主從復制,優點是讀寫分離,可以分擔服務器壓力,提高讀寫效率。缺點是當主宕機時可能會造成主從數據不—致。
哨兵模式,主從的基礎上增加了哨兵機制。當主掛了時,從節點會選票投出新主節點。優點就是提高了redis的可用性,心跳機制監測主節點的健康情況。缺點是配置麻煩,在選舉過程中,無法工作。多主多從。

?

什么是熱Key問題?如何解決?
大量請求一個key,導致這個key 的并發訪問量很大,產生緩存擊穿問題。集群部署,分攤請求壓力。

?

什么是緩存擊穿、緩存穿透、緩存雪崩?以及對應的解決方案?
緩存擊穿:某個熱點Key失效,造成緩存讀取不到,大量請求落在數據庫上
通過互斥鎖來控制讀寫的線程數,其他線程等待
不設置熱點key的過期時間
緩存穿透:請求的key在緩存中找不到,在數據庫中也找不到,找不到后就去數據庫找一遍導致數據庫壓力劇增
布隆過濾器:在緩存之前設置過濾器,將key存儲在布隆過濾器上,不存在直接進行返回,減少對數據庫的壓力
緩存雪崩:某一時間大量熱點Key失效,大量請求落在數據庫上,很可能直接打崩數據庫
設置不同的過期時間,讓緩存失效的時間盡量均勻
保證Redis緩存的高可用,防止Redis宕機導致緩存雪崩的問題。可以使用主從+哨兵,Redis集群來避免 Redis全盤崩潰的情況。

?

Redis高可用方案如何實施?
使用官方推薦的哨兵(sentinel)機制就能實現,當主節點出現故障時,由Sentinel自動完成故障發現和轉移,并通知應用方,實現高可用性。
它有四個主要功能:
集群監控,負責監控Redis master和slave進程是否正常工作。
消息通知,如果某個Redis實例有故障,那么哨兵負責發送消息作為報警通知給管理員。
故障轉移,如果master node掛掉了,會自動轉移到slave node上。
配置中心,如果故障轉移發生了,通知client客戶端新的master地址。


什么是分布式鎖?為什么用分布式鎖?
鎖在程序中的作用就是同步工具,保證共享資源在同一時刻只能被一個線程訪問,Java中的鎖我們都很熟悉了,像synchronized 、Lock都是我們經常使用的,但是Java的鎖只能保證單機的時候有效,分布式集群環境就無能為力了,這個時候我們就需要用到分布式鎖。
分布式鎖,顧名思義,就是分布式項目開發中用到的鎖,可以用來控制分布式系統之間同步訪問共享資源。
思路是:在整個系統提供一個全局、唯一的獲取鎖的"東西",然后每個系統在需要加鎖時,都去問這個"東西"拿到一把鎖,這樣不同的系統拿到的就可以認為是同一把鎖。至于這個"東西",可以是Redis、Zookeeper,也可以是數據庫。
一般來說,分布式鎖需要滿足的特性有這么幾點:
1、互斥性:在任何時刻,對于同一條數據,只有一臺應用可以獲取到分布式鎖;
2、高可用性:在分布式場景下,一小部分服務器宕機不影響正常使用,這種情況就需要將提供分布式鎖的服務以集群的方式部署;
3、防止鎖超時:如果客戶端沒有主動釋放鎖,服務器會在一段時間之后自動釋放鎖,防止客戶端宕機或者網絡不可達時產生死鎖;
4、獨占性:加鎖解鎖必須由同一臺服務器進行,也就是鎖的持有者才可以釋放鎖,不能出現你加的鎖,別人給你解鎖了。
?

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

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

相關文章

【JAVA】日志

輸出語句日志輸出位置只能是控制臺可以將日志信息寫入文件或數據庫中取消日志需要修改代碼,靈活性差只需修改日志文件多線程性能較差性能較好 日志規范接口:Commons Logging(JCL)、Simple Logging Facade for Java(slf4j) 日志實現框架:Log…

軟件測試簡歷撰寫與優化,讓你面試邀約率暴增99%!

如何撰寫一份優秀的簡歷呢??這是一個求職者都會遇到的問題,今天就來詳細帶大家寫一份軟件測試工程師職位的簡歷!希望能給各位軟件測試求職者一個帶來幫助! 個人簡歷是求職者給招聘單位發的一份簡要介紹。包含自己的基本…

linux系統服務學習(一)Linux高級命令擴展

文章目錄 Linux高級命令(擴展)一、find命令1、find命令作用2、基本語法3、*星號通配符4、根據文件修改時間搜索文件☆ 聊一下Windows中的文件時間概念?☆ 使用stat命令獲取文件的最后修改時間☆ 創建文件時設置修改時間以及修改文件的修改時間…

【Vue】Vue2創建移動端項目實戰教程,創建移動端項目保姆級教程,設置axios,utils工具包,vue.fonfig.js配置項 (下)

系列文章目錄 這里是創建移動端項目 【Vue】Vue2.x創建項目全程講解,保姆級教程,手把手教,Vue2怎么創建項目(上) 【Vue】Vue2創建移動端項目實戰教程,創建移動端項目保姆級教程,接上一篇創建Vue…

2023牛客暑期多校訓練營9 B.Semi-Puzzle: Brain Storm

文章目錄 題目大意題解求解回溯 參考代碼 題目大意 給定兩個數 a , m a,m a,m ,求滿足 a u ≡ u ( m o d m ) a^u \equiv u (mod\ \ m) au≡u(mod m) 的一個解。 ( 1 ≤ a , m ≤ 1 0 9 , 0 ≤ u ≤ 1 0 18 ) (1\leq a,m \leq10^9 ,0\leq u\leq 10^{18}) (1≤a…

玩賺音視頻開發高階技術——FFmpeg

隨著移動互聯網的普及,人們對音視頻內容的需求也不斷增加。無論是社交媒體平臺、電商平臺還是在線教育,都離不開音視頻的應用。這就為音視頻開發人員提供了廣闊的就業機會。根據這些年來網站上的音視頻開發招聘需求來看,音視頻開發人員的需求…

如何優雅的使用Mock Server

事出有因 昨天跟同事討論我們在用的rap2(一個集接口編寫和mock server的開源項目)和剛上線了一個easy-mock的server,到底哪個好用。 我們主要討論的點有個兩個: 接口的一致性、 編碼的無侵入性。 背景 自從前后端分離后,完成前后端的分工…

【計算機視覺|生成對抗】條件生成對抗網絡(CGAN)

本系列博文為深度學習/計算機視覺論文筆記,轉載請注明出處 標題:Conditional Generative Adversarial Nets 鏈接:[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) 摘要 生成對抗網絡(Generative Adversarial…

Windows 11 家庭中文版找不到組策略文件gpedit.msc

最近因為調整日期問題需要用到組策略文件gpedit.msc,但是發現找不到文件 在按鍵盤 winR 打開運行界面輸入 gpedit.msc 回車 Windows找不到文件’gpedit.msc’。請確定文件名是否正確后,再試-次。 檢查電腦Windows系統版本 是 Windows 11 家庭中文版 果斷早網上搜…

C++模板元編程入門案例

C++模板元編程(Template Metaprogramming)是一種在編譯時進行計算和代碼生成的技術,它使用C++的模板機制來實現。 下面是一個簡單的C++模板元編程的示例,展示了如何在編譯時計算一個數的階乘。 #include <iostream> template <int N> struct Factorial { …

docker 學習--02 常用命令

docker 學習–02 常用命令 文章目錄 docker 學習--02 常用命令1. 幫助啟動類命令1.1啟動docker1.2 停止docker1.3 重啟docker1.4 查看docker1.5 設置開機自啟1.6 查看docker概要信息1.7 查看docker總體幫助文檔1.8 查看docker命令幫助文檔 2. 鏡像命令2.1 列出本地主機上有的鏡…

Jmeter 參數化的幾種方法

目錄 配置元件-用戶自定義變量 前置處理器-用戶參數 配置元件-CSV Data Set Config Tools-函數助手 配置元件-用戶自定義變量 可在測試計劃、線程組、HTTP請求下創建用戶定義的變量 全局變量&#xff0c;可以跨線程組調用 jmeter執行的時候&#xff0c;只獲取一次&#xff0…

kafka 02——三個重要的kafka客戶端

kafka 02——三個重要的kafka客戶端 1. 前言1.1 關于 Kafka 的安裝1.2 常用客戶端簡介1.3 依賴 2. AdminClient2.1 Admin Configs2.2 AdminClient API2.2.1 設置 AdminClient 對象2.2.2 創建 topic 獲取 topic 列表2.2.3 刪除topic2.2.4 查看 topic 的描述信息2.2.5 查看 topi…

【復習8-13天】每天40min,我們一起用70天穩扎穩打學完《JavaEE初階》——14/70 第十四天

專注 效率 記憶 預習 筆記 復習 做題 歡迎觀看我的博客,如有問題交流,歡迎評論區留言,一定盡快回復!(大家可以去看我的專欄,是所有文章的目錄)   文章字體風格: 紅色文字表示:重難點★? 藍色文字表示:思路以及想法★?   如果大家覺得有幫助的話,感謝大家幫忙 點…

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據 文章目錄 【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據前言出現的背景一、TDSQL-C數據庫是什么&#xff1f;二、TDSQL-C 的特點三、TDSQL-C的應用場景四、基于TD…

測試相關Liunx基礎知識

Linux的歷史和安裝 基本常識 Liunx目錄結果 常見

CTF之逆向之阿里巴巴

題目地址&#xff1a;http://www.shiyanbar.com/ctf/13 題目預覽&#xff1a; 解題過程&#xff1a; 1、下載附件發現是exe文件 2、使用PEid和Detect It Easy查殼 和 開發語言&#xff0c;發現沒有加殼&#xff0c;都是用C#開發的 3、C#和Java Python屬于解釋型語言&#xff…

Win10安裝GPU支持的最新版本的tensorflow

我在安裝好cuda和cudnn后&#xff0c;使用pip install tensorflow安裝的tensorflow都提示不能找到GPU&#xff0c; 為此懷疑默認暗轉的tensorflow是不帶GPU支持的。 在tensorflow官網提供了多個版本的GPU支持的windows的安裝包 https://www.tensorflow.org/install/pip?hlz…

用ChatGPT和六頂帽思考法幫助自己更好地決策和解決問題

當我們在解決復雜問題時&#xff0c;我們常常陷入單一視角的狀態。創造性思維領域的先驅愛德華德博諾&#xff0c;提出了六頂帽思考法[1]&#xff0c;這意味著我們可以從六個不同的視角來思考一個問題&#xff0c;以實現高水平決策和解決問題。 每一頂“帽子”代表不同的視角。…

阿里云國際版CDN使用教程!

當網站流量達到一定值后&#xff0c;勢必會造成網站訪問卡堵&#xff0c;這時候阿里云CDN將會一個很好的選擇&#xff0c;阿里云 CDN 是由全球分布式邊緣節點組成的虛擬網絡。阿里云 CDN 可減少源站負載&#xff0c;防止網絡擁塞&#xff0c;使用阿里云 CDN 加速圖像、小文件、…