一.Redis事务
1. Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
(1) 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
(2) 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
2. 一个事务从开始到执行会经历以下三个阶段:
(1) 开始事务。
(2) 命令入队。
(3) 执行事务。
3. 事务命令
命令 | 描述 |
---|---|
MULTI | 标记一个事务块的开始。 |
EXEC | 执行所有事务块内的命令。 |
DISCARD | 取消事务,放弃执行事务块内的所有命令。 |
WATCH | 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
UNWATCH | 取消 WATCH 命令对所有 key 的监视。 |
二. 主从模式
1. 作用:
(1) 备份数据
(2) 负载均衡,master节点可以进⾏读和写,slave节点只进⾏读操作。
2. Redis 的主从配置
(1) 在⼀台机器上启动多个redis实例,需要修改⼀下配置,保证多个redis实例出现共享数据。
(2) 修改master主服务器 redis.windows.conf
// 设置主服务器IP地址
bind 127.0.0.1
// 设置端口号
port 6379
// 数据存储文件名
dbfilename dump.rdb
(3) 修改slave从服务器
// 配置从服务器的IP地址
bind 127.0.0.1
// 配置端口号
port 6380
// 数据存储文件名
dbfilename dump.rdb
// 配置从服务器从属于主服务器的地址
slaveof 127.0.0.1 6379
3. 哨兵模式:
主从模式中,当master节点挂了以后,slave节点不能主动选举⼀个master节点出来,那么我就安排⼀个或多个sentinel来做这件事,当sentinel发现master节点挂了以后,sentinel就会从slave中重新选举⼀个新的master。
三. 缓存问题
1.缓存穿透
(1)缓存穿透是指查询⼀个数据库⼀定不存在的数据。
- ⾼并发下,⼀秒钟前⼀百个请求向数据库请求,第⼀百零⼀个数据发现缓存有了,就去访问缓存,⽆影响。
- ⾼并发下,⼀秒钟⼀百万个请求都去请求⼀个数据,但是缓存没有,再去请求数据库,数据库⾥也不存在,此时,这⼀百万个请求已经和数据库交互了。所以叫做绕过缓存,把redis缓存数据库穿透了。
- 想象⼀下,uuid查询,很容易找到⼀个不存在的key,恶意攻击,利⽤这个漏洞,很容易给服务器带来巨⼤的压⼒。
(2) 解决⽅案:把不存在的给个null,放⼊缓存,可以防⽌攻击⽤户反复⽤同⼀个id暴⼒攻击。
2.缓存击穿
(1) 描述:缓存击穿是指缓存中没有但数据库中有的数据(⼀般是缓存时间到期),这时由于并发⽤户特别多,同时读缓存没读到数据,⼜同时去数据库去取数据,引起数据库压⼒瞬间增⼤,造成过⼤压⼒。
(2) 例⼦:淘宝爆款商品
(3) 解决⽅案:设置热点数据永远不过期。
3.缓存雪崩
- 缓存雪崩:
(1)指缓存中数据⼤批量到过期时间甚⾄缓存服务器宕机,⽽查询数据量巨⼤,引起数据库压
⼒过⼤甚⾄宕机。
(2)和缓存击穿不同的是,缓存击穿指并发查同⼀条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从⽽查数据库。 - 解决⽅案:⼀般采取不同分类商品,设计随机因⼦,缓存不同周期。
今天是我在千锋线上学习的第54天,加油!!!