日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Redis實(shí)現(xiàn)混合過期策略的研究(redis混合過期策略)

Redis實(shí)現(xiàn)混合過期策略的研究

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供昂昂溪網(wǎng)站建設(shè)、昂昂溪做網(wǎng)站、昂昂溪網(wǎng)站設(shè)計(jì)、昂昂溪網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、昂昂溪企業(yè)網(wǎng)站模板建站服務(wù),十余年昂昂溪做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

Redis作為一種內(nèi)存數(shù)據(jù)庫,其具有高速度、高可用性、高擴(kuò)展性等優(yōu)點(diǎn),因此在很多高并發(fā)場(chǎng)景下得到了廣泛的應(yīng)用。但是,Redis存儲(chǔ)的數(shù)據(jù)往往需要根據(jù)一定的策略進(jìn)行過期清理,以防止過多的數(shù)據(jù)占用內(nèi)存空間。對(duì)于Redis的過期機(jī)制,目前主要有兩種方式:主動(dòng)清理和被動(dòng)清理。主動(dòng)清理是由Redis自動(dòng)清理、過期數(shù)據(jù),而被動(dòng)清理則是在數(shù)據(jù)被獲取時(shí)判斷它是否過期。但是,這兩種方式各有優(yōu)缺點(diǎn),主動(dòng)清理會(huì)帶來一定的性能障礙,而被動(dòng)清理則會(huì)帶來一定的計(jì)算復(fù)雜度,因此需要尋找一種更有效的策略。本文通過研究發(fā)現(xiàn),一種混合過期策略能夠很好地解決上述問題。

一、Redis的過期機(jī)制

Redis的過期機(jī)制主要有兩種方式:

1、主動(dòng)清理

Redis會(huì)定義一個(gè)定時(shí)器,定期掃描每個(gè)KEY的過期時(shí)間,將時(shí)間到了的key進(jìn)行清理,這種方式的缺點(diǎn)是會(huì)帶來一定的性能障礙,因?yàn)镽edis的清理機(jī)制是在單獨(dú)的線程中進(jìn)行的。

2、被動(dòng)清理

Redis的被動(dòng)清理方式是在讀取key時(shí)進(jìn)行過期驗(yàn)證,只有過期的key才會(huì)被刪除。這種方式會(huì)帶來一定的計(jì)算復(fù)雜度,但是可以避免漸進(jìn)式rehash時(shí)的性能問題。

二、混合過期策略

在前文提到的兩種Redis過期機(jī)制中,主動(dòng)清理方式會(huì)帶來一定的性能障礙,而被動(dòng)清理方式會(huì)帶來一定的計(jì)算復(fù)雜度,那么有沒有一種過期策略,既能夠避免性能障礙,又能夠避免計(jì)算復(fù)雜度呢?答案就是混合過期策略。

混合過期策略是將主動(dòng)清理和被動(dòng)清理兩種策略結(jié)合起來,通過設(shè)置不同的過期時(shí)間閾值,將不同的key存儲(chǔ)在不同的過期時(shí)間策略中。在Redis中,有兩個(gè)過期時(shí)間策略,分別是主過期策略和異步過期策略。

主過期策略是指在Redis主線程主動(dòng)清理過期key,而異步過期策略是指在異步線程內(nèi)被動(dòng)清理過期key。可以將短時(shí)間內(nèi)可能被頻繁調(diào)用的數(shù)據(jù)存儲(chǔ)在主過期策略中,而將較長(zhǎng)時(shí)間內(nèi)不常用的數(shù)據(jù)存儲(chǔ)在異步過期策略中,這樣就可以達(dá)到一個(gè)很好的平衡。

三、混合過期策略的具體實(shí)現(xiàn)

具體實(shí)現(xiàn)混合過期策略,需要增加一個(gè)異步線程,該線程會(huì)定期掃描過期key,并將異步過期策略中的過期key進(jìn)行清理。當(dāng)Redis主線程遇到一個(gè)過期的key時(shí),它還會(huì)使用異步線程清理器刪除異步過期策略中的相應(yīng)key,以避免異步線程不及時(shí)地清理。

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.util.Pool;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

public class RedisExpirable {

protected static final String MNCHAN = “__redis_expired_channel__”;

protected static final String ASYNCCHAN = “__redis_expired_channel_async__”;

private JedisPool pool;

protected ScheduledExecutorService executorService;

public RedisExpirable(JedisPool pool) {

this(pool, 1);

}

public RedisExpirable(JedisPool pool, int threadCount) {

this.pool = pool;

this.executorService = Executors.newScheduledThreadPool(threadCount);

}

public RedisExpirable(Pool pool, int threadCount) {

this(new JedisPool(pool), threadCount);

}

public void addExpirator(String key, int seconds) {

try (Jedis jedis = pool.getResource()) {

jedis.expire(key, seconds);

String chan = seconds > 0 ? ASYNCCHAN : MNCHAN;

jedis.publish(chan, key);

if (executorService != null) {

int delay = Math.max(1, seconds / 2);

executorService.schedule(new Expirator(jedis, key), delay, TimeUnit.SECONDS);

}

}

}

protected class Expirator implements Runnable {

Jedis jedis;

String key;

public Expirator(Jedis jedis, String key) {

this.jedis = jedis;

this.key = key;

}

@Override

public void run() {

try {

if (!jedis.exists(key)) {

jedis.publish(ASYNCCHAN, key);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

在上述代碼中,我們?cè)黾恿艘粋€(gè)異步線程,來實(shí)現(xiàn)異步過期策略中的過期key進(jìn)行清理的功能,以下是代碼的具體解釋:

1、在addExpirator方法中,我們使用了Jedis工具類的expire方法,用于設(shè)置key的過期時(shí)間,并且通過發(fā)布訂閱功能,將該key的名稱發(fā)布到相應(yīng)通道中。

2、如果過期時(shí)間大于0,那么我們將該key存儲(chǔ)到異步通道中進(jìn)行處理。

3、將異步線程的延遲時(shí)間設(shè)置為過期時(shí)間的一半,以避免異步線程對(duì)系統(tǒng)性能產(chǎn)生影響。

4、在Expirator的run方法中,我們檢查key是否存在于Redis中,如果不存在,則將key發(fā)布到異步通道中,以便異步線程刪除。

四、總結(jié)

本文通過研究發(fā)現(xiàn),混合過期策略是一種更加有效的Redis過期策略,可以在不損失性能的情況下達(dá)到更好的過期清理效果。但是,在實(shí)際使用過程中,還需要根據(jù)具體場(chǎng)景來設(shè)置合適的過期時(shí)間閾值,以最大化使用Redis的性能。

香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問快、穩(wěn)定!


本文題目:Redis實(shí)現(xiàn)混合過期策略的研究(redis混合過期策略)
當(dāng)前鏈接:http://www.5511xx.com/article/cohjocd.html