go語言實戰教程:Redis實戰專案應用

qfDavie發表於2019-04-18

上節內容講解了如何安裝Redis,如何使用Redis以及Redis的操作。本節內容,繼續來學習在真實的專案案例中,Redis的使用方法和操作步驟。

專案Redis配置

在實戰專案中使用Redis功能,首先需要進行Redis配置。本實戰專案中,關與Redis的配置項包含:連線型別地址公共字首。以上配置項被定義包含在Iris框架的redis包中的Config結構體中,Config定義如下:

type Config struct {
    // Network "tcp"
    Network string
    // Addr "127.0.0.1:6379"
    Addr string
    // Password string .If no password then no 'AUTH'. Default ""
    Password string
    // If Database is empty "" then no 'SELECT'. Default ""
    Database string
    // MaxIdle 0 no limit
    MaxIdle int
    // MaxActive 0 no limit
    MaxActive int
    // IdleTimeout  time.Duration(5) * time.Minute
    IdleTimeout time.Duration
    // Prefix "myprefix-for-this-website". Default ""
    Prefix string
}複製程式碼
  • Network: 連線型別。TCP

  • Addr: 即將連線的Redis服務主機IP。本實戰專案的Redis服務部署在本機,因此主機ip為127.0.0.1。Redis服務預設埠為6379。因此,Addr在本例項專案中的配置值為127.0.0.1:6379。

  • Password: 登陸Redis的密碼。預設配置為空。

  • Prefix:為要儲存的所有的內容設定公共的字首。預設設定為空。

  • IdleTimeout:設定Redis中的生效時長。這裡我們設定time.Duration(24) * time.Hour。在實際的開發過程中,開發者可以根據自己的需求設定Redis的生效時長。

Redis在配置檔案中的配置情況如下:

{
  "app_name": "CmsProject",
  "port": "8080",
  "static_path": "/manage/static",
  "database": {
    "drive": "mysql",
    "port": "3306",
    "user": "root",
    "pwd": "271400",
    "database": "qfCms"
  },
  "redis": {
    "network": "tcp",
    "addr": "127.0.0.1",
    "port": "6379",
    "prefix": ""
  },
  "mode": "dev"
}複製程式碼

Redis連線物件例項化

我們通過讀取配置檔案完成配置內容的讀取,利用Redis配置資訊例項化Redis物件,Redis例項化如下:

​
var once sync.Once
​
/**
 * 返回Redis例項
 */
func NewRedis() *redis.Database {
​
    var database *redis.Database
​
    once.Do(func() {
        //專案配置
        cmsConfig := config.InitConfig()
        rd := cmsConfig.Redis
        database = redis.New(service.Config{
            Network:     rd.NetWork,
            Addr:        rd.Addr + ":" + rd.Port,
            IdleTimeout: time.Duration(24) * time.Hour,
            Prefix:      rd.Prefix,
        })
    })
    
    return database
}
​複製程式碼

Redis的例項化使用到了單例方式實現。

將Session儲存方式設定為Redis

redis := datasource.NewRedis()
//設定session的同步位置為redis
sessManager.UseDatabase(redis)複製程式碼

實戰專案中Redis的操作與實現

  • Redis快取管理員統計功能

    adminStatis := sc.Session.Get(ADMINMODULE + date)
        if adminStatis != nil {
            adminStatis = adminStatis.(int64)
            return mvc.Response{
                Object: map[string]interface{}{
                    "status": utils.RECODE_OK,
                    "count":  adminStatis,
                },
            }
        } else {
            result = sc.Service.GetAdminDailyCount(date)
            sc.Session.Set(ADMINMODULE, result)
        }複製程式碼
  • Redis快取訂單統計功能

    orderStatis := sc.Session.Get(ORDERMODULE + date)
    ​
        if orderStatis != nil {
            orderStatis = orderStatis.(int64)
            return mvc.Response{
                Object: map[string]interface{}{
                    "status": utils.RECODE_OK,
                    "count":  orderStatis,
                },
            }
        } else {
            result = sc.Service.GetOrderDailyCount(date)
            sc.Session.Set(ORDERMODULE+date, result)
        }
    ​複製程式碼
  • Redis快取使用者統計功能

    userResult := sc.Session.Get(USERMODULE + date)
        if userResult != nil {
            result = userResult.(int64)
            return mvc.Response{
                Object: map[string]interface{}{
                    "status": utils.RECODE_OK,
                    "count":  userResult,
                },
            }
        } else {
            iris.New().Logger().Error(date) //時間
            result = sc.Service.GetUserDailyCount(date)
            //設定快取
            sc.Session.Set(USERMODULE+date, result)
        }複製程式碼

檢視Redis儲存效果

  • 開啟Redis服務 在Mac下,啟動redis服務使用如下命令:redis go語言實戰教程:Redis實戰專案應用

  • 開啟Redis-cli客戶端 在MacOS系統下,啟動redis-cli工具的命令:redis-cli go語言實戰教程:Redis實戰專案應用 如上我們可以通過keys命令來檢視我們儲存的所有的內容

  • get key讀取具體資訊 在查詢所對應的key的redis儲存內容值。



相關文章