Redis常用实战场景及总结复习

Redis的场景
一、Redis数据丢失ap
1.持久化 RDB就会有个时间区间的丢失aof默认会有1s
2.淘汰策略(用户已知)
3.主从切换(主从同步是异步的)
4.sentinel脑裂 当发生分区容错的时候,会有2个master
5.2个master都是可以写数据
master1 master2
master1 set k1 网络恢复,master1就会变成slave,slave清空自己的数据 k1丢失
master2 set k2
master slave1 slave2

6.尽可能的避免产生一致性问题
7.min-repicas-to-write 1至少多少个从节点
主从切换
ap
8.Redis尽量不要用来做业务逻辑处理 数据是不可靠
只做redis
二、Redis跟DB的数据一致性问题
1.缓存一致性问题
2.并发的场景下,可能会出现Redis跟DB的数据不一致
redis 1 db 2
假如Mysql的数据发生变更,我需要做缓存依赖,(我要去让redis里面的数据同步DB的)
Redis跟DB数据一致性怎么产生?并发 原子性(db的操作跟Redis操作不是原子的)
2.2双删:
1.线程A 先去Redis查 第一次不存在 去DB拿------>还没塞回Redis
2.线程B 修改 删除Redis,在更新DB1 更改为2 ---再删除Redis(延时,目的等待线程A执行完毕)
3.线程A继续执行还没塞回Redis,塞回Redis
  Redis  1 DB2
4.不可取的强一致方案
5.延时双删?核心思想,我在删除的时候,等待其他的线程执行完毕
6.延时多久?怎么延?
7.加锁 不让你有原子性问题了 牺牲了性能
2.3最终一致性方案
1.每个缓存设置过期时间而不是永久(缓存时间的不一致)
2.canal Mysql 数据变更,可以同步给相关的redis缓存
电商 看到的价格 跟我实际

3.只能有1方数据为主(DB为主) 肯定是自己的才是最可靠的
4.产品单独ID 订单对外ID 主键ID
5.实体 对内的数据 数据库建立
6.对外的时候 一定是独立 暴露总共有多少订单 订单量
7.数据安全
三、缓存雪崩、穿透、击穿问题
3.1缓存雪崩
redis 大量的数据 同时过期(失效) 并发很高 全部打到DB
1.保证redis的高可用 尽量防止Redis挂掉
2.设置不同的过期时间 随机
3.加互斥锁 
4.Mysql集群没这么脆弱
3.2缓存穿透
1.恶意攻击
2.查询的key redis没有 db也没有 每次请求都会走DB 找运维 封IP 运维
3.能不能把数据放到另外一个地方
4.去按摩 技师 技师1 去店里 找技师1 技师1不在 店每天都要去一次才知道这个技师在不在
5.店长 官网---周一 服务技师 12346 就知道你想要的技师在不在 只有1个标记 没有真实的技师
6.节省空间 才能快
7.bitmap 不会存key跟value
8.key ---位置 如果在 1 如果不在 0
9.k1 5 1代表数据存在
10.get k1 5这个位置是1 我才会去请求Redis跟db 如果是0, 我直接返回没有数据
hash

11.必须首先把DB的数据同步给布隆过滤器
12能判断一定不存在,但是不能判断一定存在 (hash冲突) 最多只是没有数据也会走DB
13怎么减少误判?怎么去减少hash冲突
  1.增加hash次数
  2.增加位图大小

14删除就会把其他的元素也会标记为不存在(hash冲突),这个场景是不能够容忍 (Db有数据查不到)
   1.redission就有封装 基于bitmap
   2.google.guava基于本地内存
   3.redis bloom模板

3.3缓存击穿
1.剑 单个key 过期的时候 大量的并发请求这个key
2.互斥锁 dcl
3.保证数据一直性,就不要用redis、es(缓存)
4.reids、es 提高性能
  阿里也不会用
四、慢查询、bigkey
4.1慢查询
1.多慢才是慢?可配
2.showlog-log-slower-than 10000 正数代表界限 负数代表禁用 0每个指令都会记录 默认是10ms
3.slowlog-max-len 128 记录的最大长度  slowlog get 10 慢查日志查询指令 slowlog reset 清除慢查
  1.你的指令 hgetall keys*
  2.大对象 拆分成子对象 (不要超过10k 具体根据业务量来)
  4. ./redis-cli --bigkeys 获取大对象指令
4.Redis阻塞?
  1.业务日志记好 降级 报警系统 知道有阻塞
  2.外部原因:网络阻塞 cpu不是特别友好
  3.内存原因:指令查询耗时长 key*
5.数据结构不合理 导致指令耗时过大
6.fok子进程阻塞 aof
7.Redis知识体系复习

8.Redis实战场景代码路径:RedisInAction: 在实际项目中使用redis的几个场景 (gitee.com)

你可能感兴趣的:(redis,redis,数据库,缓存)