redis從小白到大佬

2021-10-03 16:55:06 字數 1549 閱讀 5749

簡單的說redis是一種在記憶體中儲存資料的資料庫,其內部採用 key-value的形式進行儲存。redis的讀取速度非常快。因為它與mysql等常規資料庫不同,不用與硬碟互動來讀取資料。另外,redis 也經常用來做分布式鎖。redis 提供了多種資料型別來支援不同的業務場景。除此之外,redis 支援事務 、持久化、lua指令碼、lru驅動事件、多種集群方案。

效能極高,高併發

如圖所示,使用者在第一次訪問某個資料庫空的資料的時是從硬碟上讀取的,讀取速度比較慢。這是我們可以利用redis建立乙個快取,儲存相應的資料(value)其並給命名(key)。如果資料庫中的對應資料改變的之後,同步改變快取中相應的資料即可!

在實際專案中,資料庫往往不足以支援使用者的頻繁請求。而redis可以把使用者對資料庫的請求轉移到快取中,這樣使用者的一部分請求會直接到快取這裡而不用經過資料庫。

豐富的資料型別

redis支援二進位制案例的 strings, lists, hashes, sets 及 ordered sets 資料型別操作。

在redis的配置檔案中存在三種不同的 aof 持久化方式,它們分別是:

由於redis是儲存在記憶體上,由於裝置的限制,所儲存的資料量會比較小。

會出現快取雪崩和快取穿透。具體解決辦法下文進行**。

我們在使用redis的時候可以設定乙個過期時間。當超過這個過期時間之後,與之對應的key隨即刪除。下面是兩種刪除方式

但是僅僅通過這兩種方法不足以刪除記憶體中的所有key。這就會導致大量的key堆積在記憶體中,導致記憶體耗盡。怎麼解決這個問題呢?redis 記憶體淘汰機制

redis 提供 6種資料淘汰策略:

4.0版本後增加以下兩種:

什麼是快取雪崩?

簡介:快取同一時間大面積的失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。

有哪些解決辦法?

事前:盡量保證整個 redis 集群的高可用性,發現機器宕機盡快補上。選擇合適的記憶體淘汰策略。

事中:本地ehcache快取 + hystrix限流&降級,避免mysql崩掉

事後:利用 redis 持久化機制儲存的資料盡快恢復快取

什麼是快取穿透?

快取穿透說簡單點就是大量請求的 key 根本不存在於快取中,導致請求直接到了資料庫上,根本沒有經過快取這一層。舉個例子:某個黑客故意製造我們快取中不存在的 key 發起大量請求,導致大量請求落到資料庫。下面用展示一下(這兩張不是我畫的,為了省事直接在網上找的,這裡說明一下):

有哪些解決辦法?

最基本的就是首先做好引數校驗,一些不合法的引數請求直接丟擲異常資訊返回給客戶端。比如查詢的資料庫 id 不能小於 0、傳入的郵箱格式不對的時候直接返回錯誤訊息給客戶端等等。

git命令操作 從小白到大佬

git的三區 暫存區 版本區 指令 git diff 對比 工作區和暫存區 檔案差異 版本回退 分支操作 相關需求場景的操作 git clone 自動關聯了,不需要關聯,轉殖下來的倉庫預設只有master分支。希望獲取dev分支內容 git fetch origin dev1 dev2 拉取遠端倉庫...

從小白到大佬 python學習day03

1.for迴圈語法 for 變數 in 序列 迴圈體說明 a.for in 關鍵字 固定寫法 b.變數 可以是任意變數 一般寫乙個新的變數 c.序列 python中容器型資料型別,例如 字串 列表 字典 元組 集合 迭代器等。d.冒號 固定寫法 e.迴圈體 和for保持乙個縮排的一條或者多條語句 迴...

python從小白到入門 2

1 判斷語句 if elif else 後面不要忘記加 下面是 塊,必須要進行 縮排,判斷時一般用肯定句。weather sunny if weather rainy print 在家學習 elif weather sunny print 去釣魚 else print 逛街 2 if後面結果是tru...