当前位置: 首页 > wzjs >正文

开源网站开发文档下载端州网站建设

开源网站开发文档下载,端州网站建设,wordpress注册中文名,科技苑探索 Redis 缓存对系统性能的提升——项目启动与操作指南 一、项目简介 Redis是一款高性能的键值存储数据库,以其出色的读写速度和丰富的数据结构著称,被广泛用作应用系统的缓存层。作为缓存,Redis通过将热点数据存储在内存中,显…

探索 Redis 缓存对系统性能的提升——项目启动与操作指南

一、项目简介

Redis是一款高性能的键值存储数据库,以其出色的读写速度和丰富的数据结构著称,被广泛用作应用系统的缓存层。作为缓存,Redis通过将热点数据存储在内存中,显著降低数据库负载,提升响应速度,尤其适用于高并发场景。它支持字符串、哈希、列表等多种数据类型,可灵活应对不同业务需求,并提供了过期机制、持久化选项及集群部署能力,确保数据可靠性与扩展性。结合LRU淘汰策略,Redis能自动管理内存,避免溢出。此外,其原子操作和发布订阅功能进一步扩展了缓存之外的实时数据处理场景。无论是会话缓存、页面缓存还是数据库查询加速,Redis都能通过毫秒级访问大幅优化系统性能,是现代化架构中不可或缺的缓存解决方案。

在这个项目中,我们将探索 Redis 缓存对系统性能的提升作用。项目使用 Gin 框架搭建后端服务,结合 MySQL 数据库和 Redis 缓存,同时提供了一个前端仪表盘用于监控系统状态和进行压力测试。

项目地址:https://gitee.com/mbjdot/go_redis
博客地址:https://blog.tmdog114514.icu

二、项目启动步骤
1. 环境准备

确保你已经安装了 DockerDocker Compose。如果还未安装,可以参考 Docker 官方文档 进行安装。

2. 启动项目
  • 打开终端,进入项目目录。

请添加图片描述

  • 执行以下命令启动项目:
docker-compose up -d --build

这个命令会构建项目所需的 Docker 镜像,并在后台启动 MySQL、Redis 和应用服务。--build 选项会确保重新构建镜像,以包含最新的代码更改。

3. 验证项目启动

等待一段时间后,打开浏览器访问 http://localhost:8080,如果看到“数据库与系统监控仪表盘”页面,说明项目已经成功启动。

请添加图片描述

三、核心代码描述
// 用户信息处理函数
func getUserHandler(c *gin.Context) {id := c.Param("id")// 记录开始时间用于计算性能start := time.Now()//优先从Redis获取user, err := getUserFromCache(id)if err == nil {// 缓存命中atomic.AddUint64(&redisHits, 1)c.JSON(http.StatusOK, user)return}// 缓存未命中atomic.AddUint64(&redisMisses, 1)// 查询数据库atomic.AddUint64(&dbQueryCount, 1)user, err = getUserFromDB(id)// 计算查询耗时,记录慢查询elapsed := time.Since(start)if elapsed > 100*time.Millisecond {atomic.AddUint64(&slowQueryCount, 1)log.Printf("慢查询警告: 获取用户ID=%s 耗时: %v", id, elapsed)}if err != nil {atomic.AddUint64(&dbErrorCount, 1)if err == sql.ErrNoRows {c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})return}c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}// 将结果写入Redis(异步)go setUserToCache(user)c.JSON(http.StatusOK, user)
}

该函数的主要功能是处理用户信息获取请求,优先从 Redis 缓存中获取用户信息,如果缓存未命中,则从数据库中查询,并将查询结果异步写入 Redis 缓存。同时,代码还会记录缓存命中、缓存未命中、数据库查询次数、慢查询次数和数据库错误次数等指标。

// 从数据库获取用户信息
func getUserFromDB(userID string) (*User, error) {query := `SELECT id, name, email FROM users WHERE id = ?`switch rand.Intn(100) {case 0: // 1%概率触发锁等待超时time.Sleep(1500 * time.Millisecond)return nil, &mysql.MySQLError{Number: 1205, Message: "Lock wait timeout"}case 1, 2: // 2%概率触发高负载延迟time.Sleep(time.Duration(300+rand.Intn(700)) * time.Millisecond) // 300-1000msdefault: // 正常情况base := 15 + rand.Intn(25) // 15-40ms基础延迟time.Sleep(time.Duration(base) * time.Millisecond)}start := time.Now()row := db.QueryRow(query, userID)var user Usererr := row.Scan(&user.ID, &user.Name, &user.Email)// 记录数据库操作耗时elapsed := time.Since(start)if elapsed > 100*time.Millisecond {log.Printf("MySQL慢查询: 获取用户ID=%s 耗时: %v", userID, elapsed)}if err != nil {if err != sql.ErrNoRows {log.Printf("数据库查询错误: %v", err)}return nil, err}return &user, nil
}

我模拟了查新数据库所带来的高负载延迟与触发锁等待超时

四、项目操作指南
1. 系统监控

打开浏览器访问 http://localhost:8080,你会看到系统监控仪表盘。仪表盘会显示 Redis 和 MySQL 的状态、缓存命中率、数据库连接数等信息。你可以通过选择不同的刷新间隔,或者点击“刷新数据”按钮来更新页面数据。

请添加图片描述

2. 压力测试

在仪表盘的“压力测试”部分,你可以进行压力测试。输入测试的持续时间、并发数和测试端点,然后点击“开始测试”按钮,系统会开始进行压力测试。在测试过程中,你可以点击“停止测试”按钮来停止测试。测试结束后,系统会显示测试结果,包括总请求数、成功请求数、平均响应时间等指标。

请添加图片描述

我们发现30s的测试每秒请求次数达到了16212次,性能非常强悍。

我们直接修改代码

// 用户信息处理函数
func getUserHandler(c *gin.Context) {id := c.Param("id")// 记录开始时间用于计算性能start := time.Now()优先从Redis获取//user, err := getUserFromCache(id)//if err == nil {//	// 缓存命中//	atomic.AddUint64(&redisHits, 1)//	c.JSON(http.StatusOK, user)//	return//}// 缓存未命中atomic.AddUint64(&redisMisses, 1)// 查询数据库atomic.AddUint64(&dbQueryCount, 1)user, err := getUserFromDB(id)// 计算查询耗时,记录慢查询elapsed := time.Since(start)if elapsed > 100*time.Millisecond {atomic.AddUint64(&slowQueryCount, 1)log.Printf("慢查询警告: 获取用户ID=%s 耗时: %v", id, elapsed)}if err != nil {atomic.AddUint64(&dbErrorCount, 1)if err == sql.ErrNoRows {c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})return}c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})return}// 将结果写入Redis(异步)//go setUserToCache(user)c.JSON(http.StatusOK, user)
}

注释掉redis相关逻辑

重新部署,先关闭卸载容器docker-compose down -v ,重新构建docker-compose up -d --build

进入仪表盘并测试

请添加图片描述

发现30s测试只能请求27407次,性能大幅降低

五、总结

通过启动和操作这个项目,我们可以直观地看到 Redis 缓存对系统性能的提升作用。在后续的博客中,我们将深入分析项目的代码,探讨 Redis 缓存的实现原理和优化策略。


文章转载自:

http://cOjCSHSn.bbyqz.cn
http://6emVCqi5.bbyqz.cn
http://11UmeEM5.bbyqz.cn
http://l6vq6jzv.bbyqz.cn
http://Kp1G23V2.bbyqz.cn
http://s4wCxHnR.bbyqz.cn
http://uUD7dF4s.bbyqz.cn
http://VfpgGmyC.bbyqz.cn
http://NH2YQVHm.bbyqz.cn
http://giebI7iI.bbyqz.cn
http://83CpUnF9.bbyqz.cn
http://EOwZAcVP.bbyqz.cn
http://UV60Wzf3.bbyqz.cn
http://rSyxyVEf.bbyqz.cn
http://bHrz7cRO.bbyqz.cn
http://vOiGZyk9.bbyqz.cn
http://42oUyHqP.bbyqz.cn
http://8EzgQdvn.bbyqz.cn
http://uSlgkeNo.bbyqz.cn
http://UBkpFlXa.bbyqz.cn
http://ERLH7ire.bbyqz.cn
http://I1MIH0rI.bbyqz.cn
http://Nwubdcuv.bbyqz.cn
http://H67r77LO.bbyqz.cn
http://FjtlLdYp.bbyqz.cn
http://JNbtJXbQ.bbyqz.cn
http://SDyEqa9o.bbyqz.cn
http://hqm5qEkr.bbyqz.cn
http://yns98bzs.bbyqz.cn
http://UE3kVqeN.bbyqz.cn
http://www.dtcms.com/wzjs/779029.html

相关文章:

  • 怎么做监测网站的浏览量营销推广策略有哪些
  • 一键建站哪家信誉好静海的做网站
  • 怎么用手机建网站微站设计
  • 怎么在百度上做公司网站网站建设公司968
  • 中信建设有限责任公司国内区事业部执行总经理廖鸿韬抖音seo招商
  • 网络推广工作内容网络培训seo
  • 维护网站信息山东感染地图
  • 设计师可以接单的网站响应式旅游网站模板下载
  • 设计网站用什么软件怎么推广网站建设业务
  • 做设计任务的网站北京建设工程公司
  • asp网站开发技术总结与收获社区电商网站设计
  • 广州专业建设网站传奇网页版在线玩
  • 10个零网站建设网站建设信息平台
  • 自己做的电影网站打开很慢哈尔滨市建设工程交易
  • 网站com域名上不去cn能常德农科院网站
  • WordPress国外打赏杨和关键词优化
  • 网站建设基本完成百度收录提交接口
  • 做招聘网站用哪个cms推广一手渠道
  • 宿州网站建设优化企业网站代运营
  • 上海网站搜索优化湖南网站设计企业
  • 焦作商城网站建设电商网站适合做响应式布局吗
  • 南平网站开发公司网站建设思路方案
  • 网站建设开发的规划流程网站建设工作总结6
  • wordpress本地网站打开慢seo网站推广怎么做
  • 学习html5的网站网站建设预算计算方法
  • 做购物网站的目的免费网址注册平台
  • 自己搭服务器 做购物网站成本不要域名做网站
  • 网站设计广州量计价格管理培训机构
  • 珠海网站建设费用注册城乡规划师考试时间
  • 采购网站官网用什么网站做框架图