Go语言社区 APP --问答模块数据存储流程及代码
时间:2022-05-04
本文章向大家介绍Go语言社区 APP --问答模块数据存储流程及代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
注:这个是我们社区APP的问答社区的 数据库保存及数据读取的流程; 流程如下: 保存流程====接到客户端数据保存到数据库--》内存数据库 获取流程====处理客户端请求--》读取内存数据库数据(此时已经和数据库没有关系了,在读取的数据的时候) // 保存数据库,和获取保存的数据库的ID ; 然后保存在内存数据库 数据库保存:
// 发表问答社区,保存到数据库
func PlayerAnswerDataSaveDBFun(iAuthorRoleUID int32, strAuthorName string, strAuthorIcon string, strAnswerContent string) bool {
var strSql string
var tmpAnswerInfo Global_Define.StAnswerInfo
// MySQL数据库语句
strSql = "INSERT INTO t_AnswerInfo(AuthorRoleUID,AuthorName,AuthorIcon,AnswerContent,InsertTime)" +
"VALUES( ?, ?, ?, ?, ?)"
stmt, err := GSeverdb.Prepare(strSql)
if err != nil {
Log_Eio.Log(err.Error())
Log_Eio.Fmt("11111", err.Error())
return false
}
//时间戳到具体显示的转化
iLastLoginTime := time.Now().Unix()
// 数据库写入执行 ,插入数据的操作。
res, err := stmt.Exec(iAuthorRoleUID, strAuthorName, strAuthorIcon, strAnswerContent, iLastLoginTime)
if err != nil {
Log_Eio.Log(err.Error())
Log_Eio.Fmt("11111", err.Error())
return false
}
// 获取帖子的ID
strSqlS := "select AnswerId from t_AnswerInfo where AuthorName = '" + strAuthorName + "' AND InsertTime = '" + strconv.Itoa(int(iLastLoginTime)) + "'"
Log_Eio.Log(strSqlS)
Log_Eio.Fmt(strSqlS)
Rows, err1 := GSeverdb.Query(strSqlS)
if err != nil {
Log_Eio.Log(err1.Error())
Log_Eio.Fmt(err1.Error())
return false
}
var TMPstrId int
defer Rows.Close()
for Rows.Next() {
err11 := Rows.Scan(&TMPstrId)
if err11 != nil {
Log_Eio.Fmt(err11)
}
}
// 日志的打印数据更新
Log_Eio.Fmt(res)
// 整合数据
tmpAnswerInfo.AuthorRoleUID = strconv.Itoa(int(iAuthorRoleUID))
tmpAnswerInfo.AuthorName = strAuthorName
tmpAnswerInfo.AuthorIcon = strAuthorIcon
tmpAnswerInfo.AnswerContent = strAnswerContent
tmpAnswerInfo.Instertime = strconv.Itoa(int(iLastLoginTime))
tmpAnswerInfo.Answerid = strconv.Itoa(int(TMPstrId))
// 更新到内存数据库
Redis_DB.Redis_Write_AnswerInfoData(strconv.Itoa(int(iLastLoginTime)), tmpAnswerInfo)
return true
}
保存内存数据库:
// 用户产生一条问答
// hkey : 为 问答产生的时间戳: Instertime
func Redis_Write_AnswerInfoData(strkey_Instertime string, stAnswerInfo Global_Define.StAnswerInfo) bool {
Log_Eio.Log("Entry Redis_Write_AnswerInfoData")
Log_Eio.Fmt("Entry Redis_Write_AnswerInfoData")
// 数据的存储
itimekey, _ := strconv.Atoi(stAnswerInfo.Instertime)
bytetmp, _ := json.Marshal(stAnswerInfo)
_, error := GRedis_Client.Zadd(AnswerInfoKey, float64(itimekey), bytetmp)
if error != nil {
Log_Eio.Fmt("GRedis_Client.Zadd: Set data ", error)
Log_Eio.Log("GRedis_Client.Zadd: Set data ", error.Error())
return false
}
return true
}
内存数据库获取数据:
// 获取问答社区帖子列表的内存的数据的信息
// strkeytime : 为是账单产生的时间
// 返回数值为,一个map数据,这个数据是多个数据的组合的操作,最多数据为也数据
func Redis_Read_AnswerListInfoData(strkeytime string) (AnswerInfo map[string]*Global_Define.StAnswerInfo) {
Log_Eio.Log("Entry Redis_Read_AnswerListInfoData")
Log_Eio.Fmt("Entry Redis_Read_AnswerListInfoData")
AnswerInfo = make(map[string]*Global_Define.StAnswerInfo)
ftmpData, _ := strconv.Atoi(strkeytime)
Log_Eio.Fmt("strconv.Atoi(strkeytime):", ftmpData)
// 获取内存数据库的数据
bytesMap, _ := GRedis_Client.Zrevrange(AnswerInfoKey, 0, -1)
Log_Eio.Fmt("GRedis_Client.Zrevrange return:", bytesMap)
// 这里就需要对比时间,数据的操作,主要的数据的
// 1 循环取到数据。
var vcount = 0
var AnswerInfotmp *Global_Define.StAnswerInfo
for member, score := range bytesMap {
AnswerInfotmp = new(Global_Define.StAnswerInfo)
// 如果时间戳大于或者等于member
if ftmpData >= member {
// 临时的 转换
json.Unmarshal(score, AnswerInfotmp) // score转换结构体
// 判断数据与自己有关不
vcount++
Log_Eio.Fmt("GRedis_Client.Zrevrange string(score)", string(score))
//test
//json转map
var r Requestbody
r.req = string(score)
if req2map, err := r.Json2map(); err == nil {
// s := fmt.Sprintf("a %s", "string")
// fmt.Println(s)
AuthorRoleUID := fmt.Sprintf("%s", req2map["AuthorRoleUID"])
AuthorName := fmt.Sprintf("%s", req2map["AuthorName"])
AuthorIcon := fmt.Sprintf("%s", req2map["AuthorIcon"])
AnswerContent := fmt.Sprintf("%s", req2map["AnswerContent"])
Instertime := fmt.Sprintf("%s", req2map["Instertime"])
Answerid := fmt.Sprintf("%s", req2map["Answerid"])
// 转换的
AnswerInfotmp.AuthorRoleUID = AuthorRoleUID
AnswerInfotmp.AuthorName = AuthorName
AnswerInfotmp.AuthorIcon = AuthorIcon
AnswerInfotmp.AnswerContent = AnswerContent
AnswerInfotmp.Instertime = Instertime
AnswerInfotmp.Answerid = Answerid
Log_Eio.Fmt("------------------------------------------------")
Log_Eio.Fmt("AnswerInfotmp.Answerid", AnswerInfotmp.Answerid)
Log_Eio.Fmt("------------------------------------------------")
Log_Eio.Fmt("GRedis_Client.Zrevrange AnswerInfotmp:", AnswerInfotmp)
} else {
Log_Eio.Fmt("GRedis_Client.Zrevrange AnswerInfo[vcount]:error")
}
AnswerInfo[strconv.Itoa(vcount)] = AnswerInfotmp
Log_Eio.Fmt("GRedis_Client.Zrevrange AnswerInfo[vcount]:", AnswerInfo[strconv.Itoa(vcount)])
}
// 退出循环,当达到20条数据的时候
if vcount >= 20 {
return AnswerInfo
}
}
return AnswerInfo
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-TabBarView篇
- 求求你不要在用!=null判空了
- Geant4--root和csv文件存储
- 爬虫模拟登录破解无原图滑动验证码
- Flutter基础widgets教程-TabBarView篇
- python + selenium 爬虫模拟登录破解无原图滑动验证码
- python 轻量级定时框架apscheduler,周中定时给自己发送邮件。
- python 舆情分析 nlp主题分析 (1) 待续
- Flutter基础widgets教程-Text篇
- python 舆情分析 nlp主题分析 (2)-结合snownlp与jieba库,提高分词与情感判断 待续
- No qualifying bean of type 'com.pjh.service.Imp.serviceImp' available和Exception in thread "main" jav
- python音频文件中pcm格式提取
- Spring系列之事务的控制 注解实现+xml实现+事务的隔离等级
- Leetcode刷题 237. 删除链表中的节点 两行代码实现
- python提取视频第一帧图片