商城系统优化

news2025/1/20 14:56:13

1、DB、模板的渲染速度(thymeleaf)、静态资源、日志、JVM

数据库的优化(参照数据库优化课程)使用索引,减少数据库的交互次数、缓存

thymeleaf使用缓存

静态资源:放到nginx中,实现动静分离

2、上面三个中,主要是使用合理的数据库查询语句,减少数据库查询次数,然后使用缓存

3、使用缓存,出现堆外内存溢出:OutOfDirectMemoryError

(1)SpringBoot2.0以后默认使用lettuce作为操作redis的客户端,它使用netty进行网络通信。

(2)lettuce的bug导致netty堆外内存溢出 -Xmx300m;netty如果没有指定堆外内存,默认使用-Xmx300m

(3)解决方案:不能使用-Dio.netty.maxDirectMemory只能调大堆外内存。

 第一种升级lettuce客户端,第二种切换使用jedis

5、三种分类优化进程

原来吞吐量为2/s, 使用索引、关日志、缓存渲染变为8,优化业务减少数据库查询次数变为111,使用缓存变为411

缓存问题及解决方案

缓存穿透:就是查到空值,也进行缓存,第二种就是使用布隆过滤器

缓存击穿:提前初始化数据,第二种,给数据加锁

缓存雪崩:设计随机的过期时间、二级缓存等

6、给数据加锁解决缓存击穿问题,给查询数据库的语句里面的代码块加锁,进去后再判断一下缓存里面有没有存在,然后就查询,查到后放入缓存中。

7、再微服务项目中,上面的锁方法只能锁住一个单体的,分布式需要使用分布式锁

redis中的setnx

问题:

但是,如果进入判断后,还没执行到过期时间语句就断电,那也会死锁,所以应该使用

但是如果执行业务时间过长,锁被自动删了,等业务执行完了,删除的锁可能是别的业务获取到锁后执行的,所以,还要加个判断

但还是可能会出现问题,因为需要跟redis通信,你获取到redis中的值后,执行判断后,如果恰好别的线程获取到了锁,还是会错删别人的锁(所以查询锁和判断锁应该是原子操作)

可以通过lua脚本解决删除

8、使用redission做分布式锁(getLock(),还有读写锁getReadWrite、信号量getSemaphore、闭锁getCountDownLatch())

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

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

相关文章

【数学】ABC 319 E

E - Bus Stops 题意: 思路: 感觉思路比较简单 首先注意到每个询问的范围是1e9,不难想到答案一定存在某个循环节,最后一定是要 %T的 那么问题就在于找到这个循环节是什么 猜想循环节为lcm(p1, p2, p3, ....) 用小数据验证 n…

一篇博客教会您SpringMVC文件上传、下载,多文件上传及工具jrebel的使用

目录 一.文件上传 二.文件下载 三.多文件上传 四,jrebel的介绍 前言: 我们之前已经实现了SpringMVC的增删改查,今天这一篇博客教会您SpringMVC文件上传、下载,多文件上传及工具jrebel的使用,希望这篇博客能够给正在…

二、Spark 调度系统

目录 Spark 调度系统DAGSchedulerSchedulerBackendTaskSchedulerExecutorBackendSpark 任务调度流程 Spark 调度系统 分布式计算的精髓,在于如何把抽象的计算图,转化为实实在在的分布式计算任务,然后以并行计算的方式交付执行。 Spark调度系…

Mojo安装使用初体验

一个声称比python块68000倍的语言 蹭个热度,安装试试 系统配置要求: 不支持Windows系统 配置要求: 系统:Ubuntu 20.04/22.04 LTSCPU:x86-64 CPU (with SSE4.2 or newer)内存:8 GiB memoryPython 3.8 - 3.10g or cla…

华为云云耀云服务器L实例评测 | 分分钟完成打地鼠小游戏部署

前言 在上篇文章【华为云云耀云服务器L实例评测 | 快速部署MySQL使用指南】中,我们已经用【华为云云耀云服务器L实例】在命令行窗口内完成了MySQL的部署并简单使用。但是后台有小伙伴跟我留言说,能不能用【华为云云耀云服务器L实例】来实现个简单的小游…

车载诊断数据库——诊断问卷调查表与CDD关联关系

车载诊断数据库——诊断问卷调查表与CDD关联关系 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生…

超级电容-电池-超级电容混合储能系统能量管理simulink仿真建模模型

建立混合储能系统模型 在Simulink中,首先需要建立一个超级电容和蓄电池并联的混合储能系统模型。其中,超级电容和蓄电池的荷电状态(SOC)需要根据实际情况进行管理。荷电状态可以通过对电池和超级电容的电压、电流等进行测量&…

说透 Nacos 一致性协议

1 Nacos ⼀致性协议 1.1 为什么 Nacos 需要⼀致性协议 Nacos尽可能减少用户部署以及运维成本,做到用户只需要⼀个程序包,就快速单机模式启动 Nacos 或集群模式启动 Nacos。而 Nacos 是⼀个需要存储数据的组件,为实现目标,就要在…

透视俄乌网络战之二:Conti勒索软件集团(上)

透视俄乌网络战之一:数据擦除软件 Conti勒索软件集团(上) 1. Conti简介2. 组织架构3. 核心成员4. 招募途径5. 工作薪酬6. 未来计划参考 1. Conti简介 Conti于2019年首次被发现,现已成为网络世界中最危险的勒索软件之一&#xff0…

汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、

汇川PLC学习Day3:轴控代码编写、用户程序结构说明、任务配置示例 一、新建轴与轴控代码编写 1. 新建轴 (1)新建一个轴 (2)将轴名字更新为实际名字 可以后面实例化后再更改,汇川可以在更新名字时同步更新其他编写的代码名字&a…

GStreamer时钟同步

播放复杂媒体时,每个audio和video sample必须在特定时间按特定顺序播放。为此,GStreamer提供了一种同步机制,通过使用 GstClock object、buffer timestamps和SEGMENT event来实现: (1)GstClock:…

Java中如何获取一个字符串是什么类型

Java中如何获取一个字符串是什么类型? 在Java中,您可以使用一些方法来确定一个字符串的类型。下面是一些常用的方法: 使用正则表达式:您可以使用正则表达式来匹配字符串是否符合特定的模式或格式,以确定其类型。例如&…

【Linux入门指北】Linux磁盘扩容

文章目录 1、给 / 分区扩容 Linux在使用过程中由于数据量不断增大,导致磁盘空间不足,需要增加磁盘空间,主要有以下三种方式: 直接给 / 分区(或者某一分区)扩容,直接在原有磁盘上增大空间给虚拟机新增一块磁…

typeScript 学习笔记(二)

类接口 TypeScript 入门教程 (xcatliu.com) 十四.类 ① 类 类:定义了一件事物的抽象特点,包含它的属性和方法对象:类的实例,通过new生成面向对象(OOP)的三大特性:封装、继承、多态封装&…

C++学习笔记(重载、类)

C 1、函数重载2、类2.1、类的方法和属性2.2、类的方法的定义2.3、构造器和析构器2.4、基类与子类2.5、类的public、protected、private继承2.6、类的方法的重载2.7、子类方法的覆盖2.8、继承中的构造函数和析构函数 1、函数重载 函数重载大概可以理解为,定义两个名…

Rethink LSTMGRU

LSTM 设计思想 姑且不看偏置。 W W W 和 U U U 是加权的矩阵,写模型的时候用 nn.Linear(in_dim, out_dim) 就成; σ \sigma σ 是 Sigmoid 函数 第一条,遗忘门,定义为 有多少内容需要被遗忘;第二条:输入门…

ES8生产实践——pod日志采集(Fluentd方案)

Fluentd介绍 Fluentd是一个是一个开源的日志收集和传输工具,旨在解决日志数据的收集、传输和处理问题,它可以收集来自于各种系统或应用的日志,转化为用户指定的格式后,转发到用户所指定的日志存储系统之中。 用图来说明问题的话&…

【安装mysql(基础安装+主从复制)】

由于我的 centos 版本是 aarch64 版本 安装链接: 1、aarch64 版本 linux 系统安装 mysql 2、安装完成之后是不能用 navicat 进行直接访问的,需要如下设置: mysql -uroot -proot(明文登陆,记得 -uroot 和 -proot之间…

Redis 基础总结

1、NoSQL概述 1.1 数据库分类 目前数据库分:关系型数据库与非关系型数据库 常用的关系型数据库: Oracle,MySQL,SqlServer,DB2 常用的非关系数据库:Redis,MongoDB,ElasticSearch&…