# obtain_data **Repository Path**: wao520/obtain_data ## Basic Information - **Project Name**: obtain_data - **Description**: 使用go语言的gin框架开发项目 1.redis运行性能测试 2.bigcache运行性能测试 3.用go-redis+redsync实现分布式锁 其他:1.返回restful格式的数据,包括异常时的404/500等情况 2.使用校验器(validator)实现对参数的校验 3.用viper读取配置文件数据 4.集成zap和go-file-rotatelogs实现记录日志和日志切分 ... - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-11-14 - **Last Updated**: 2024-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 测试操作 ## 测试使用的软件 ```go 1.go go version go1.21.1 linux/amd64 2.mysql mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL) 3.redis redis_version:7.2.6 ``` ## 数据库操作 ```mysql # 新建数据库 create DATABASE obtain_data; use obtain_data; CREATE TABLE `article` ( `articleId` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `type` tinyint UNSIGNED NOT NULL DEFAULT '0' COMMENT '类型', `subject` varchar(500) NOT NULL DEFAULT '' COMMENT '标题', `addTime` datetime NOT NULL DEFAULT '2020-11-19 00:00:00' COMMENT '添加时间', `isHot` tinyint UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否热榜,0:非热,1,热', `url` varchar(500) NOT NULL DEFAULT '' COMMENT '链接地址', `domain` varchar(100) NOT NULL DEFAULT '' COMMENT '域', `userId` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT '推荐用户', `approvalStaffId` int UNSIGNED NOT NULL DEFAULT '0' COMMENT '批准员工', `digSum` int UNSIGNED NOT NULL DEFAULT '0' COMMENT '被顶的次数', `commentSum` int UNSIGNED NOT NULL DEFAULT '0' COMMENT '被评论的次数', `isPublish` tinyint NOT NULL DEFAULT '0' COMMENT '0,未发布,1,已发布', PRIMARY KEY (`articleId`), KEY `isPublish` (`isPublish`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='文章表'; INSERT INTO `article` (`articleId`, `type`, `subject`, `addTime`, `isHot`, `url`, `domain`, `userId`, `approvalStaffId`, `digSum`, `commentSum`, `isPublish`) VALUES (1, 0, '【最近,南非发现一座大油田】石油和天然气两种重要资源是南非储量的最短板,“贫油”的帽子也一直扣在南非的头上摘不下来。可就在最近,在南非海域进行油气勘探已久的道达尔透露了其新的勘探成果:在距离南非南部海岸约175公里的奥特尼夸盆地的11B/12B地区,再次发现了重要的凝析气,可能蕴藏着大量天然气及原油。', '2020-11-19 00:00:00', 1, 'https://mp.weixin.qq.com/s/1btbmouH-2KuIHUMoucq2w', '', 1, 1, 0, 0, 1), (2, 1, '让喵喵来开启周五的早晨吧!', '2020-11-19 00:00:00', 0, 'https://m.weibo.cn/status/4573112073720433?', 'm.weibo.cn', 0, 0, 0, 0, 1), (3, 0, '汤姆·赫兰德、黛茜·雷德利、麦斯·米科尔森、尼克·乔纳斯主演的《混沌漫步》公开预告。影片由《明日边缘》导演道格·里曼执导,暂时定档明年1月22日上映。', '2020-11-19 00:00:00', 1, 'http://news.mtime.com/2020/11/19/1604795.html', 'news.mtime.com', 0, 0, 0, 0, 1), (4, 1, '扫地机器人这个东西确实方便,大多数时候把房间扫的比较干净,但还有很多边边角角清扫不上,希望厂家能够在app上显示出机器人的路线图,明确告知哪些路段没有照顾到,要不然就再开发一个项目经理机器人,跟在扫地机器人屁股后面监督。//@大窑儿:可以弄个步数排行榜,让机器人们互相点赞,揣摩,攀比,内卷,无意义竞争。', '2020-11-19 00:00:00', 0, '', '', 0, 0, 0, 0, 1), (5, 0, '【世卫组织建议医生不要使用瑞德西韦治疗新冠】世卫组织指导小组表示,证据显示,瑞德西韦对提高新冠肺炎患者的存活率没有显著影响。这项建议发表在上周五的《英国医学杂志》中。', '2020-11-19 00:00:00', 0, 'https://www.thepaper.cn/newsDetail_forward_10067542', 'thepaper.cn', 0, 0, 0, 0, 1), (6, 0, '11月19日0—24时,31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例17例,均为境外输入病例(福建6例,上海4例,陕西3例,广东2例,北京1例,四川1例);无新增死亡病例;新增疑似病例1例,为本土病例(在天津)。', '2020-11-19 00:00:00', 0, 'http://m.news.cctv.com/2020/11/20/ARTIIR9o72TuDF80s6hY2IvD201120.shtml', 'm.news.cctv.com', 0, 0, 0, 0, 1); CREATE TABLE `novels` ( `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id', `title` varchar(300) NOT NULL DEFAULT '' COMMENT '标题', `author` varchar(100) NOT NULL DEFAULT '' COMMENT '作者', `genre` varchar(100) NOT NULL DEFAULT '' COMMENT '类型(如科幻、奇幻、言情等)', `description` varchar(600) NOT NULL DEFAULT '' COMMENT '简介', `publish_date` date NOT NULL DEFAULT '2020-11-19' COMMENT '发布日期', `status` enum('连载中','已完结') DEFAULT '连载中' NOT NULL COMMENT '小说的状态', PRIMARY KEY (`id`), KEY `author` (`author`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='小说数据表'; INSERT INTO `novels` (`title`, `author`, `genre`, `description`, `publish_date`, `status`) VALUES ('三体', '刘慈欣', '科幻', '一部硬科幻巨作,讲述了人类文明与外星文明的首次接触。', '2008-05-01', '已完结'); INSERT INTO `novels` (`title`, `author`, `genre`, `description`, `publish_date`, `status`) VALUES ('妙手回春', '铁沙', '都市青春', ' 从天武山上下山的神秘少年陈飞,进入滚滚红尘。一手神奇医术,妙手回春治百病;一身无敌武艺,回春妙手诛百恶。', '2018-05-01', '连载中'), ('我的1978小农庄', '名窑', '都市青春', '远离城市喧嚣的小山村开起了一个小农庄,这里有七八年十多块一瓶的茅台,有七八块的五粮液', '2019-05-01', '已完结'), ('庆余年', '猫腻', '历史军事', '《庆余年》是一部由猫腻(本名晓峰)所著的网络小说,首次发表于起点中文网。这部小说融合了历史、武侠、权谋、科幻等多种元素,构建了一个独特而丰富的世界观。', '2019-12-01', '已完结'), ('抗战之烽火燃血', '秃头小怪', '历史穿越', '共和国特种兵莫凡穿越到惨烈的罗甸争夺战,在血肉磨坊中与一个个鲜活的前辈军人一起浴血杀敌。感受山河破碎之悲痛,决意舍生忘死,救国保家。从淞沪会战开始,带领中华热血男儿,杀倭寇,复河山。中华之威不可犯,侵略者血债血偿!', '2023-12-01', '连载中'), ('执掌风云', '笔龙胆', '女生言情', '从东南席卷而起的时代风云中,深处基层的萧峥无意中抓住一个机会,经历了从潜龙在渊到辉煌腾达的人生历程。', '2023-3-01', '连载中'); CREATE TABLE `goods` ( `goodsId` int NOT NULL AUTO_INCREMENT COMMENT 'id', `goodsName` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '商品名称', `subject` varchar(200) NOT NULL DEFAULT '' COMMENT '标题', `price` decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '价格', `stock` int NOT NULL DEFAULT '0' COMMENT '库存数量', PRIMARY KEY (`goodsId`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品表'; INSERT INTO `goods` (`goodsId`, `goodsName`, `subject`, `price`, `stock`) VALUES (1, '蜂蜜牛奶手工皂', '深入滋养,肌肤细腻嫩滑', '60.00', 5), (2, '紫光筷子筒', '紫光智护,干爽防潮更健康', '169.00', 35), (3, '野性mini便携式蓝牙音箱', '强悍机能,品味豪迈', '399.00', 88), (4, '乐穿梭茶具', '茶具+茶叶精美端午礼盒', '188.00', 26); ``` ## 增加配置文件 ```go # 将/config/config.yaml.bak 复制一份,并命名为config.yaml 配置根据自己的电脑来定 ``` ## 运行项目测试 ```bash $ go run main.go ``` ### 1.redis运行性能测试 ```go 测试网址:http://127.0.0.1:8000/article/getone/5 -- 读数据 多刷新几次,可以看到响应时间变化 当直接访问redis时,响应时间提升了6倍左右 ``` ### 2.bigcache运行性能测试 ```go 测试网址:http://127.0.0.1:8000/novels/getone/3 -- 读数据 多刷新几次,可以看到响应时间变化 当直接访问bigcache时,响应时间提升了10倍以上 ``` ### 3.用go-redis+redsync实现分布式锁 ```go 测试网址:http://127.0.0.1:8000/goods/lockbuyone 使用软件ab测试 $ ab -c 100 -n 100 http://127.0.0.1:8000/goods/lockbuyone -- 并发写数据 对数据库商品进行写操作时,需要对其进行上锁,写操作完成后对其解锁,确保数据不出错。 ``` ### 4.其他技术介绍 ```go 1.返回restful格式的数据,包括异常时的404/500等情况 2.使用校验器(validator)实现对参数的校验 3.用viper读取配置文件数据 4.集成zap和go-file-rotatelogs实现记录日志和日志切分 5.统一定义API错误码 ```