链接:https://baobeihuijia.com/bbhj/contents/3/194205.html
跟学视频链接:https://www.bilibili.com/video/BV1S54y1R7SB/?spm_id_from=333.999.0.0
(建议有java基础的同学学习或者一直跟着狂神系列的同学学习)
发展历史 Structured Query Language
3V3高
NoSql的四大类型
Redis:远程字典服务
redis默认有16个数据库
redis为什么单线程还这么快?
redis是内存中的数据结构存储系统,可以用作数据库,缓存,和消息中间件
value数据类型
String/还可以是数字,可以增减(计数器/实时粉丝数量)
List (可以作为消息队列、栈)
set(无序不能有重复)
Hash (key-map集合)用作一个用户多个信息的保存,尤其是经常变动的信息 hset user name xxx age 23 ismarried no
zset(有序集合)zset 成绩排序/ 对消息进行带权重执行/ 排行榜 ,热榜
三种特殊的数据类型
geospatial 地理位置 算地理位置 两地距离,算方圆几里的人
Hyperloglog 占用的内存是固定的 12kb 底层是布隆过滤器, 无法判断即将到来的庞大数据流,且不能查看内存,容忍错误率
Bitmaps 位图数据结构,位存储 只有两个状态的
如何筛选用户是最快的,用0101表示用户(统计大数量的感染人数,用户信息活跃和不活跃的,登录和未登录的,打卡或者没打卡的)
setbit sign 0 1
getbit sign 6
bitcount sign 统计打卡天数
事务:本质就是一组命令的集合,命令直到执行事务才会执行
悲观锁:认为什么时候都出问题
乐观锁:认为什么时候都不会出问题
redis监控测试:
watch money
watch会检测到另一个程序是否修改过该值,修改过那么就不能执行事务
unwatch 原始事务失败就解锁
watch money 重新监视
jedis已经改版为lettuce
jedis是直连,采用多个线程操作是不安全的,需要用jedis pool连接池 BIO
lettuce采用netty,实例可以在多个线程中共享 NIO
redis的config配置文件
RDB & AOF,两种都开启的话,优先AOF的数据载入
redis是内存数据库,所以需要持久化操作
dump.rdb
规则
优点
缺点
appendonly.aof
每秒钟往aof中追加
如果这个文件有问题那么redis无法启动,可以通过redis-check-aof --fix xxx.aof
优点
缺点
aof文件远大于rdb,修复速度比rdb慢
运行效率也比rdb漫长
这样文件是不是会越来越大?
如果上一次文件大于限定的64m,就会fork一个新进程,新进程会把数据转为写指令存入到aof文件
SUBSCRIBE 订阅频道,监听等待推送的信息
PUBLISH 发布者往频道里边发布消息
PSUBSCRIBE 退订
用途(简单场景,难得场景会使用消息中间件MQ)
从主节点服务器单向复制到从节点服务器,master以读,slave以写为主
主从复制的作用
info replication 查看当前主从信息
配置的时候要每一个服务器拥有一个单独的config
给从机配老大: SLAVEOF 127.0.0.1 6379 如果是永久配置的话要在config中写死,否则一旦断开,从机就会认为自己是主机
slave启动后会给所属master发一个同步命令,Master收到命令后自动后台存盘进程,将数据文件同步到slave
当主机断开连接,不影响从机的响应,从机之间彼此也不会影响,重新加进来的slave会重新执行一次全量复制
Resid主从复制方式二——人体蜈蚣模式
原始方式是手动切换一台从服务器到主服务器,现在就是谋朝篡位的自动版,后台监控主机是否故障,如果故障那么就投票来选择从库作为主库
1、多个哨兵之间也在互相监控,避免某个哨兵自身挂掉
2、当某个哨兵发现master一直不回应,此时为哨兵一的主观下线
3、当别的一定数量哨兵也发现这一现象后,哨兵之间就会进行一次投票,投票由随机某个哨兵发起进行统计
4、根据投票结果选出下一个主节点
5、该哨兵通过发布订阅模式,让各个哨兵更改自己监控的主机,此时为客观下线
6、此时如果原始的主机回来了,那么会自动成为当前新主机的从机
缓存穿透(查不到):查询的数据在缓存中没有命中,于是向持久层数据库查询,这次查询也没有查询到——如果用户很多缓存都没有命中就会频繁请求持久层数据库,出现缓存穿透(穿透的意思大概就是,此时缓存就像不存在一样)
缓存击穿(查的量太大了,缓存过期):请求全部集中在一个点key,大并发集都对这一个点进行访问,当key失效的瞬间,大并发涌入击穿缓存涌入数据库,就像在屏障上凿出一个洞
缓存雪崩:在一个时间段,缓存中的数据全失或者集中过期失效
比如微博热搜,所有人都在高并发访问一个点的数据,但是这个点在缓存中比如60s过期,那么在过期的瞬间,大量请求涌入数据库,直接击穿缓存
缓存雪崩:在一个时间段,缓存中的数据全失或者集中过期失效