成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文看懂Redis的內(nèi)存回收策略和Key過期策略

存儲(chǔ) Redis
Redis 作為當(dāng)下最熱門的 Key-Value 存儲(chǔ)系統(tǒng),在大大小小的系統(tǒng)中都扮演著重要的角色,不管是 session 存儲(chǔ)還是熱點(diǎn)數(shù)據(jù)的緩存,亦或是其他場景,我們都會(huì)使用到 Redis。在生產(chǎn)環(huán)境我們偶爾會(huì)遇到 Redis 服務(wù)器內(nèi)存不夠的情況,那對于這種情況 Redis 的內(nèi)存是如何回收處理的呢?

 1、前言

Redis 作為當(dāng)下最熱門的 Key-Value 存儲(chǔ)系統(tǒng),在大大小小的系統(tǒng)中都扮演著重要的角色,不管是 session 存儲(chǔ)還是熱點(diǎn)數(shù)據(jù)的緩存,亦或是其他場景,我們都會(huì)使用到 Redis。在生產(chǎn)環(huán)境我們偶爾會(huì)遇到 Redis 服務(wù)器內(nèi)存不夠的情況,那對于這種情況 Redis 的內(nèi)存是如何回收處理的呢?另外對于帶有過期時(shí)間的 Key Redis 又是如何處理的呢? 

[[283245]]

2、Redis 內(nèi)存設(shè)置

我們都知道如果我們要設(shè)置 Redis 的最大內(nèi)存大小只需要在配置文件redis.conf 中配置一行 maxmemory xxx 即可,或者我們通過 config set 命令在運(yùn)行時(shí)動(dòng)態(tài)配置 Redis 的內(nèi)存大小。 

3、Redis 內(nèi)存過期策略

3.1、過期策略的配置

那么當(dāng) Redis 內(nèi)存不夠的時(shí)候,我們要知道 Redis 是根據(jù)什么策略來淘汰數(shù)據(jù)的,在配置文件中我們使用 maxmemory-policy 來配置策略,如下圖: 

 

我們可以看到策略的值由如下幾種:

  1. volatile-lru: 在所有帶有過期時(shí)間的 key 中使用 LRU 算法淘汰數(shù)據(jù);
  2. alkeys-lru: 在所有的 key 中使用最近最少被使用 LRU 算法淘汰數(shù)據(jù),保證新加入的數(shù)據(jù)正常;
  3. volatile-random: 在所有帶有過期時(shí)間的 key 中隨機(jī)淘汰數(shù)據(jù);
  4. allkeys-random: 在所有的 key 中隨機(jī)淘汰數(shù)據(jù);
  5. volatile-ttl: 在所有帶有過期時(shí)間的 key 中,淘汰最早會(huì)過期的數(shù)據(jù);
  6. noeviction: 不回收,當(dāng)達(dá)到最大內(nèi)存的時(shí)候,在增加新數(shù)據(jù)的時(shí)候會(huì)返回 error,不會(huì)清除舊數(shù)據(jù),這是 Redis 的默認(rèn)策略;

volatile-lru, volatile-random, volatile-ttl 這幾種情況在 Redis 中沒有帶有過期 Key 的時(shí)候跟 noeviction 策略是一樣的。淘汰策略是可以動(dòng)態(tài)調(diào)整的,調(diào)整的時(shí)候是不需要重啟的,原文是這樣說的,我們可以根據(jù)自己 Redis 的模式來動(dòng)態(tài)調(diào)整策略。”To pick the right eviction policy is important depending on the access pattern of your application, however you can reconfigure the policy at runtime while the application is running, and monitor the number of cache misses and hits using the Redis INFO output in order to tune your setup.“

3.2、策略的執(zhí)行過程

  1. 客戶端運(yùn)行命令,添加數(shù)據(jù)申請內(nèi)存;
  2. Redis 會(huì)檢查內(nèi)存的使用情況,如果已經(jīng)超過的最大限制,就是根據(jù)配置的內(nèi)存淘汰策略去淘汰相應(yīng)的 key,從而保證新數(shù)據(jù)正常添加;
  3. 繼續(xù)執(zhí)行命令。

3.3、近似的 LRU 算法

Redis 中的 LRU 算法不是精確的 LRU 算法,而是一種經(jīng)過采樣的LRU,我們可以通過在配置文件中設(shè)置 maxmemory-samples 5 來設(shè)置采樣的大小,默認(rèn)值為 5,我們可以自行調(diào)整。官方提供的采用對比如下,我們可以看到當(dāng)采用數(shù)設(shè)置為 10 的時(shí)候已經(jīng)很接近真實(shí)的 LRU 算法了。 

 

在 Redis 3.x 以上的版本的中做過優(yōu)化,目前的近似 LRU 算法以及提升了很大的效率,Redis 之所以不采樣實(shí)際的 LRU 算法,是因?yàn)闀?huì)耗費(fèi)很多的內(nèi)存,原文是這樣說的

The reason why Redis does not use a true LRU implementation is because it costs more memory.

4、Key 的過期策略

4.1、設(shè)置帶有過期時(shí)間的 key

前面介紹了 Redis 的內(nèi)存回收策略,下面我們看看 Key 的過期策略,提到 Key 的過期策略,我們說的當(dāng)然是帶有 expire 時(shí)間的 key,如下: 

通過 redis> set name ziyouu ex 100 命令我們在 Redis 中設(shè)置一個(gè) key 為 name,值為 ziyouu 的數(shù)據(jù),從上面的截圖中我們可以看到右下角有個(gè) TTL,并且每次刷新都是在減少的,說明我們設(shè)置帶有過期時(shí)間的 key 成功了。

4.2、Redis 如何清除帶有過期時(shí)間的 key

對于如何清除過期的 key 通常我們很自然的可以想到就是我們可以給每個(gè) key 加一個(gè)定時(shí)器,這樣當(dāng)時(shí)間到達(dá)過期時(shí)間的時(shí)候就自動(dòng)刪除 key,這種策略我們叫定時(shí)策略。這種方式對內(nèi)存是友好的,因?yàn)榭梢约皶r(shí)清理過期的可以,但是由于每個(gè)帶有過期時(shí)間的 key 都需要一個(gè)定時(shí)器,所以這種方式對 CPU 是不友好的,會(huì)占用很多的 CPU,另外這種方式是一種主動(dòng)的行為。

有主動(dòng)也有被動(dòng),我們可以不用定時(shí)器,而是在每次訪問一個(gè) key 的時(shí)候再去判斷這個(gè) key 是否到達(dá)過期時(shí)間了,過期了就刪除掉。這種方式我們叫做惰性策略,這種方式對 CPU 是友好的,但是對應(yīng)的也有一個(gè)問題,就是如果這些過期的 key 我們再也不會(huì)訪問,那么永遠(yuǎn)就不會(huì)刪除了。

Redis 服務(wù)器在真正實(shí)現(xiàn)的時(shí)候上面的兩種方式都會(huì)用到,這樣就可以得到一種折中的方式。另外在定時(shí)策略中,從官網(wǎng)我們可以看到如下說明

Specifically this is what Redis does 10 times per second:

  1. Test 20 random keys from the set of keys with an associated expire.
  2. Delete all the keys found expired.
  3. If more than 25% of keys were expired, start again from step 1.

意思是說 Redis 會(huì)在有過期時(shí)間的 Key 集合中隨機(jī) 20 個(gè)出來,刪掉已經(jīng)過期的 Key,如果比例超過 25%,再重新執(zhí)行操作。每秒中會(huì)執(zhí)行 10 個(gè)這樣的操作。

5、總結(jié)

今天給大家介紹了一下 Redis 的內(nèi)存回收和 Key 過期策略的處理,Redis 作為必備的開發(fā)組件,我們必須好好掌握,希望今天的文章能幫助大家更好的掌握 Redis 的核心。另外歡迎大家到我們的知識星球中與我們一起進(jìn)步。

 

責(zé)任編輯:華軒 來源: Java極客技術(shù)
相關(guān)推薦

2023-03-14 11:00:05

過期策略Redis

2021-09-10 18:47:22

Redis淘汰策略

2022-07-01 14:20:49

Redis策略函數(shù)

2023-10-26 07:13:14

Redis內(nèi)存淘汰

2023-05-22 13:27:17

2023-11-21 09:41:00

緩存策略存儲(chǔ)

2024-01-03 08:54:17

Kubernetes策略工具

2024-09-26 06:30:36

2025-06-09 04:00:00

2024-01-29 12:22:07

設(shè)計(jì)模式策略模式

2020-03-31 14:40:24

HashMap源碼Java

2021-06-06 13:06:34

JVM內(nèi)存分布

2021-08-30 11:13:28

內(nèi)存交換機(jī)制

2025-03-14 10:22:26

2025-02-10 09:22:40

2017-07-28 09:11:14

HIVEHBASE區(qū)別

2024-03-13 08:34:22

2016-08-18 00:21:12

網(wǎng)絡(luò)爬蟲抓取網(wǎng)絡(luò)

2023-02-24 15:24:14

MySQL數(shù)據(jù)庫管理分庫分表

2021-07-05 00:00:55

TomcatNginxApache
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 伊人一区 | 最新国产视频 | 成人在线不卡 | 一区二区免费 | 精品国产乱码久久久久久影片 | 国产一区二区不卡 | 免费黄色网址视频 | 日韩成人 | 婷婷综合色 | 国产精品伦一区二区三级视频 | 亚洲精品久久久一区二区三区 | 日韩久久综合 | 国产良家自拍 | 久草电影网 | 在线一区观看 | 国产一区影院 | 羞羞涩涩在线观看 | 精品网| 中文字幕久久精品 | www.国产精| 久久久久久国产精品免费免费狐狸 | www.男人天堂.com | 国产资源在线观看 | 国产 欧美 日韩 一区 | 夜夜草| 亚州午夜精品 | 成人二区| 亚洲视频区 | 在线观看中文字幕 | 91黄在线观看 | 亚洲高清在线观看 | 成人免费一级 | 久久久久久国产 | 亚洲一区精品在线 | 亚洲欧美久久 | 色视频www在线播放国产人成 | 亚洲精品一区二区网址 | 国产成人精品午夜视频免费 | 91在线精品一区二区 | 日韩伦理一区二区 | 人人澡人人爱 |