<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Go語言實戰 - revel框架教程之緩存和Job

      所有的網站應該都會有一個非常簡單的需求,首頁一秒之內打開。

      滿足的方式主要有兩種:

      頁面靜態化,效果最好,對服務器基本沒負擔,只要帶寬足夠就好了。我知道一個PV過億的站點就是全站靜態(以前新浪也是),據說早就想換成動態的,可以省很多事兒,但至今仍然沒有成功。

      數據內存化,把常用的數據全都放到內存,定期分批寫入硬盤。相比靜態頁面,這個方法對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系統了。

      revel.OnAppStart(func() {
        revmgo.AppInit()

        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() {

        //從數據庫中讀取數據,或者做數據統計
        //然后更新緩存

        cache.Set(util.CKBookActivity, activities, cache.FOREVER)
      }

      值得一提的是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 <duration>

      比如

      @every 1m 每分鐘執行一次

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

      明白了嗎?真的非常靈活強大。Jobs.Schedule實際上是調用了https://github.com/robfig/cron這個包,使用的時候別忘了引用。

      以上,緩存和任務調度都講完了。

      posted @ 2013-09-04 16:33  AllenDang  閱讀(2932)  評論(20)    收藏  舉報
      主站蜘蛛池模板: 男男车车的车车网站w98免费| 国产性色av高清在线观看| 久久99精品久久久久久| 婷婷四房综合激情五月在线| 国产亚洲精品综合一区二区| 性欧美vr高清极品| 久久精品国产福利一区二区| 久青草精品视频在线观看| 嫩草研究院久久久精品| 成人性生交片无码免费看| 国产精品人妻一码二码尿失禁| 精品综合一区二区三区四区| 91中文字幕一区在线| 国产日韩久久免费影院| 蜜臀视频在线观看一区二区| 国产精品久久久久无码网站| 天天弄天天模| 亚洲国产亚洲国产路线久久| 国产精品大全中文字幕| 国产成AV人片久青草影院| 国产99久久亚洲综合精品西瓜tv| 日本精品中文字幕在线不卡| 亚欧洲乱码视频一二三区| 亚洲日韩av在线观看| 亚洲男人av天堂久久资源| 亚洲美女厕所偷拍美女尿尿 | 欧美激情一区二区三区成人| 在线观看视频一区二区三区| 亚洲精品国产精品国在线| 国产盗摄xxxx视频xxxx| 欧美高清freexxxx性| 精品国产午夜福利在线观看| 亚洲成色在线综合网站| 人妻激情一区二区三区四区| 艳妇乳肉豪妇荡乳xxx| 亚洲精品三区二区一区一| 日韩有码中文在线观看| 免费无码黄动漫在线观看| 国产午夜福利视频第三区| 伊人色综合久久天天小片| 1精品啪国产在线观看免费牛牛|