日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
Redis內存淘汰的探究(redis的內存淘汰策論)

Redis內存淘汰的探究

公司主營業(yè)務:網站制作、做網站、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出和平免費做網站回饋大家。

Redis是一款常見的開源內存數(shù)據(jù)庫,常被用于緩存、消息隊列等場景。由于其采用了內存存儲,因此在使用時需要注意內存的使用情況。

為了避免內存溢出,Redis提供了多種內存淘汰策略。本文將系統(tǒng)地探究Redis內存淘汰策略的相關知識,并通過代碼實踐加深理解。

一、Redis內存淘汰策略介紹

1.1 noeviction

noeviction表示不進行內存淘汰,當內存占用達到maxmemory限制時,后續(xù)寫入操作會返回錯誤信息。這種策略一般用于保證數(shù)據(jù)的完整性,但不利于系統(tǒng)的穩(wěn)定性和可用性。

1.2 allKEYs-lru

allkeys-lru表示對所有key進行LRU淘汰操作。它會按照鍵的最后一次使用時間順序淘汰掉訪問時間最早的key,直到騰出足夠的內存空間。

1.3 volatile-lru

volatile-lru表示對過期鍵中最長時間未使用的key進行LRU淘汰操作。它會按照鍵的最后一次使用時間順序淘汰掉訪問時間最早的key,直到騰出足夠的內存空間。

1.4 allkeys-random

allkeys-random表示隨機淘汰所有key,它并不考慮每個key的使用情況。這種策略在持久化存儲過程中難以保證一致性,因此不被推薦使用。

1.5 volatile-random

volatile-random表示隨機淘汰過期鍵中的key,它并不考慮每個key的使用情況。和allkeys-random策略一樣,不利于保證一致性。

1.6 volatile-ttl

volatile-ttl表示淘汰剩余有效期最短的key。將剩余有效期最短的key作為優(yōu)先考慮對象,直到騰出足夠的內存空間。

二、Redis內存淘汰的實踐

下面我們通過代碼實踐來加深對Redis內存淘汰的理解。

假設我們有一個Redis實例,maxmemory設置為2MB?,F(xiàn)在我們向Redis中寫入一些數(shù)據(jù),每個key大小為100KB。具體代碼如下所示:

import redis
client = redis.Redis()

key_size = 1024 * 100 # 100KB
total_size = 1024 * 1024 * 2 # 2MB
write_size = 0

while write_size
key = "key_" + str(write_size)
value = "value" + str(write_size)
client.set(key, value)
write_size += key_size

運行以上代碼后,我們可以通過如下命令查看內存使用情況:

redis-cli info memory

其中,used_memory_peak記錄當前內存使用峰值;maxmemory指定的最大內存限制。

開啟Redis的maxmemory-policy設置為volatile-lru,即采用LRU淘汰過期鍵中最長時間未使用的key。

client.config_set("maxmemory-policy", "volatile-lru")

接著,我們向Redis中寫入一些數(shù)據(jù),每個key的有效期為60s。

key_size = 1024 * 100  # 100KB
total_size = 1024 * 1024 * 2 # 2MB
write_size = 0
while write_size
key = "key_" + str(write_size)
value = "value" + str(write_size)
client.setex(key, 60, value)
write_size += key_size

等待60s后,Redis的內存淘汰策略生效,我們可以查看系統(tǒng)日志,發(fā)現(xiàn)Redis按照LRU策略淘汰掉了最久未被使用的key。

如下所示:

2021-12-20T09:12:16.585807393Z [160] 20 Dec 09:12:16.585 # Redis is now ready to exit, bye bye...
2021-12-20T09:12:16.681584335Z [160] 20 Dec 09:12:16.680 * Running mode=standalone, port=6379.
2021-12-20T09:12:16.681601956Z [160] 20 Dec 09:12:16.680 # Server initialized
2021-12-20T09:12:16.682593737Z [160] 20 Dec 09:12:16.682 # WARNING overcommit_memory is set to 0! Background save may fl under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
2021-12-20T09:12:16.682647838Z [160] 20 Dec 09:12:16.682 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retn the setting after a reboot. Redis must be restarted after THP is disabled.
2021-12-20T09:12:16.683406032Z [160] 20 Dec 09:12:16.683 # Server running in protected mode (pid=160)
2021-12-20T09:12:16.683423874Z [160] 20 Dec 09:12:16.683 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2021-12-20T09:12:16.683430985Z [160] 20 Dec 09:12:16.683 # Server initialized and ready to accept connections
2021-12-20T09:12:16.683438676Z [160] 20 Dec 09:12:16.683 # Server listening on 0.0.0.0:6379
2021-12-20T09:12:16.683445987Z [160] 20 Dec 09:12:16.683 # Server started, Redis version 6.2.6
2021-12-20T09:12:16.689878958Z [160] 20 Dec 09:12:16.689 # *** Overcommit on memory (-o bytes): FALSE ***
2021-12-20T09:13:16.306625381Z [160] 20 Dec 09:13:16.306 * 1 changes in 900 seconds. Saving...
2021-12-20T09:13:16.306702818Z [160] 20 Dec 09:13:16.306 * Background saving started by pid 186
2021-12-20T09:13:16.963921423Z [186] 20 Dec 09:13:16.963 * DB saved on disk
2021-12-20T09:13:16.964287960Z [186] 20 Dec 09:13:16.963 * RDB: 0 MB of memory used by copy-on-write
2021-12-20T09:13:16.964294332Z [160] 20 Dec 09:13:16.964 * Background saving terminated with success
2021-12-20T09:13:17.307347063Z [160] 20 Dec 09:13:17.307 # Redis is now ready to exit, bye bye...
2021-12-20T09:13:19.831007485Z [160] 20 Dec 09:13:19.831 * Running mode=standalone, port=6379.
2021-12-20T09:13:19.831147840Z [160] 20 Dec 09:13:19.831 # Server initialized
2021-12-20T09:13:25.545417915Z [160] 20 Dec 09:13:25.545 # WARNING overcommit_memory is set to 0! Background save may fl under low memory condition. To fix this issue add 'vm.overcommit_memory =

創(chuàng)新互聯(lián)成都網站建設公司提供專業(yè)的建站服務,為您量身定制,歡迎來電(028-86922220)為您打造專屬于企業(yè)本身的網絡品牌形象。
成都創(chuàng)新互聯(lián)品牌官網提供專業(yè)的網站建設、設計、制作等服務,是一家以網站建設為主要業(yè)務的公司,在網站建設、設計和制作領域具有豐富的經驗。


文章標題:Redis內存淘汰的探究(redis的內存淘汰策論)
分享地址:http://www.dlmjj.cn/article/dpiiheg.html