go语言实战教程:Redis实战项目应用

上节内容讲解了如何安装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

开启Redis-cli客户端在MacOS系统下,启动redis-cli工具的命令:redis-cli如上我们可以通过keys命令来查看我们存储的所有的内容

get key读取具体信息在查询所对应的key的redis存储内容值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容