秒杀优化 之前的优惠券秒杀业务是存在并发访问下的性能瓶颈的,这是因为其完整过程都是顺序执行的: 并且扣减库存和创建订单的步骤都是数据库写操作,比较耗费时间。 可以用 JMeter 的测试脚本对其进行压力测试以说明性能问题。 模拟并发请求 编写一个测试用例来模拟1000个用户登录: /** * 模拟多个用户登录 */ @Test public void testMultiUsersLogin() throws IOException { // 清理已经登录的用户 Set<String…
秒杀优化 之前的优惠券秒杀业务是存在并发访问下的性能瓶颈的,这是因为其完整过程都是顺序执行的: 并且扣减库存和创建订单的步骤都是数据库写操作,比较耗费时间。 可以用 JMeter 的测试脚本对其进行压力测试以说明性能问题。 模拟并发请求 编写一个测试用例来模拟1000个用户登录: /** * 模拟多个用户登录 */ @Test public void testMultiUsersLogin() throws IOException { // 清理已经登录的用户 Set<String…
在前文中学习了如何基于 Redis 创建一个简单的分布式锁。虽然在大多数情况下这个锁已经可以满足需要,但其依然存在以下缺陷: 事实上一般而言,我们可以直接使用 Redisson 提供的分布式锁而非自己创建。 Redisson 添加 Redisson 依赖: <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version&g…
本文基于前文的黑马点评项目进行学习。 Redis 生成全局唯一ID 整个全局唯一 ID 的结构如下: 这里的时间戳是当前时间基于某一个基准时间(项目开始前的某个时间点)的时间戳。序列号是依赖 Redis 生成的对于某个业务唯一的自增量。 先计算一个基准时间的时间戳: public static void main(String[] args) { // 计算时间戳基准时间戳 long baseTimestamp = LocalDateTime.of(2024, 1, 1, 0, 0, 0).toEpoc…
准备工作 需要先导入项目相关资源: 数据库文件 hmdp.sql 后端代码 hm-dianping.zip 包括前端代码的 Nginx 启动后端代码和 Nginx。 短信登录 发送验证码 @PostMapping("code") public Result sendCode(@RequestParam("phone") String phone, HttpSession session) { // 发送短信验证码并保存验证码 return userService.sendCode(phone, sess…
常见的 Redis Java 客户端有三种: Jedis,优点是API 风格与 Redis 命令命名保持一致,容易上手,缺点是连接实例是线程不安全的,多线程场景需要用线程池来管理连接。 Redisson,在Redis基础上实现了分布式的可伸缩的java数据结构,例如Map、Queue等,而且支持跨进程的同步机制:Lock、Semaphore等待,比较适合用来实现特殊的功能需求。 lettuce,基于 Netty 实现,支持同步/异步和响应式编程,并且是线程安全的。支持 Redis 的哨兵模式、集群模式和管道模式。 …
安装 在 Linux 上安装 Redis 的详细步骤可以阅读这里。 命令行客户端 与服务端一同安装的还有命令行客户端redis-cli,可以通过以下方式用命令行客户端连接本机的 Redis 服务端: [root@192 redis-6.2.6]# redis-cli 如果设置了密码,这样的默认连接会提示缺少权限: 127.0.0.1:6379> ping (error) NOAUTH Authentication required. 可以通过auth 密码的方式输入密码以获取权限: 127.0.0.1:637…
1.安装 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. 1.1.依赖库 Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖: yum install -y gcc tcl 1.2.上传安装包并解压 然后将课前资料提供的Redis安装包上传到虚拟机的任意目录: 例如,我放到了/usr/local/src 目录: 解压缩: tar -xzf …
1. 双击资料中提供的安装包 2. 选择安装目录 选择安装到一个,没有中文,没有空格的目录下(新建一个文件夹NodeJS) 3. 验证NodeJS环境变量 NodeJS 安装完毕后,会自动配置好环境变量,我们验证一下是否安装成功,通过: node -v 4. 配置npm的全局安装路径 使用管理员身份运行命令行,在命令行中,执行如下指令: npm config set prefix "D:\develop\NodeJS" 注意:D:\develop\NodeJS 这个目录是NodeJS的安装目录 5.更换安装包的源 …
1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3.8-management 方式二:从本地加载 在课前资料已经提供了镜像包: 上传到虚拟机中后,使用命令加载镜像即可: docker load -i mq.tar 1.2.安装MQ 执行下面的命令来运行MQ容器: docker run \ -e RABBITMQ_DEFAULT_USER=itcast \ -e RABBITMQ_DEFAULT_PASS=123321 …
多级缓存架构 传统的缓存使用 Redis,大致架构如下: 这个架构存在一些问题: 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 Redis缓存失效时,会对数据库产生冲击 可以使用多级缓存来解决这个问题: 具体过程为: 浏览器访问静态资源时,优先读取浏览器本地缓存 访问非静态资源(ajax查询数据)时,访问服务端 请求到达Nginx后,优先读取 Nginx本地缓存 如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat) 如果Redis查询未命中,则查询Tomcat 请求进入To…
魔芋红茶
加一点PHP,加一点Go,加一点Python......
COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务
Theme Kratos Made By Seaton Jiang