golang游戏服务器 - tgf系列课程07

数据管理

使用数据管理工具,对玩家数据进行自动化的缓存管理.

需求描述

用户登录成功之后,我们需要根据用户的账号,创建用户的数据,并且将数据存放到mysql和redis中.之后我们通过接口,修改玩家的昵称,然后重新登录.观察数据是否准确

准备工作

在开始服务器的代码编程之前,我们需要先创建对应的mysql表.我们需要用到账号,密码,用户id,昵称,还有统一的state数据状态字段(用于标记数据是否被删除)

代码

展示了所需代码和操作
Mysql
使用 accountpassword做为联合主键, user_id记录玩家id(除首字母外,遇到大写字母加下划线,所有字母都使用小写)
结构类
与mysql对应,字段需要大写,实现 db.IModel接口
type UserAccount struct {db.Model //内置State字段,标识用户删除状态Account  string `orm:"pk"` //tag标记该字段为主键Password string `orm:"pk"`UserId   string
}
func (u *UserAccount) GetTableName() string {return "t_account"
}
数据管理
创建初始化数据管理
type Manager struct {//申明一个key为string类型,值为UserAccount的数据管理accountCache db.IAutoCacheService[string, *entity.UserAccount]
}
func (m *Manager) InitStruct() {//初始化一个带持久化缓存的数据管理实例,其中redis的主key为 account//假如,redis的key设计为"account:admin" 那么这里传入accountm.accountCache = db.NewLongevityAutoCacheManager[string, *entity.UserAccount]("account")
}
逻辑修改
使用数据管理操作
m.accountCache.Get("admin") //这里可以获取到前面定义的泛型数据, 不需要再进行数据类型转换
m.accountCache.Set(account, "admin") //这里的account为数据实例,admin为唯一key//一般在创建数据的时候使用
m.accountCache.Push("admin") //这个函数是对数据进行持久化操作,//会立即执行redis缓存,并且改变数据的状态,//异步存储到mysql,一般在数据有变动的时候使用

总结

总体来说,数据管理的使用十分简单. 只需要构建数据结构,遵循结构规范,之后实例化管理工具,
就可以直接使用了.除了提供持久化结构数据以外,我们还提供自定义缓存机制的管理器,
也就是说,所有的数据都可以使用这个工具管理他们的本地缓存和生命周期.
后续也会根据需求,不断的拓展和优化.

tgf系列基础课程到这里就结束了. 后续大家可以关注我的b站信息. 不定期的直播slg游戏开发.
有任何使用的问题和疑惑建议,都可以在github上提issues,或者加入qq群联系我.

开源不易,共同努力.

交流群

QQ群:7400585

视频教程

golang游戏服务器 - tgf系列课程07
B站教程合集

项目地址

Github项目地址
Gitee项目地址
项目案例
项目文档
知乎博客
CSDN专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux cp命令教程:如何复制文件和目录(附案例详解和注意事项)

Linux cp命令介绍 cp命令在Linux中用于复制文件或目录。它的全称是copy,意为复制。使用cp命令,你可以将文件或目录从一个位置复制到另一个位置。 Linux cp命令适用的Linux版本 cp命令在所有主流的Linux发行版中都是可用的,包括但不限于Ubu…

绩效面谈为什么失败?

绩效面谈是整个绩效管理过程中的核心环节,是绩效反馈环节的重要手段之一。绩效面谈工作的成功与否直接关系到绩效管理体系能否良性运行,绩效改善的目标能否真正实现。对于许多已经导入绩效管理理念,并初步建立起绩效管理体系的企业来说&#…

pip install默认安装路径

pip install默认安装路径 当使用pip工具安装Python包时,默认情况下,包会被安装到Python的site-packages目录中。这个目录的路径取决于你的操作系统和Python的安装方式。 在Windows操作系统上,pip默认安装路径通常是C:\PythonXX\Lib\site-…

express 下搞一个 websocket 长连接

安装模块 npm i express npm i express-ws 新建文件app.js 先安排源码 监听端口 7777 var express require(express) var app express() require(express-ws)(app)var port 7777 var clientObject {} app.ws(/, (client, req) > {// 连接var key req.socket.re…

预测性维护对制造企业设备管理的作用

制造企业设备管理和维护对于生产效率和成本控制至关重要。然而,传统的维护方法往往无法准确预测设备故障,导致生产中断和高额维修费用。为了应对这一挑战,越来越多的制造企业开始采用预测性维护技术。 预测性维护是通过传感器数据、机器学习和…

计算机网络——习题——书上原题

目录 第一章 1. 填空题 第二章 1. 填空题 第三章 1. 填空题 2.选择题 第四章 1. 填空题 第五章 第六章 1. 填空题 第一章 1. 填空题 (1)计算机网络的主要功能包括 资源共享、数据通信、分布式处理、提高计算机的可靠性和集中管理 。 &…

上海亚商投顾:沪指再度失守3000点 北向资金净卖出近百亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日集体调整,尾盘均跌超1%,北证50则逆势拉升涨超3%。医药股逆势走强&#xf…

Node.js模块化的基本概念和分类及使用方法

1.模块概念 模块:指解决一个复杂问题的时候,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来讲,模块是可以组合、分解和更换的单元。 在编辑领域中的模块,就是遵守固定的规则,把一个大文件拆成独立并且相互…

devops相关面试题

1、发布10 NPM包,熟悉NRM、NVM。 1、谈谈你参与发布的NPM包,它们解决了什么问题,有什么特点? NPM: 是 Node.js 默认的包管理工具 NRM:是 Node.js 源管理工具 NVM:Node.js 版本管理工具 我参与发布的NPM包为mk-form,它通过配置生成和验证复杂表单,简化…

网络编程及相关概念

网络 概念:两台或多台设备通过一定物理设备连接起来构成了网络 根据网络的覆盖范围不同,对网络进行分类: 局域网:覆盖范围最小,仅仅覆盖一片小区域。 城域网:覆盖范围较大,可以覆盖一个城市。…

打印机怎么扫描文件到电脑?6个步骤!轻松完成!

“在工作时我经常需要用到打印机,有时候需要将部分文件扫描到电脑。但是我不是很清楚应该如何操作,有什么方法可以让打印机快速传输文件到电脑的方法吗?” 在人们的工作和学习中,打印机成了很多用户的必备工具。人们可以用它来打印…

C++中的接口有什么用

2023年12月13日,周三上午 今天上午在适配器模式,我发现如果想真正理解适配器模式,就必须学会使用C中的接口,就必须明白为什么要在C中使用接口,所以重新学习了一下C中的接口 目录 C中的接口有什么用用代码说明“实现多…

python注释规范

Python 中的函数注释通常使用文档字符串(docstring)来提供对函数的说明。文档字符串是放置在函数、模块或类的顶部的字符串,用于描述其功能、输入参数、返回值以及其他相关信息。以下是一些建议的 Python 函数注释规范: 使用三重…

本地搭建Linux DataEase数据可视化分析工具并实现公网访问

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务…

软件测试面试中基础与功能的问题

一、 你们的测试流程是怎么样的? 答:1.项目开始阶段, BA (需求分析师) 从用户方收集需求并将需求转化为规格说明书,接 下来在 项目组领导 会组织需求评审。 2.需求评审通过后,BA 会组织 项目…

React中类组件和函数组件的区别?

面试官:说说对React中类组件和函数组件的理解?有什么区别? 一、类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数&#…

剑指 Offer(第2版)面试题 28:对称的二叉树

剑指 Offer(第2版)面试题 28:对称的二叉树 剑指 Offer(第2版)面试题 28:对称的二叉树解法1:递归解法2:镜像二叉树 前序遍历 剑指 Offer(第2版)面试题 28&…

kernel(三):kernel移植

本文主要探讨210官方kernel移植。 配置文件选择 选择配置文件smdkv210_android_defconfig(arch/arm/configs) 修改主Makefile 配置cpu架构和交叉编译工具链 vim MakefileARCH ? armCROSS_COMPILE ? /root/arm-2009q3/bin/arm-none-linux-gnueabi- 初步编译烧…

使用对象处理流ObjectOutputStream读写文件

注意事项: 1.创建的对象必须实现序列化接口,如果属性也是类,那么对应的类也要序列化 2.读写文件路径问题 3.演示一个例子 (1)操作的实体类FileModel,实体类中有Map,HashMap这些自带的本身就实现了序列化。 public class File…

Gradio: 实时性能反馈的机器学习演示工具 | 开源日报 No.107

comfyanonymous/ComfyUI Stars: 17.5k License: GPL-3.0 这个项目是 ComfyUI,它提供了一个图形化界面和后端来设计和执行复杂的稳定扩散工作流程。 节点/图表/流程图接口用于实验并创建复杂的稳定扩散工作全面支持不同版本的 Stable Diffusion异步队列系统部分更新…