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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ron基于Redis滑動過期機制的定時任務(wù)實現(xiàn)(redis滑動過期c)

Ron基于Redis滑動過期機制的定時任務(wù)實現(xiàn)

長安網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

Ron是一款基于Redis的分布式定時任務(wù)調(diào)度系統(tǒng)。它提供了可靠的定時任務(wù)調(diào)度服務(wù),允許多個任務(wù)同時執(zhí)行,支持延遲執(zhí)行和循環(huán)執(zhí)行等功能。Ron的設(shè)計目標(biāo)是高可用、高效率、易用性,同時具備分布式擴展能力。

Redis滑動過期機制是Ron實現(xiàn)高效率的關(guān)鍵技術(shù)。在Redis中,key的過期時間通常是靜態(tài)的,即指定一個過期時間,當(dāng)時間到達時,key會被自動刪除。而滑動過期機制允許在key被訪問時動態(tài)地更新過期時間,從而避免了過期時間被固定的缺點。

基于Redis滑動過期機制的實現(xiàn),Ron在定時任務(wù)調(diào)度中引入了超時時間概念。當(dāng)一個任務(wù)被添加到Ron中時,它會被設(shè)置一個超時時間T1,該任務(wù)會在T1時間內(nèi)執(zhí)行完畢,否則會被認(rèn)為執(zhí)行超時。此時,另一個定時任務(wù)會被啟動,執(zhí)行當(dāng)前任務(wù)未完成的任務(wù)。這樣可以保證任務(wù)的完整性和及時性。

Ron的代碼結(jié)構(gòu)如下:

“`text

.

├── README.md

├── app

│ └── mn.go

├── config

│ ├── config.go

│ └── config.json

├── handler

│ ├── client.go

│ ├── job_handler.go

│ └── server.go

├── job

│ ├── job.go

│ └── job_manager.go

└── util

├── logger.go

└── redis.go


在mn.go中,Ron采用了Go語言的goroutine和chan,并結(jié)合了Redis實現(xiàn)了高效的定時任務(wù)調(diào)度系統(tǒng),示例代碼如下:

```go
package mn
import (
"flag"
"github.com/liangdas/mqant"
"github.com/liangdas/mqant/conf"
"github.com/tidwall/gjson"
"runtime"
"strconv"
"time"
)

func mn() {
// 1. 讀取配置文件
var configFile = flag.String("configFile", "config/config.json", "config file path")
flag.Parse()
config, err := conf.LoadConfig(*configFile)
if err != nil {
panic(err)
}
// 2. 啟動rpc服務(wù)
srv := mqant.CreateServer(config)
srv.RegisterGO("Ron", Ron)

// 3. 啟動goroutine,定時執(zhí)行任務(wù)
go func() {
for {
// 3.1 從Redis中獲取下一次執(zhí)行的任務(wù)ID
nextID, err := util.GetRedis().Brpop("JobQueue", 1*time.Second).Result()
if err != nil {
continue
}
// 3.2 獲取任務(wù)詳情,判斷是否超時
jobID := gjson.Get(nextID, "JobID").String()
job := job_manager.GetJobByID(jobID)
if job == nil {
continue
}
timeout, err := strconv.Atoi(gjson.Get(nextID, "Timeout").String())
if err != nil {
timeout = job.GetTimeout()
}
if time.Now().Unix() > job.GetStartTime()+int64(timeout) {
job.SetStatus(job_fled)
job_manager.UpdateJob(job)
continue
}

// 3.3 執(zhí)行任務(wù)
go func() {
job.SetStatus(job_running)
job.Run()
job_manager.UpdateJob(job)
}()
}
}()
// 4. 啟動服務(wù)器
srv.Run()
}

func Ron(args []byte) string {
return "Ron is running..."
}

在handler/server.go中,Ron定義了RPC接口,其中AddJob接口用于添加任務(wù)。

“`go

type Server struct{}

func (s *Server) AddJob(args []byte) string {

// 1. 解析參數(shù)

jobName := gjson.Get(args, “Name”).String()

jobDelay := gjson.Get(args, “Delay”).Int()

jobTimeout := gjson.Get(args, “Timeout”).Int()

// 2. 創(chuàng)建任務(wù)實例

job := job.NewJob(jobName, jobDelay, jobTimeout)

// 3. 添加到任務(wù)隊列

jobID := job_manager.AddJob(job)

// 4. 添加到Redis隊列

util.GetRedis().Lpush(“JobQueue”, fmt.Sprintf(`{“JobID”:%q,”Timeout”:%q}`, jobID, jobTimeout))

// 5. 返回任務(wù)ID

return jobID

}


通過Ron基于Redis滑動過期機制的定時任務(wù)實現(xiàn),可以實現(xiàn)高效、可靠的定時任務(wù)調(diào)度服務(wù)。該方案具有易于擴展、高效、簡單易用等優(yōu)點,在實際項目中得到了廣泛應(yīng)用。

創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。


分享標(biāo)題:ron基于Redis滑動過期機制的定時任務(wù)實現(xiàn)(redis滑動過期c)
當(dāng)前URL:http://www.5511xx.com/article/dpipsdh.html