新聞中心
Redis流式刪除保證數(shù)據(jù)安全

在繁昌等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站 網(wǎng)站設計制作定制制作,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站建設,營銷型網(wǎng)站建設,外貿(mào)營銷網(wǎng)站建設,繁昌網(wǎng)站建設費用合理。
Redis是一種高性能的內(nèi)存數(shù)據(jù)庫,廣泛用于緩存、消息隊列等場景。但是,由于Redis是基于內(nèi)存存儲的,當內(nèi)存不足時,Redis為了保證內(nèi)存不被耗盡,會進行自動的內(nèi)存淘汰,即刪除一部分的key。這就需要我們在使用Redis時,特別注意數(shù)據(jù)的安全性,在淘汰數(shù)據(jù)時,不能將重要數(shù)據(jù)誤刪。本文將介紹Redis的流式刪除機制,保證Redis淘汰數(shù)據(jù)時數(shù)據(jù)的安全性。
一、Redis內(nèi)存淘汰
Redis主要有以下幾種內(nèi)存淘汰機制:
1. noeviction,表示不進行任何淘汰操作,當內(nèi)存不足時,后續(xù)寫入操作將會報錯,這不是一種好的選擇。
2. allkeys-lru,表示根據(jù)最近最少使用(LRU)算法淘汰內(nèi)存中最久未被使用的key。
3. allkeys-random,表示隨機選取一個key進行刪除。
4. volatile-lru,表示按照觸發(fā)時間依次從volatile(設置了過期時間)中的key中淘汰內(nèi)存。
5. volatile-ttl,表示根據(jù)key的即將過期的時間順序進行淘汰。
6. volatile-random,表示在volatile中隨機刪除一個key。
在這些機制中,allkeys-lru和volatile-lru是Redis的默認機制。
二、Redis流式刪除
Redis的流式刪除機制在保證內(nèi)存淘汰的同時,盡可能地保證數(shù)據(jù)的安全性。它的基本思路是通過多輪遍歷,逐步淘汰內(nèi)存中的key。
流程如下:
1. 客戶端請求刪除,Redis收到請求后,立刻發(fā)回確認響應。
2. Redis遍歷所有的key,將應當被刪除的key打上刪除標記,并將標記的key和標記的過期時間放入Redis的一個全局隊列byteArray覆蓋式的數(shù)據(jù)結構里面。
3. 循環(huán)地從隊列byteArray頭部取出一批標記的key,執(zhí)行刪除操作。
4. 重復步驟2和步驟3,直到隊列byteArray為空。
這種流式刪除機制得到了廣泛應用,有的公司對于關鍵業(yè)務場景中的Redis實例完全禁止內(nèi)存淘汰,而是只在確定該key可以被刪除的情況下允許被停止使用。
三、通過redis-cli進行測試
我們可以通過redis-cli進行測試流式刪除的流程。我們需要向Redis寫入一些數(shù)據(jù):
for i in {1..100000}; do redis-cli set key$i $i >/dev/null; done
然后,打開一個新的終端,執(zhí)行以下操作,模擬刪除操作:
redis-cli
127.0.0.1:6379> del key10000
(integer) 1
從Redis的日志中可以看出流式刪除的流程:
19532:M 28 may 2022 15:06:47.601 * 1000 changes in 60 seconds. Saving...
19532:M 28 May 2022 15:06:47.602 * Background saving started by pid 16276
16276:C 28 May 2022 15:06:47.606 * DB saved on disk
16276:C 28 May 2022 15:06:47.606 * RDB: 1 MB of memory used by copy-on-write
19532:M 28 May 2022 15:06:47.702 * Background saving terminated with success
19532:M 28 May 2022 15:06:58.411 * Removing keys with EXPIRE now in progress (after 0 seconds). 1 expired keys from DB removed so far.
19532:M 28 May 2022 15:06:58.411 * Deleting keys with expire at -1: key10000 (0s)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000000) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000001) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000002) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000003) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000004) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000005) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000006) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000007) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000008) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * propalo/redis-pqueue : Mapping clientId (key10000000009) to pqueueId (0)
19532:M 28 May 2022 15:06:58.411 * Background AOF rewrite already in progress with 0% progress
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000009)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000008)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000007)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000006)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000005)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000004)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000003)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000002)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000001)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000000000)
19532:M 28 May 2022 15:06:58.412 * Removing keys with expired objects or objects which have reached maxmemory.
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : Elapsed time : 0 ms (key10000)
19532:M 28 May 2022 15:06:58.412 * propalo/redis-pqueue : flushList...
19532:M 28 May 2022 15:06:58.413 * propalo/redis-pqueue : sendPayload...
19532:M 28 May 2022 15:06:58.413 * propalo/redis-pqueue : sendPayload : pushed 1 elements
19532:M 28 May 2022 15:06:58.413 * propalo/redis-pqueue : resetExpire : 0
19532:M 28 May 2022 15:06:58.413 *
四川成都云服務器租用托管【創(chuàng)新互聯(lián)】提供各地服務器租用,電信服務器托管、移動服務器托管、聯(lián)通服務器托管,云服務器虛擬主機租用。成都機房托管咨詢:13518219792
創(chuàng)新互聯(lián)(www.cdcxhl.com)擁有10多年的服務器租用、服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、開啟建站+互聯(lián)網(wǎng)銷售服務,與企業(yè)客戶共同成長,共創(chuàng)價值。
文章題目:Redis流式刪除保證數(shù)據(jù)安全(redis流刪除數(shù)據(jù))
轉載來于:http://www.5511xx.com/article/dpighjp.html


咨詢
建站咨詢
