Netty 入门1. 概述1. Netty 是什么?12Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high performance protocol servers & clients.
Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端
2. Netty 的作者
Trustin Lee
他还是另一个著名网络应用框架 Mina 的重要贡献者
3. Netty 的地位Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开发中的地位
以下的框架都使用了 Netty,因为它们有网络通信需求!
Cassandra - nosql 数据库
Spark - 大数据分布式计算框架
Hadoop - 大数据分布式存储框架
RocketMQ - ali 开源的消息队列
ElasticSearch - 搜索引擎
gRPC - rpc 框架
...
NIO 基础non-blocking io 非阻塞 IO
测试的maven依赖
12345678910111213141516171819202122232425262728<dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.71.Final</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22& ...
Redis最佳实践1. Redis键值设计1. 优雅的key结构Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:
遵循基本格式:[业务名称]:[数据名]:[id]
长度不超过44字节
不包含特殊字符
例如:我们的登录业务,保存用户信息,其key是这样的:
优点:
① 可读性强
② 避免key冲突
③ 方便管理
④ 更节省内存: key是string类型,底层编码包含int、embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小
2. 拒绝BigKey1. 什么是BigKeyBigKey通常以Key的大小和Key中成员的数量来综合判定,例如:
Key本身的数据量过大:一个String类型的Key,它的值为5 MB。
Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。
Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。
推荐值:
单个key的value小于10KB
对于集合类型的key,建议元素数量小于1000
...
分布式缓存基于Redis集群解决单机Redis存在的问题
单机的Redis存在四大问题:
1. Redis持久化Redis有两种持久化方案:
RDB持久化
AOF持久化
1. RDB持久化RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。
1. 执行时机RDB持久化在四种情况下会执行:
执行save命令
执行bgsave命令
Redis停机时
触发RDB条件时
1. save命令
执行下面的命令,可以立即执行一次RDB:
save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。
2. bgsave命令
下面的命令可以异步执行RDB:
这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。
3. 停机时
Redis停机时会执行一次save命令,实现RDB持久化。
4. 触发RDB条件
Redi ...
实战篇1. 短信登录1. 导入黑马点评项目1. 首先,导入课前资料提供的SQL文件
其中的表有:
ltb_user:用户表
ltb_user_info:用户详情表
ltb_shop:商户信息表
ltb_shop_type:商户类型表
ltb_blog:用户日记表(达人探店日记)
ltb_follow:用户关注表
ltb_voucher:优惠券表
tb_voucher_order:优惠券的订单表
2. 导入后端项目
在资料中提供了一个项目源码:
将其复制到你的idea工作空间,然后利用idea打开即可
启动项目后,在浏览器访问:http://localhost:8081/shop-type/list ,如果可以看到数据则证明运行没有问题
不要忘了修改application.yaml文件中的mysql、redis地址信息
3. 导入前端项目
在资料中提供了一个nginx文件夹:
将其复制到任意目录,要确保该目录不包含中文、特殊字符和空格,例如:
4. 运行前端项目
在nginx所在目录下打开一个CMD窗口,输入命令:
1start nginx.exe
打开chrome浏 ...
基础篇1. Redis入门1. 认识NoSQL1. 什么是NoSQL
NoSQL最常见的解释是”non-relational“, 很多人也说它是”Not Only SQL”
NoSQL仅仅是一个概念,泛指非关系型的数据库
区别于关系数据库,它们不保证关系数据的ACID特性
NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入
常见的NoSQL数据库有:Redis、MemCache、MongoDB等
2. NoSQL与SQL的差异
SQL
NoSQL
数据结构
结构化
非结构化
数据关联
关联的
无关联的
查询方式
SQL查询
非SQL
事务特性
ACID
BASE
存储方式
磁盘
内存
扩展性
垂直
水平
使用场景
1)数据结构固定2)相关业务对数据安全性、一致性要求较高
1)数据结构不固定2)对一致性、安全性要求不高3)对性能要求
2. 认识RedisRedis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内 ...
数据库备份与恢复在任何数据库环境中,总会有不确定的意外情况发生,比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的,这些情况可能会导致数据的丢失、服务器瘫痪等严重的后果。存在多个服务器时,会出现主从服务器之间的数据同步问题。
为了有效防止数据丢失,并将损失降到最低,应定期对MySQL数据库服务器做备份。如果数据库中的数据丢失或者出现错误,可以使用备份的数据进行恢复。主从服务器之间的数据同步问题可以通过复制功能实现.
1. 物理备份与逻辑备份物理备份:备份数据文件,转储数据库物理文件到某一目录。物理备份恢复速度比较快,但占用空间比较大,MySQL中可以用xtrabackup工具来进行物理备份。
逻辑备份:对数据库对象利用工具进行导出工作,汇总入备份文件内。逻辑备份恢复速度慢,但占用空间小,更灵活。MySQL 中常用的逻辑备份工具为mysqldump。逻辑备份就是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现。
2. mysqldump实现逻辑备份mysqldump是MySQL提供的一个非常有用的数据库备份工具。
1 . 备份一个数据库 ...
主从复制1. 主从复制概述1. 如何提升数据库并发能力在实际工作中,我们常常将Redis 作为缓存与MySQL配合来使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出。如果不存在再访问数据库,这样就提升了读取的效率,也减少了对后端数据库的访问压力。Redis的缓存架构是高并发架构中非常重要的一环。
此外,一般应用对数据库而言都是读多写少,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做主从架构、进行读写分离,这样同样可以提升数据库的并发处理能力。但并不是所有的应用都需要对数据库进行主从架构的设置,毕竟设置架构本身是有成本的。
如果我们的目的在于提升数据库高并发访问的效率,那么首先考虑的是如何优化SQL和索引,这种方式简单有效;其次才是采用缓存的策略,比如使用Redis将热点数据保存在内存数据库中,提升读取的效率;最后才是对数据库采用主从架构,进行读写分离。
2. 主从复制的作用主从同步设计不仅可以提高数据库的吞吐量,还有以下 3 个方面的作用。
第1个作用:读写分离。
我们可以通过主从复制的方式来同步数据,然后通过读写分离提高数据库并发处理能力 ...
其他数据库日志我们在讲解数据库事务时,讲过两种日志:重做日志、回滚日志。
对于线上数据库应用系统,突然遭遇数据库宕机怎么办?在这种情况下,定位宕机的原因就非常关键。我们可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息,包括了错误、警告和注释等信息。比如:从日志中发现某个连接中的SQL操作发生了死循环,导致内存不足,被系统强行终止了。明确了原因,处理起来也就轻松了,系统很快就恢复了运行。
除了发现错误,日志在数据复制、数据恢复、操作审计,以及确保数据的永久性和一致性等方面,都有着不可替代的作用。
千万不要小看日志。很多看似奇怪的问题,答案往往就藏在日志里。很多情况下,只有通过查看日志才能发现问题的原因,真正解决问题。所以,一定要学会查看日志,养成检查日志的习惯,对提升你的数据库应用开发能力至关重要。
MySQL8.0 官网日志地址
1. MySQL支持的日志1. 日志类型MySQL有不同类型的日志文件,用来存储不同类型的日志,分为二进制日志 、错误日志 、 通用查询日志 和 慢查询日志 ,这也是常用的4种。MySQL 8 又新增两种支持的日志:中继日志和数据定义语句日志。 ...
多版本并发控制1. 什么是MVCCMVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。
MVCC没有正式的标准,在不同的DBMS中MCC的实现方式可能是不同的,也不是普遍使用的(大家可以参考相关的DBMS文档)。这里讲解InnoDB中MVCC的实现机制(MysQL其它的存储引擎并不支持它)。
2. 快照读与当前读MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写 冲突 ,做到即使有读写冲突时,也能做到不加锁 ,非阻塞并发读,而这个读指的就是快照读 , 而非当前读。当前读实际上是一种加锁的操作,是悲观锁的实现。而MVCC本质是采用乐观锁思想的一种方式。
1. 快照读快照读又叫一致性读,读取的是快照数据。不加锁的简单的 SELECT 都属于 ...

