Iris+Redis实战项目应用_知更鸟女孩的博客-CSDN博客_iris redis


本站和网页 https://blog.csdn.net/qq_38151401/article/details/105919604 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Iris+Redis实战项目应用_知更鸟女孩的博客-CSDN博客_iris redis
Iris+Redis实战项目应用
知更鸟女孩
于 2020-05-04 17:09:24 发布
1663
收藏
分类专栏:
golang
文章标签:
golang
go web
iris
redis
iris+redis
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38151401/article/details/105919604
版权
golang
专栏收录该内容
11 篇文章
4 订阅
订阅专栏
目录
一、项目结构
二、服务器配置
1、Redis在配置文件中的配置情况如下:config.json
2、读取配置文件初始化服务器配置:config.go
3、Redis连接对象实例化:redis.go
4、将Session存储方式设置为Redis:main.go
5、在Controller家口中使用redis:statis_controller.go
6、在main入口中注册:main.go
三、浏览器请求测试
四、过程踩坑
1、parse时间转换
2、iris版本
五、完整代码
1、config.json
2、config.go
3、engin.go
4、redis.go
5、statis_controller.go
6、statis_service.go
7、main.go
项目搭建过程参考:
Iris搭建一个完整的go web项目过程——管理员登录功能开发:https://blog.csdn.net/qq_38151401/article/details/105907576
一、项目结构
二、服务器配置
在实战项目中使用Redis功能,首先需要进行Redis配置。本实战项目中,关与Redis的配置项包含:连接类型、地址、端口、公共前缀。以上配置项被定义包含在Iris框架的redis包中的Config结构体中,主要包含如下内容:
Network: 连接类型。TCPAddr: 即将连接的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的配置
1、Redis在配置文件中的配置情况如下:config.json
2、读取配置文件初始化服务器配置:config.go
3、Redis连接对象实例化:redis.go
我们通过读取配置文件完成配置内容的读取,利用Redis配置信息实例化Redis对象,Redis实例化如下:
4、将Session存储方式设置为Redis:main.go
5、在Controller家口中使用redis:statis_controller.go
6、在main入口中注册:main.go
三、浏览器请求测试
命令行查看:
redis desktop manager查看:
四、过程踩坑
这个过程才了两个坑:
1、parse时间转换
在用Go语言对时间字符串进行parse的时候踩坑,Golang time error: month out of range
经过试验,“2016-12-25 00:00:00”这种格式是可以的,“2016-12-25“这种格式在试验的时候可以,然而在某些情况却会报错,比如说当parse”2018-01-28”的时候,就会报 “month out of range”.原因不清楚,需要继续看源码研究,所以以后parse的时候,使用time模块自带的那几种格式,和“2016-12-25 00:00:00”这种格式都是ok的, 如下。
date, err := time.Parse("2006-01-02 15:04:05", "2020-05-03 19:32:15")
而这样写:d, err := time.Parse("2006-01-02", "2020-05-03")有时候正确,有时候错误,很迷啊【month out of range】
2、iris版本
Iris+redis之版本踩坑,之前看的教程,引入redis的方法是:"github.com/kataras/iris/sessions/sessiondb/redis/service"
但是我试了的是V11和V12版本的iris,都不存在这个包!!!!坑人的地方在于,教程是2019件8月份之前的,可能使用的iris版本是V10之前的,之后已经没有service这个包了
可以看到v10的iris还是有这个包的,并且Config就定义config.go中;
而之后版本已经不存在service包了,Config直接定义在database.go中,并且具体的定义也有改动~~~
五、完整代码
1、config.json
"app_name": "CmsProject",
"port": "9000",
"static_path": "/manage/static",
"redis": {
"network": "tcp",
"addr": "106.15.202.182",
"port": "6379",
"prefix": ""
},
"mode": "dev"
2、config.go
/**
服务端配置
*/
type AppConfig struct {
AppName string `json:"app_name"`
Port string `json:"port"`
StaticPath string `json:"static_path"`
Mode string `json:"mode"`
Redis Redis `json:"redis"`
/**
* Redis 配置
*/
type Redis struct {
NetWork string `json:"net_work"`
Addr string `json:"addr"`
Port string `json:"port"`
Password string `json:"password"`
Prefix string `json:"prefix"`
var ServConfig AppConfig
//初始化服务器配置
func InitConfig()*AppConfig {
file,err := os.Open("config.json")
if err != nil {
panic(err.Error())
decoder := json.NewDecoder(file)
conf := AppConfig{}
err = decoder.Decode(&conf)
if err != nil {
panic(err.Error())
return &conf
3、engin.go
import (
"QianfengCmsProject/models"
_ "github.com/go-sql-driver/mysql" //不能忘记导入
"github.com/go-xorm/xorm"
func NewMysqlEngine() *xorm.Engine {
engine, err := xorm.NewEngine("mysql", "root:123456@/iris?charset=utf8")
err = engine.Sync2(
/*new(models.Permission),*/
/*new(models.City),*/
new(models.Admin),
/*new(models.AdminPermission),
new(models.User),
new(models.UserOrder),*/
if err != nil {
panic(err.Error())
//设置显示sql语句
engine.ShowSQL(true)
engine.SetMaxOpenConns(10)
return engine
4、redis.go
import (
"QianfengCmsProject/config"
iris "github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/sessions/sessiondb/redis"
//返回redis实例
func NewRedis() *redis.Database{
var database *redis.Database
//项目配置
cmsConfig := config.InitConfig()
if cmsConfig !=nil{
iris.New().Logger().Info(" hello ")
rd := cmsConfig.Redis
iris.New().Logger().Info(rd)
database = redis.New(redis.Config{
Network: rd.NetWork,
Addr: rd.Addr + ":" + rd.Port,
Password: rd.Password,
Database: "",
MaxActive: 10,
Timeout: redis.DefaultRedisTimeout,
Prefix: rd.Prefix,
})
}else {
iris.New().Logger().Info(" hello error ")
return database
5、statis_controller.go
type StatisController struct {
//iris框架自动为每个请求都绑定上下文对象:可作为接受参数
Ctx iris.Context
//admin功能实体:引入Service接口
Service service.StatisService
//session对象:存储session信息
Session *sessions.Session
var (
ADMINMODULE = "ADMIN_"
USERMODULE = "USER_"
ORDERMODULE = "ORDER_"
/* /statis/admin/2019-03-10/count*/
func (sc *StatisController) GetCount() mvc.Result {
path := sc.Ctx.Path()
var pathSlice []string
if path != "" {
pathSlice = strings.Split(path, "/")
//不符合请求格式
if len(pathSlice) != 5 {
return mvc.Response{
Object: map[string]interface{}{
"status": utils.RECODE_FAIL,
"count": 0,
},
//将最前面的去掉
pathSlice = pathSlice[1:]
model := pathSlice[1]
date := pathSlice[2]
var result int64
switch model {
case "user":
fmt.Println("GetCount--->user")
case "order":
fmt.Println("order--->user")
case "admin":
adminStatis := sc.Session.Get(ADMINMODULE + date)
if adminStatis != nil {
adminStatis = adminStatis.(float64)
return mvc.Response{
Object: map[string]interface{}{
"status": utils.RECODE_OK,
"count": adminStatis,
},
} else {
result = sc.Service.GetAdminDailyCount(date)
sc.Session.Set(ADMINMODULE, result)
return mvc.Response{
Object: map[string]interface{}{
"status": utils.RECODE_OK,
"count": result,
},
6、statis_service.go
//统计功能模块接口标准
type StatisService interface {
GetAdminDailyCount(date string) int64
//统计功能服务实现结构体
type statisService struct {
Engin *xorm.Engine
func NewStatisService(engin *xorm.Engine) StatisService {
return &statisService{
Engin: engin,
func (ss *statisService) GetAdminDailyCount(date string) int64 {
if date == "NaN-NaN-NaN" { //当日增长数据请求
date = time.Now().Format("2006-01-02")
//查询如期data格式解析
startDate, err := time.Parse("2006-01-02 15:04:05", date+" 00:00:00")
if err != nil {
return 0
endDate := startDate.AddDate(0, 0, 1)
result, err := ss.Engin.Where("create_time between ? and ? and status = 0",
startDate.Format("2006-01-02 15:04:05"),
endDate.Format("2006-01-02 15:04:05")).Count(models.Admin{})
if err != nil {
return 0
fmt.Println(result)
return result
7、main.go
func main() {
app := newApp()
//应用App设置
configation(app)
//路由设置
mvcHandle(app)
config := config.InitConfig()
addr := "localhost:" + config.Port
app.Run(
iris.Addr(addr), //在端口8080进行监听
iris.WithoutServerError(iris.ErrServerClosed), //无服务错误提示
iris.WithOptimizations, //对json数据序列化更快的配置
//构建App
func newApp() *iris.Application {
app := iris.New()
//设置日志级别 开发阶段为debug
app.Logger().SetLevel("debug")
//注册静态资源
app.HandleDir("/static", "./static")
app.HandleDir("/manage/static", "./static")
app.HandleDir("/img", "./static/img")
//注册视图文件
app.RegisterView(iris.HTML("./static", ".html"))
app.Get("/", func(context context.Context) {
context.View("index.html")
})
return app
/**
* 项目设置
*/
func configation(app *iris.Application) {
//配置 字符编码
app.Configure(iris.WithConfiguration(iris.Configuration{
Charset: "UTF-8",
}))
//错误配置
//未发现错误
app.OnErrorCode(iris.StatusNotFound, func(context context.Context) {
context.JSON(iris.Map{
"errmsg": iris.StatusNotFound,
"msg": " not found ",
"data": iris.Map{},
})
})
app.OnErrorCode(iris.StatusInternalServerError, func(context context.Context) {
context.JSON(iris.Map{
"errmsg": iris.StatusInternalServerError,
"msg": " interal error ",
"data": iris.Map{},
})
})
//MVC 架构模式处理
func mvcHandle(app *iris.Application) {
//启用session
sessManager := sessions.New(sessions.Config{
Cookie: "sessioncookie",
Expires: 24 * time.Hour,
})
//获取redis实例
redis := datasource.NewRedis()
//设置session的同步位置为redis
sessManager.UseDatabase(redis)
//实例化mysql数据库引擎
engine := datasource.NewMysqlEngine()
//管理员模块功能
adminService := service.NewAdminService(engine)
admin := mvc.New(app.Party("/admin")) //设置路由组
admin.Register(
adminService,
sessManager.Start,
//通过mvc的Handle方法进行控制器的指定
admin.Handle(new(controller.AdminController))
//统计功能模块
statisService := service.NewStatisService(engine)
statis := mvc.New(app.Party("/statis/{model}/{date}/"))
statis.Register(
statisService,
sessManager.Start,
statis.Handle(new(controller.StatisController))
知更鸟女孩
关注
关注
点赞
收藏
打赏
评论
Iris+Redis实战项目应用
目录一、项目结构二、服务器配置1、Redis在配置文件中的配置情况如下:config.json2、读取配置文件初始化服务器配置:config.go3、Redis连接对象实例化:redis.go4、将Session存储方式设置为Redis:main.go5、在Controller家口中使用redis:statis_controller.go三、浏览器请求测试四、过...
复制链接
扫一扫
专栏目录
Go实战--也许最快的Go语言Web框架kataras/iris初识三(Redis、leveldb、BoltDB)
一蓑烟雨任平生 也无风雨也无晴
10-25
1万+
生命不止,继续 go go go !!!之前介绍了iris框架,介绍了如何使用basic认证、Markdown、YAML、Json等:
Go实战–也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)介绍了如何使用TOML、Cache、Cookie等:
Go实战–也许最快的Go语言Web框架kataras/iris初识二(TOML、Cac
iris生成如何生成静态页面
01-07
接着上次教程记录下自己在寂寞狗上学习得过程经历,如何提高网站得性能之如何生成静态页面作者讲解得很好,一个是通过原生模板得方法生成静态页面这种方法感觉比较适合所有通用得模板方法,既然我们用iris框架那么我就想能不能通过iris已经写好得方法来实现呢?想了几次终于想到了先记录下也分享给大家:
// CreateHtml 生成静态页面
func CreateHtml(c iris.Context, tmp string, data interface{}) {
//检测是否已经生成
if CheckFileExits(tmp) {
if err := os.Remove(
评论 2
您还未登录,请先
登录
后发表或查看评论
Gin和Iris等Web框架及redis与go的连接使用
姚军
12-28
1133
参考链接
首先安装go
然后配置环境变量
Windows
修改环境变量和网络代理
前面两句相当于修改环境变量中的参数,然后才能下载。
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go get -u github.com/gin-gonic/gin
go get github.com/kataras/iri...
go iris+jwt-go +redis+mysql 实现账号登录功能(二)
boke的博客
01-10
455
一 go redis 的连接
移入redis模块,并重命名redigo。设置redis 连接池
import (
redigo "github.com/garyburd/redigo/redis"
var pool *redigo.Pool
// 设置redis 连接池
func init() {
redis_host := "xxx.xxx.xxx.xxx"
redis_port := 6379
pool_size := 20
pool = redigo.NewP
Iris搭建一个完整的go web项目过程——管理员登录功能开发
qq_38151401的博客
05-03
3367
目录
一、项目结构
二、数据库
1、管理员表:admin
三、服务器配置
1、配置端口等信息:config.json
2、读取配置文件并加载服务器配置:config.go
3、创建及配置数据库引擎:engine.go
四、后端
1、管理员结构体定义:admin.go
2、管理员控制器定义:admin_controller.go
3、管理员数据提供模块定义:admin_serv...
Iris 数据库与REDIS操作
JineD的博客
04-16
6315
配置文件
package conf
import (
"flag"
"gopkg.in/yaml.v2"
"io/ioutil"
"IRIS_WEB/utility/db"
var Conf *Config
// 初始化解析参数
var _path string
func init() {
flag.StringVar(&_path, "c", "./config.yaml", "default config path")
// 从配置文...
go iris+jwt-go +redis+mysql 实现账号登录功能(一)
boke的博客
01-02
717
go iris+redis+mysql 实现账号登录功能
设计思路:
1.postman 访问login 接口, 生成token 和refresh token 并设置各自的有效时间(token 15分钟、refresh 7天)
2. token 在后续的接口访问中需要携带,且用户每次访问接口后台都需要持续更新token 的时效。
3. refresh 过期后,不允许继续刷新对应token 的有效是时间。前端跳转到登录页面让用户重新登录。
一:go iris 的login 接口
go 环境的安装步骤,可以查看
iris 启动正常,访问Not Found
ckx178的博客
04-27
480
启动OK:
访问 Not Found:
修改代码中mvc参数设置,本应上传controller指针。
mvc.New(app.Party("/")).Handle(&lotteryController{})
即可。
go语言web开发框架学习:Iris框架讲解(一)
qfliweimin的博客
04-21
699
Golang介绍
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。
谷歌资深软件工程师罗布·派克(Rob Pike)表示,“Go让我体验到了从未有过的开发效率。”派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,“使用它可以进行快...
redis安装部署及redis配置文件详解
vwens的博客
05-17
304
redis安装部署及redis配置文件详解
go语言实战_go语言实战教程:Redis实战项目应用
weixin_39713686的博客
11-30
30
上节内容讲解了如何安装Redis,如何使用Redis以及Redis的操作。本节内容,继续来学习在真实的项目案例中,Redis的使用方法和操作步骤。项目Redis配置在实战项目中使用Redis功能,首先需要进行Redis配置。本实战项目中,关与Redis的配置项包含:连接类型、地址、端口、公共前缀。以上配置项被定义包含在Iris框架的redis包中的Config结构体中,Config定义如下:typ...
session保存到redis简单实现
热门推荐
ppt0501的专栏
06-30
3万+
在负载均衡情况下,如果用户访问不同的机器,如果没有做session同步,用户就会被提出,这样用户体验非常不好,所以我们很远必要做session同步,把session放到reids缓存服务器就能很好的解决问题。下面是代码简单的实现。
一、配置web.xml过滤器:
sessionFilter
org.springframework.web.filter.DelegatingFilter
go(iris),token+redis+mysql实现简单登录验证(目录结构和设计思路)
qq_26372385的博客
03-21
4846
前后半个月左右实现了基本的验证功能,从最初连request数据都不会接收,response不会返回数据,到后来将数据库配置信息分离,将连接l和关闭redis,mysq,函数分离成中间件,并一次又一次重构代码,降低逻辑复杂度,完善程序结构,go让我体验到了服务器代码的优美和严谨。
现在看来go的设计很优秀。从简单的接触larveral比较来看,go的中间件能极大简化接口的验证处理,函数多返回值和错...
IRIS 框架学习一
qq_40484416的博客
04-10
1109
IRIS 框架
1、介绍
用go语言开发web架构,速度最快的web框架。
Iris是一款Go语言中用来开发web应用的框架,该框架支持编写一并在任何地方以最小的机器功率运行,如Android、ios、Linux和Windows等。该框架只需要一个可执行的服务就可以在平台上运行了。
Iris框架以简单而强大的api而被开发者所熟悉。iris除了为开发者提供非常简单的访问方式外,还同样支持MVC。另...
iris-session梳理
water的博客
12-10
2276
入口api := iris.New()
api.Adapt(gm.NewSession())session的构造func NewSession() sessions.Sessions {
db := redis.New(rs.Config{Network: rs.DefaultRedisNetwork,
Addr: config.Instance().Redis.Address,
Password
Iris微服务框架_golang web框架_完整示例Demo
yinjl123456的博客
01-28
1710
Iris简介
Iris是一款Go语言中用来开发web应用的框架,该框架支持编写一次并在任何地方以最小的机器功率运行,如Android、ios、Linux和Windows等。该框架只需要一个可执行的服务就可以在平台上运行了。
Iris框架以简单而强大的api而被开发者所熟悉。iris除了为开发者提供非常简单的访问方式外,还同样支持MVC。另外,用iris构建微服务也很容易。
在iris框架的官方网站上,被称为速度最快的Go后端开发框架。在Iris的网站文档上,列出了该框架具备的一些特点和框架特性,列举如下:
Golang - [Iris] 关于数据库与REDIS操作
暗黑程序员
06-20
1904
配置文件
/**
* Top Secret!
* Created by Goland.
* User: yan.wang5
* Date: 2019/5/6
*/
package conf
import (
"flag"
"gopkg.in/yaml.v2"
"io/ioutil"
. "demo1/db"
var Conf *Config
// 初始化解析参数
var...
Redis项目应用场景与实例(三):队列(List)
我的博客
06-17
1717
文章目录一、背景二、项目需求三、环境配置四、项目代码4.1 Redis工具类增加队列操作方法4.2 图片上传服务增加Redis队列五、测试与验证六、源码
一、背景
在前两篇文章
《Redis项目应用场景与实例(一):哈希表(Hash)》
《Redis项目应用场景与实例(二):字符串(String)》
介绍了Redis对于Hash表、字符串的操作,该文将对队列(List)的应用场景进行项目演练。
strings
hashes
lists
sets
sorted sets
封锁一个IP地址
Redis详解及在项目中应用
最新发布
weixin_43816557的博客
08-16
934
本人目前写的所有文章都是基于springboot项目中可能用到的框架技术,如有需要,可在专栏中寻找。本文从简单介绍redis的基本操刀到在项目中redis的应用,再到缓存预热的介绍,最后介绍了创建更新缓存计划内容,由浅入深逐步剖析。...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:游动-白
设计师:我叫白小胖
返回首页
知更鸟女孩
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
139
原创
3万+
周排名
110万+
总排名
25万+
访问
等级
3602
积分
130
粉丝
164
获赞
77
评论
839
收藏
私信
关注
热门文章
彻底搞懂golang的GOROOT和GOPATH
30426
微信开发网页授权的两种方式(基于SpringBoot)
13945
layui框架与SSM前后台交互
12995
redis集群错误:Node 192.168.116.133:7001 is not empty. Either the node already knows other nodes or...
10399
微信开放平台扫码登录
10113
分类专栏
leetcode
9篇
ssm框架
3篇
斯坦福深度自然语言处理课
10篇
java面试题
5篇
hive
1篇
大数据
1篇
golang
11篇
druid
1篇
redis
3篇
elasticsearch
1篇
系统架构
面试
2篇
计算机网络
9篇
mysql
9篇
springcloud
10篇
springboot
14篇
拦截器
1篇
单点登录
1篇
java算法和数据结构
2篇
java后端开发
8篇
系统及软件安装配置
11篇
小知识总结
4篇
错误总结
9篇
前端
5篇
微信
5篇
图片上传
2篇
机器学习实战
4篇
python
1篇
NLP自然语言处理
12篇
最新评论
单点登录(基于注解方式的拦截器)
Bu_Qun:
如果是系统1登录成功,然后要去访问系统2,系统2拦截请求是否就是要去验证该用户是否登录一起token的有效性?
Iris+Redis实战项目应用
Cui_Vivian:
打开的config.json文件不用关闭么?
Hive时间转化&循环列出两个日期之间的所有日期
m0_69230653:
膜拜,大佬,怎么求分钟的呢
Flink任务资源设置
Joseph25:
你好,这个是在代码里还是配置文件里
彻底搞懂golang的GOROOT和GOPATH
THMAIL:
非常感谢你的文章,理得很清楚
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Leetcode-动态规划-玩游戏
Leetcode-动态规划-贪心算法
Leetcode动态规划-背包问题
2021年12篇
2020年59篇
2019年66篇
2018年10篇
目录
目录
分类专栏
leetcode
9篇
ssm框架
3篇
斯坦福深度自然语言处理课
10篇
java面试题
5篇
hive
1篇
大数据
1篇
golang
11篇
druid
1篇
redis
3篇
elasticsearch
1篇
系统架构
面试
2篇
计算机网络
9篇
mysql
9篇
springcloud
10篇
springboot
14篇
拦截器
1篇
单点登录
1篇
java算法和数据结构
2篇
java后端开发
8篇
系统及软件安装配置
11篇
小知识总结
4篇
错误总结
9篇
前端
5篇
微信
5篇
图片上传
2篇
机器学习实战
4篇
python
1篇
NLP自然语言处理
12篇
目录
评论 2
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
知更鸟女孩
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值