「黑马 MySQL」一、锁
锁介绍 MySQL 中的锁,按照锁的粒度分为以下三类: 全局锁:锁定数据库中的所有表 表级锁:每次操作锁住整张表 行级锁:每次操作锁住对应的行数据 全局锁 全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续 DML 的写语句,DDL 语句,已经更新操作的事务提交语句都将被阻塞 典型场景是锁定所有表进行全库备份,如果不加锁,就如下图,可能出现产生了订单但是库存没有扣减的数据不一致 image.png|500 ...
「黑马 Redis 原理」一、数据结构
Redis 底层 C 语言 数据结构 动态字符串 SDS Redis 并没有使用 C 语言的 String,因为它实际上是字符数组 例子: char* s="hello" 为 {'h', 'e', 'l', 'l', 'o', '\0'} 所以Redis构建了一种新的字符串结构,称为简单动态字符串 Simple Dynamic String,简称 SDS image.png|500 这里读取不根据 '\0' 只是为了符合 ...
「黑马 Redis 原理」二、网络模型
用户空间、内核空间 image.png|500 IO 模型 《UNIX 网络编程》 总结了五种 IO 模型 阻塞 IO / Blocking IO 非阻塞 IO / Nonblocking IO IO 多路复用 / IO Multiplexing 信号驱动 IO / Signal Driven IO 异步 IO / AsyncAsynchronous IO 用户空间的用户缓冲区向内核空间的内核缓冲区 **...
「黑马 Redis 原理」四、内存回收
内存回收 Redis之所以性能强,最主要的原因就是基于内存存储,然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能 配置文件中可以设置 redis 最大内存 maxmemory 如 maxmemory 1gb,当内存达到上限就无法继续存储数据 所以引出了内存回收策略 过期策略 expire 可以给 key 设置存活时间 TTL,当过期后再访问得到的就是 nil  客户端 client 向服务端 server 发送一条命令 服务端解析并执行命令,返回响应结果给客户端 因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议 RESP:redis serialization protocol 学习 RESP2 协议,在 2.0 版本推出,6.0 升级为 RESP3 但因为变化过大仍默认使用 RESP2 协议 RESP 协议数据类型 对于单行字符串、错误、数据都是二进制不安全的,如果...
「黑马 Redis」二、最佳实践
多级缓存跳过 键值设计 优雅的 key 结构 Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定: 遵循基本格式:[业务名称]:[数据名]:[id] 长度不超过44字节 不包含特殊字符 例如:我们的登录业务,保存用户信息,其key是这样的: login:user:10 优点: 可读性强 避免key冲突 方便管理 更节省内存:key是string类型,底层编码包含int、embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小 set num 123 如果 type num 得到...
「黑马 Redis」一、分布式缓存
引入 单点 Redis 问题: 数据丢失问题 实现 Redis 数据持久化 并发能力问题 搭建主从集群,实现读写分离 存储能力问题 学习 es,搭建分片集群,利用插槽机制实现动态扩容 故障恢复问题 Redis 哨兵,实现健康监测以及自动恢复 Redis 数据持久化 - 数据丢失问题 RDB 持久化 RDB:Redis Database Backup file,也称 Redis 数据快照,将内存中所有数据记录到磁盘,一旦 Redis 故障重启,就从磁盘中读取快照文件,恢复数据 快照文件称为 RDB 文件,默认保存在当前运行目录...
「黑马点评」十二、UV 统计
HyperLogLog 用法 UV:Unique Visitor,独立访客量,一天内同一用户多次访问也只记 1 次 PV:Page View,页面点击量,一个用户每访问一次页面就记 1 次 PV UV 统计需要判断该用户是否已经统计过,需要保存统计过的用户信息,如果存到 Redis,数据量非常大 HyperLogLog 是从 LogLog 算法派生出的概率算法,用于确定非常大的集合的基数,而不需要存储其所有的值,小于 0.81% 的误差 ![image.png|500](https://0xling.cyou/api/v2/objects/file/174586370113192...
「黑马点评」十一、用户签到
BitMap 用法 如果使用数据库记录用户签到信息,每条签到记录一次,数据量将会极其庞大,占用损耗都无法接受,所以可以利用二进制压缩,签到记录为 1,未签到记录为 0 image.png|500 位图 BitMap,利用 0 和 1 标示业务状态,位映射到具体含义,这里的场景就是某一位对应了现实某一天 ![image.png|500](https://0xling.cyou/api/v2/objects/file/1745861672954481...
「黑马点评」十、附近商户
GEO 数据结构 Geolocation 代表地理坐标,以下为常见坐标 image.png|500 练习 Redis GEO 添加以下信息 北京南站 116.378248 39.865275 北京站 116.42803 39.903738 北京西站 116.322287 39.893729 计算北京西站到北京站的距离 搜索天安门 116.397904 39.909005 附近 10km 内的所有火车站,并按照距...