婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go應(yīng)該如何實現(xiàn)二級緩存

Go應(yīng)該如何實現(xiàn)二級緩存

熱門標(biāo)簽:揚州電銷外呼系統(tǒng)軟件 400手機電話免費辦理 武漢百應(yīng)人工智能電銷機器人 電腦外呼系統(tǒng)輻射大嗎 上海企業(yè)外呼系統(tǒng)排名 智能語音電銷的機器人 開通400電話申請流程 如何利用高德地圖標(biāo)注家 百度地圖標(biāo)注位置網(wǎng)站

一、需求

  • 實現(xiàn)二級緩存
  • 程序運行起來后提示:“請輸入命令:”,如果輸入getall,查詢并顯示所有人員的信息
  • 第一次時查詢mysql并將結(jié)果緩存在redis,設(shè)置60秒的過期時間
  • 以后的每次查詢,如果redis有數(shù)據(jù)就從redis加載,沒有則重復(fù)上一步的操作

二、實現(xiàn)連接Mysql并執(zhí)行查詢語句

先實現(xiàn)需求二,當(dāng)輸入命令getall時,查詢并顯示所有人員的信息。

package main
​
import (
    "fmt"
    _"github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
)
​
type Human struct {
    Name string `db:"name"`
    Age int `db:"age"`
}
func main() {
    var cmd string
    for{
        fmt.Println("請輸入命令:")
        fmt.Scan(cmd)
​
        switch cmd{
        case "getall":
            //顯示所有人的信息
            GetAllPeople()
        case "exit":
            //退出程序
            goto GAMEOVER
        default:
            fmt.Println("輸入的命令有誤,請重新輸入!")
        }
    }
    GAMEOVER:
    fmt.Println("GAME OVER")
​
}
​
func GetAllPeople()  {
    fmt.Println("allPeople")
    //先嘗試拿緩存
    GetPeopleFromRedis()
    db, _ := sqlx.Connect("mysql", "root:123456@tcp(localhost:3306)/mydb")
    defer db.Close()
​
    var people []Human
    err := db.Select(people, "select name,age from person")
    if err!=nil{
        fmt.Println("查詢失敗!err=",err)
    }
    fmt.Println(people)
    
    CachePeople2Redis(people)
}

第一步還是導(dǎo)包,需要在mysql驅(qū)動包前面加上下劃線_,因為它只是一個驅(qū)動文件,并不需要在代碼中調(diào)用它的有關(guān)API接口.
接下來的這個結(jié)構(gòu)體中后面的db:"name" db:"age"一定要加反單引號,否則運行時會報錯。(傻傻的編者剛開始這里就出現(xiàn)問題啦~)

type Human struct {
    Name string `db:"name"`
    Age int `db:"age"`
}

然后main函數(shù)里面都是一些基本語法知識,用了switch和goto這兩個內(nèi)容。
接下來就是連接數(shù)據(jù)庫了,這里要用到數(shù)據(jù)庫擴(kuò)展包Sqlx,Sqlx包其實最大最大的優(yōu)點是在查詢方面,也就是使用select時優(yōu)化得比較好。比原來的使用查詢方便了不止一點。

db, _ := sqlx.Connect("mysql", "root:123456@tcp(localhost:3306)/mydb")

driverName:mysql,表示驅(qū)動器的名稱是mysql也就上面"github.com/go-sql-driver/mysql"導(dǎo)入的驅(qū)動器。
dataSourceName是root:123456@tcp(localhost:3306)/mydb 它的含義是 賬戶名:密碼@tcp(ip:端口)/數(shù)據(jù)庫名稱。
將緩存查詢結(jié)果到Redis,就是通過這個函數(shù)CachePeople2Redis(people)。

三、寫一個錯誤處理函數(shù)

func HandleError(err error,why string)  {
    if err != nil{
        fmt.Println(err,why)
        os.Exit(1)
    }
}

因為后面需要處理很多錯誤,而錯誤處理也是GO的一個特性,所以我們這先寫一個錯誤處理函數(shù)。

四、設(shè)置二級緩存

func CachePeople2Redis(people []Human)  {
    conn, _ := redis.Dial("tcp", "localhost:6379")
    defer conn.Close()
    for _,human := range people{
        humanStr := fmt.Sprint(human)
        _, err := conn.Do("rpush", "people", humanStr)
        if err != nil{
            fmt.Println("緩存失敗(rpush people),err=",err)
            return
        }
    }
    _, err := conn.Do("expire", "people", 66)
    if err!=nil{
        HandleError(err,"@expire people 60")
    }
    fmt.Println("緩存成功!")
}

redis.Dial()這個函數(shù)是用來連接redis的,需要給定網(wǎng)絡(luò)協(xié)議和IP地址及端口號,redis的端口號默認(rèn)為6379.
defer conn.Close()表示延時結(jié)束與redis的連接,為了節(jié)省系統(tǒng)的io資源,需要及時關(guān)閉連接!剛?cè)腴T時我們很容易忘記這個,需要我們養(yǎng)成習(xí)慣!
conn.Do()是用來執(zhí)行數(shù)據(jù)庫命令的,第一個參數(shù)是命令名,后面的參數(shù)是數(shù)據(jù)庫命令的參數(shù)。它返回的結(jié)果中reply是字節(jié)數(shù)組[]byte類型,需要根據(jù)具體的業(yè)務(wù)類型進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。
這段代碼先將people數(shù)組中的每一個human放入到redis的people列表中。然后再執(zhí)行expire命令,將列表設(shè)置過期時間。
執(zhí)行成功!下面是運行結(jié)果:

請輸入命令:
getall
allPeople
[{大揚 21} {小飛 21} {大紅袍 1} {小芳 18}]
緩存成功!
請輸入命令:

然后去看看數(shù)據(jù)庫里面存進(jìn)去沒有。

127.0.0.1:6379> lrange people 0 -1
1) "{\xe5\xa4\xa7\xe6\x89\xac 21}"
2) "{\xe5\xb0\x8f\xe9\xa3\x9e 21}"
3) "{\xe5\xa4\xa7\xe7\xba\xa2\xe8\xa2\x8d 1}"
4) "{\xe5\xb0\x8f\xe8\x8a\xb3 18}"

過了一分鐘之后,再查看redis數(shù)據(jù)庫內(nèi)的數(shù)據(jù)。

127.0.0.1:6379> lrange people 0 -1
(empty list or set)

已經(jīng)消失了。

再寫一個函數(shù):

func GetPeopleFromRedis() (peopleStrs []string) {
    //連數(shù)據(jù)庫 
    conn, _ := redis.Dial("tcp", "localhost:6379")
    //延遲關(guān)閉
    defer conn.Close()
    //執(zhí)行命令
    reply, err := conn.Do("lrange", "people", 0, -1)
    //處理錯誤
    HandleError(err,"@lrange people 0 -1")
    //類型轉(zhuǎn)換
    peopleStrs, err = redis.Strings(reply, err)
    //打印結(jié)果
    fmt.Println("緩存拿取結(jié)果:",peopleStrs,err)
    return
}

如果redis里面有就不需要從mysql里面取數(shù)據(jù)了。直接從redis里面利用lrange命令來獲取people的所有值。

到此這篇關(guān)于Go應(yīng)該如何實現(xiàn)二級緩存的文章就介紹到這了,更多相關(guān)Go 二級緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Django如何實現(xiàn)內(nèi)容緩存示例詳解
  • redis之django-redis的簡單緩存使用
  • django緩存配置的幾種方法詳解
  • 詳解Django框架中的視圖級緩存
  • 詳解Django緩存處理中Vary頭部的使用
  • Django中提供的6種緩存方式詳解
  • react+django清除瀏覽器緩存的幾種方法小結(jié)
  • golang實現(xiàn)LRU緩存淘汰算法的示例代碼
  • Django頁面數(shù)據(jù)的緩存與使用的具體方法

標(biāo)簽:宜賓 新余 武漢 江西 張掖 延邊 黑龍江 嘉峪關(guān)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go應(yīng)該如何實現(xiàn)二級緩存》,本文關(guān)鍵詞  應(yīng)該,如何,實現(xiàn),二級,緩存,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go應(yīng)該如何實現(xiàn)二級緩存》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go應(yīng)該如何實現(xiàn)二級緩存的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久亚洲精华国产精华液 | 精品一区二区三区免费毛片爱| 国产精品理论在线观看| 国产精品久久久久影院亚瑟| 亚洲免费观看高清完整| 国产精品久久综合| 偷拍与自拍一区| 成人av综合在线| 欧美精品电影在线播放| 国产欧美日韩激情| 亚洲aⅴ怡春院| 国产成人亚洲综合a∨猫咪| 热久久免费视频| 福利一区二区在线观看| 色爱区综合激月婷婷| 国产成人丝袜美腿| 在线观看国产91| 久久久精品黄色| 欧美一区二区二区| 中文字幕制服丝袜一区二区三区| 亚洲综合视频在线| 国产成人免费视频网站| 欧美一级日韩一级| 日韩一区二区三区三四区视频在线观看| 国产亚洲精品久| 日本va欧美va精品发布| 国产+成+人+亚洲欧洲自线| 91香蕉视频在线| 亚洲国产成人精品视频| 欧美成人艳星乳罩| 99久久精品免费精品国产| 日韩在线a电影| 制服丝袜中文字幕一区| 丰满少妇久久久久久久| 日韩经典一区二区| 中文字幕一区在线观看视频| 欧美卡1卡2卡| 97久久超碰国产精品| 毛片av中文字幕一区二区| 日韩理论片一区二区| www激情久久| 欧美丰满嫩嫩电影| 91麻豆国产自产在线观看| 国产一区二区三区视频在线播放| 亚洲一区在线观看网站| 国产精品大尺度| 国产日产欧美一区二区视频| 3atv在线一区二区三区| 91极品视觉盛宴| 9i在线看片成人免费| 极品销魂美女一区二区三区| 午夜婷婷国产麻豆精品| 亚洲欧洲日韩一区二区三区| 久久久精品2019中文字幕之3| 91精品国产综合久久久蜜臀粉嫩 | 欧美日韩精品一区视频| 国产超碰在线一区| 极品瑜伽女神91| 极品美女销魂一区二区三区免费 | 欧美日韩在线不卡| 欧美日韩一级大片网址| 色婷婷久久久亚洲一区二区三区| 国产精品一区一区三区| 蜜臀av亚洲一区中文字幕| 热久久免费视频| 玖玖九九国产精品| 精品影视av免费| 久久国产麻豆精品| 久久精品国产一区二区三| 美国精品在线观看| 男女视频一区二区| 免费成人结看片| 韩国成人在线视频| 成人午夜电影小说| 91原创在线视频| 在线观看视频一区| 欧美日韩国产一级片| 在线播放/欧美激情| 日韩欧美你懂的| 国产午夜精品理论片a级大结局| 久久综合久久综合亚洲| 国产精品人成在线观看免费| 一区二区三区在线观看视频| 亚洲成av人片| 国内精品嫩模私拍在线| 97久久久精品综合88久久| 日韩欧美卡一卡二| 2023国产精华国产精品| 国产精品久久久久久福利一牛影视 | 91麻豆免费看片| 欧美性色欧美a在线播放| 欧美中文字幕亚洲一区二区va在线| 91美女视频网站| 欧美一级片免费看| 久久久久免费观看| 国产欧美一区二区精品婷婷| 亚洲综合网站在线观看| 免费在线观看精品| 国产乱妇无码大片在线观看| 91成人在线免费观看| 欧美成人精精品一区二区频| 中文字幕精品综合| 亚洲三级理论片| 日韩av电影免费观看高清完整版 | 精品亚洲成a人在线观看 | 韩国欧美国产1区| 成人丝袜18视频在线观看| 欧美人牲a欧美精品| 337p亚洲精品色噜噜噜| xvideos.蜜桃一区二区| 国产精品污污网站在线观看| 亚洲欧美日韩人成在线播放| 日本中文在线一区| 成人h动漫精品一区二区| 欧美一区二区三区视频免费| 国产欧美精品日韩区二区麻豆天美| 国产精品久久久久精k8| 性感美女久久精品| 成人av在线观| 日韩欧美亚洲一区二区| 亚洲人成7777| 韩国一区二区三区| 欧美日韩一区小说| 久久蜜桃av一区二区天堂| 亚洲v中文字幕| 风流少妇一区二区| 欧美日韩国产美女| 国产精品福利av| 久久精品国产成人一区二区三区| 成人av在线播放网站| 中文字幕欧美激情| 极品少妇xxxx精品少妇偷拍| 欧美在线综合视频| 国产欧美一区二区精品性| 五月婷婷欧美视频| 欧美亚洲国产一区二区三区| 亚洲欧美一区二区三区久本道91| 成人精品电影在线观看| 国产日韩欧美精品电影三级在线| 久久精品国产99国产精品| 日韩精品中文字幕一区| 久久精品av麻豆的观看方式| 欧美一区二区三区视频在线| 日韩精品福利网| 日韩免费一区二区| 国产美女视频一区| 国产日韩欧美a| 成人av资源在线| 日本一道高清亚洲日美韩| 亚洲成人黄色影院| 欧美日韩aaaaa| 首页亚洲欧美制服丝腿| 在线不卡的av| 日韩精品乱码免费| 欧美mv和日韩mv国产网站| 久久精工是国产品牌吗| 欧美一级欧美三级| 久久精品国内一区二区三区| 精品国产在天天线2019| 国内精品伊人久久久久av影院| 久久久久久久综合日本| 不卡av在线免费观看| 亚洲免费av网站| 欧美一区二区三区在线电影| 国内精品伊人久久久久影院对白| 久久久精品人体av艺术| 色偷偷成人一区二区三区91| 丝袜a∨在线一区二区三区不卡| 日韩欧美aaaaaa| 国产成人一区在线| 亚洲激情自拍偷拍| 日韩精品一区二区三区中文不卡| 国产专区欧美精品| 亚洲精品成人天堂一二三| 亚洲精品一区二区三区香蕉| 国产欧美日产一区| 欧美日韩国产影片| 丁香啪啪综合成人亚洲小说| 日本一区二区三区四区| 91在线国产观看| 一区二区三区在线视频免费| 亚洲精品一区二区三区在线观看| 欧美在线综合视频| 不卡大黄网站免费看| 日韩av中文字幕一区二区| 欧美国产成人在线| 亚洲女厕所小便bbb| 99精品欧美一区二区蜜桃免费 | 欧美在线视频日韩| 欧美日韩三级一区二区| 免费在线成人网| 亚洲天天做日日做天天谢日日欢| 精品国产一二三| 欧美性欧美巨大黑白大战| 国产精品亚洲а∨天堂免在线| 日一区二区三区| 亚洲尤物在线视频观看| 国产精品欧美精品| 久久久久国产精品人| 欧美乱妇23p|