好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Go應該如何實現二級緩存

Go應該如何實現二級緩存

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

一、需求

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

二、實現連接Mysql并執行查詢語句

先實現需求二,當輸入命令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)
}

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

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

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

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

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

三、寫一個錯誤處理函數

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

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

四、設置二級緩存

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()這個函數是用來連接redis的,需要給定網絡協議和IP地址及端口號,redis的端口號默認為6379.
defer conn.Close()表示延時結束與redis的連接,為了節省系統的io資源,需要及時關閉連接!剛入門時我們很容易忘記這個,需要我們養成習慣!
conn.Do()是用來執行數據庫命令的,第一個參數是命令名,后面的參數是數據庫命令的參數。它返回的結果中reply是字節數組[]byte類型,需要根據具體的業務類型進行數據類型轉換。
這段代碼先將people數組中的每一個human放入到redis的people列表中。然后再執行expire命令,將列表設置過期時間。
執行成功!下面是運行結果:

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

然后去看看數據庫里面存進去沒有。

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數據庫內的數據。

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

已經消失了。

再寫一個函數:

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

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

到此這篇關于Go應該如何實現二級緩存的文章就介紹到這了,更多相關Go 二級緩存內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

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

標簽:宜賓 新余 武漢 江西 張掖 延邊 黑龍江 嘉峪關

巨人網絡通訊聲明:本文標題《Go應該如何實現二級緩存》,本文關鍵詞  應該,如何,實現,二級,緩存,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go應該如何實現二級緩存》相關的同類信息!
  • 本頁收集關于Go應該如何實現二級緩存的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美日韩理论| 一级毛片aaaaaa视频免费看| 亚洲熟妇无码乱子AV电影| 变态调教催乳警花全文| 成人国产色情无码视频网站代码| 亚洲国产网曝黑料在线| 国产普通话对白视频二区| 人妻秘书汗と接吻に満水户香奈 | 光棍天堂在线a| 一级片哪里看| 我要看黄色片子| 第一章小雪初尝云雨H文男男| 放荡潮湿的小内裤法国| 国产一区二区在线视频| 快穿禁忌hh…嗯啊| 欧美精品久久一级毛片A片爱妃记| 美女被男人狂躁免费视频| 女同吸对方奶水挤奶| 最近最好看的中文字幕1| 久久精品亚洲欧美日韩精品中文字幕 | 幸福宝网页免费进入站长统计 | www.日本在线播放| 掰开逼| 男女又爽?又黄?免费软件| 女同学被?到爽??流片| 免费va欧美在线观看| 欧美日韩国产一区二区三区播放 | GIFSGIFgifsexgifs| 久久777国产线看是看精品| 乖女又小又嫩又紧小说| 放荡的小峓子2中文字幕| 印度性猛交XXXX免费看| 伊人久久大香线蕉综合影| 人与禽videos欧美| 情欲h液忍耐| 欧美精品无播放器在线播放| 亚洲AV无码区国产乱码99| 男生和女生一起差差软件| 亚洲精品一| 免费人成激情视频| 美国色情巜做爰狂欲 在线观看 |