MySQL高级篇-1-Linux下的安装和使用
安装前检查
查看是否安装过 MySQL
如果你是用 rpm 安装, 检查一下 RPM PACKAGE:
1rpm -qa | grep -i mysql # -i 忽略大小写
检查 mysql service:
1systemctl status mysqld.service
如果存在 mysql-libs 的旧版本包,显示如下:
如果不存在 mysql-lib 的版本,显示如下:
MySQL 的卸载
关闭 mysql 服务
1systemctl stop mysqld.service
查看当前 mysql 安装状况
123rpm -qa | grep -i mysql# 或yum list installed | grep mysql
卸载上述命令查询出的已安装程序
1yum remove mysql-xxx mysql-xxx mysql-xxx mysqk-xxxx
务必卸载干净,反复执行 rpm -qa | grep -i mysql确认是否有卸载残留
删除 mysql 相关文件
1234# 查找相关文件find / -name ...
Redis-4-高级篇-多级缓存
多级缓存传统的缓存策略一般是请求到达 Tomcat 后,先查询 Redis,如果未命中则查询数据库,如图:
存在问题
请求要经过 Tomcat 处理,Tomcat 的性能成为整个系统的瓶颈
Redis 缓存失效时,会对数据库产生冲击
多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻 Tomcat 压力,提升服务性能:
浏览器访问静态资源时,优先读取浏览器本地缓存
访问非静态资源(ajax查询数据)时,访问服务端
请求到达 Nginx 后,优先读取 Nginx 本地缓存
如果 Nginx 本地缓存未命中,则去直接查询 Redis(不经过 Tomcat)
如果 Redis 查询未命中,则查询 Tomcat
请求进入 Tomcat 后,优先查询 JVM 进程缓存
如果 JVM 进程缓存未命中,则查询数据库
在多级缓存架构中,Nginx 内部需要编写本地缓存查询、Redis 查询、Tomcat 查询的业务逻辑,因此这样的 nginx 服务不再是一个反向代理服务器,而是一个编写业务的Web服务器了。
因此这样的业务Nginx服务也需要搭建集群来提高并发,再有专门 ...
Redis-0-安装篇
单机安装Redis
安装Redis所需要的依赖:
1yum install -y gcc tcl
将Redis安装包上传到虚拟机的任意目录并解压缩:
1tar -xzf redis-6.2.4.tar.gz
进入redis目录:
1cd redis-6.2.4
运行编译命令:
1make && make install
如果没有出错,应该就安装成功。然后修改redis.conf文件中的一些配置:
123456# 绑定地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问bind 0.0.0.0# 保护模式,关闭保护模式protected-mode no# 数据库数量,设置为1databases 1
启动Redis:
1redis-server redis.conf
停止redis服务:
1redis-cli shutdown
Redis主从集群
集群结构
搭建的主从集群:
共包含三个节点,一个主节点,两个从节点。在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:
IP
PORT
角 ...
Redis-3-高级篇-分布式缓存
单机的 Redis 存在四大问题:
数据丢失问题(解决方案:实现 Redis 数据持久化)
并发能力问题(解决方案:搭建主从集群,实现读写分离)
存储能力问题(解决方案:搭建分片集群,利用插槽机制实现动态扩容)
故障恢复问题(解决方案:利用 Redis 哨兵,实现健康检测和自动恢复)
Redis 持久化RDB 持久化RDB 全称 Redis Database Backup file(Redis数据备份文件),也被叫做 Redis 数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为 RDB 文件,默认是保存在当前运行目录。
执行时机RDB 持久化在四种情况下会执行:
执行 save 命令:save 命令会导致主进程执行 RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。
执行下面的命令,可以立即执行一次 RDB
执行 bgsave 命令:这个命令执行后会开启独立进程完成 RDB,主进程可以持续处理用户请求,不受影响。
下面的命令可以异步执行 RDB:
停机时:Redis停机时会 ...
MySQL基础篇-14-8.0新特性
新特性概述
更简便的NoSQL支持
以更灵活的方式实现NoSQL功能,不再依赖模式(schema)。
更好的索引
新增了隐藏索引和降序索引 。隐藏索引可以用来测试去掉索引对查询性能的影响。在查询中混合存在多列索引时,使用降序索引可以提高查询的性能。
更完善的JSON支持
增加了聚合函数 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() ,将参数聚合为JSON数组或对象,新增了行内操作符 ->>,是列路径运算符 ->的增强,对JSON排序做了提升,并优化了JSON的更新操作。
安全和账户管理
新增了 caching_sha2_password 授权插件、角色、密码历史记录和FIPS 模式支持,这些特性提高了数据库的安全性和性能,使数据库管理员能够更灵活地进行账户管理工作。
InnoDB的变化
InnoDB是MySQL默认的存储引擎 ,是事务型数据库的首选引擎,支持事务安全表 (ACID),支持行锁定和外键。在MySQL 8 版本中,InnoDB在自增、索引、加密、死锁、共享锁等方面做了大量的改进和优化 ,并且支持原子 ...
JUC-0-Java并发编程零基础入门
JUCJUC是java.util.concurrent工具包的简称,用来处理线程
进程与线程
进程
进程是系统进行资源分配和调度的基本单位。
进程指在系统中正在运行的一个应用程序
线程
线程是操作系统能够进行运算调度的最小单位。
它被包含在进程之中,是进程中的实际运作单位。
一条线程指的是进程中一个单一顺序的控制流个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程的状态
线程状态枚举类
状态
说明
NEW
创建状态
RUNNABLE
运行状态
BLOCKED
阻塞状态
WAITING
等待状态
TIMED_WAITING
超时等待
TERMINATED
终止状态
wait/sleep 的区别
sleep 是 Thread 的静态方法,wait 是 Object 的方法,任何对象实例都能调用。
sleep不会释放锁,它也不需要占用锁。wait 会释放锁,但调用它的前提是当前线程占有锁(即代码要在 synchronized 中)
它们都可以被 interrupted 方法中断
并发与并行
串行模式
...