Go語言實戰 revel框架教程之快取和Job

2022-05-18 05:04:37 字數 2473 閱讀 9581

所有的**應該都會有乙個非常簡單的需求,首頁一秒之內開啟。

滿足的方式主要有兩種:

資料記憶體化,把常用的資料全都放到記憶體,定期分批寫入硬碟。相比靜態頁面,這個方法對cpu的要求稍高。好處就不細說了,動態網頁的好處相比大家都耳熟能詳了。

山坡網選擇了第二種方案,資料記憶體化。

revel本身提供了cache支援,可通過配置切換到memcached(其實不用revel本身的cache也沒任何障礙,比如最近我對groupcache挺感興趣)。先說最簡單的用法,在**中引用"github.com/robfig/revel/cache",然後就可以直接用了。

var obj object

err := cache.get(「key」, &obj)

cache.set(「key」, obj, time.minute * 10)

預設的話cache是存在revel例項執行機器的記憶體裡。

好,資料查出來了,放到記憶體了,接下來的事情就是更新資料的方式了。比如每10分鐘更新一下「最熱書評」,每1分鐘更新一下「使用者動態」。這就要用到revel的job系統了。

statisticjob.run()

dailystatisticjob.run()

activityjob.run()

jobs.schedule("@every 1m", &activityjob)

jobs.schedule("@every 10m", &statisticjob)

jobs.schedule("@daily", &dailystatisticjob)

jobs.schedule("@daily", crawlerjob)

//每天凌晨3點執行

jobs.schedule("0 0 3 * * *", &recommendationjob)

jobs.schedule("@weekly", &weeklyjob)

}) 上面這段**非常好的演示了job的用法。job.run()會立即非同步執行。至於job的介面,我想不用贅述,實現乙個run()方法就好了。

type activityjob struct

func (j *activityjob) run()

值得一提的是jobs.schedule的語法,它參照了unix的cron命令,由於我沒有unix使用背景,所以還是學習了一下,感覺真是靈活好用!

jobs.schedule的第乙個引數接受六段數字的字串,如「0 0 0 0 0 0」。

從左到右,分別代表:秒分

小時每個月第幾天

第幾個月

每週第幾天

有效的值

0-59

0-59

0-23

1-31

1-12

jan-dec

0-6

sun-sat

有效特殊字元

* / , -

* / , -

* / , -

* / , -?

* / , -

* / , –?

特殊字元的含義分別是:

* 表示所有值都可以,比如放到第五位(第幾個月)就代表每個月都觸發

- 表示範圍,比如在第三位(小時)9-17 代表從早上9點到17點之間每小時觸發一次

/ 表示範圍增量,比如在第二位(分)3-59/15 代表,從第分鐘到第59分鐘,每隔15分鐘觸發

, 表示多個觸發條件,比如在第六位(每週第幾天)mon,wed,fri 表示僅在周

一、週三、周五激發

除此之外,還可以使用預定義的計畫,如:

預定義描述

等同於 @yearly

(或者@annually)

每年的1月1日 00:00:00執行

0 0 0 1 1 *

@monthly

每月1日 00:00:00執行

0 0 0 1 * *

@weekly

每週日 00:00:00執行

0 0 0 * * 0

@daily

(或者@midnight)

每天 00:00:00執行

0 0 0 * * *

@hourly

每小時執行

0 0 * * * *

還有乙個預定義的字串 @every ,用法是

@every

比如

@every 1m 每分鐘執行一次

@every 1h30m10s 每隔1小時30分鐘10秒執行一次

明白了嗎?真的非常靈活強大。jobs.schedule實際上是呼叫了這個包,使用的時候別忘了引用。

以上,快取和任務排程都講完了。

Go語言實戰 revel框架教程之許可權控制

乙個站點上面最基本都會有三種使用者角色,未登入使用者 已登入使用者和管理員。這一次我們就來看看在revel框架下如何進行許可權控制。因為revel是mvc結構的,每乙個url其實都會對映到乙個具體的controller.action上面,所以許可權控制落到實處就是對action的訪問進行控制。那麼思...

Go語言revel環境搭建

在terminal中執行如下命令 ruby e curl fssl brew update brew install go sudo apt get update sudo apt get install go 64bit 32bit 在有許可權的目錄建立乙個資料夾go path,用於golang的...

讀《Go 語言實戰》

英文版書名 go in action william kennedy brian ketelsen eirk st.martin 著2017年3月 第 1 版 go 語言是現代的,快速的,帶有乙個強大的標準庫。內建對併發的支援 使用介面作為 復用的基礎模組。一,go語言介紹 二,快速開始乙個go程式...