Redis相关问题

目录

概念

特性

使用场景

redis持久化机制

Mysq和redis数据一致

缓存穿透

缓存击穿

缓存雪崩

Redis分布式锁

PS


概念

redis是一种非关系型数据库数据库(nosql), 快速响应, 支持高并发, 快速响应大数据量, 不强调数据的强一致性;

mysql关系型数据库

nosql非关系型数据库

强调数据与数据之间的关系和强一致性

快速响应,可以有数据冗余

都支持高并发,大数据量存储

特性

基于单线程模式设计的一款基于内存的缓存键值对数据库。

  1. 高并发, 使用内存, 读写更快, 但是不可靠(一般结合mysql使用)
  2. 原子性, 基于单线程模式高并发不存在安全问题(分布式情况下依旧存在问题)
  3. 数据类型丰富(String, hash, list, set, zset)

PS: redis,Nginx都是单线程模型;tomcat,mysql都是多线程模型设计

使用场景

  • 高并发业务操作, 秒杀, 抢购, 削峰操作
  • 高频热点数据, 频繁被查询的数据, 比如热搜
  • 常量数据, 添加成功后, 基本不变动的数据, 比如字典项数据
  • 需要排序的数据: 比如排行榜, 使用zset自动排行
  • 计算器: 雪花算法id, 生成序列号/id主键
  • 临时数据存储: 比如验证码, httpsession

redis持久化机制

  • rdb持久化: 指定间隔时间,当发生指定数据改变时,把内存中的数据保存到硬盘rdb文件,下次启动reids时,加载rdb持久化文件
  • 优点: 文件紧凑, 子进程处理, 数据量大恢复的比aof快
    • 缺点: 没法做到秒级持久化, 新老版本可能不兼容, 服务器停机会丢失数据比aof多
  • aof持久化: 固定每秒把这一秒执行的redis增删改指令保存硬盘aof文件,下次启动reids时,加载aof持久化文件.相对于rdb持久化更可靠。
  • 优点: 丢失的数据更少, 日志可读, 可以处理误操作
    • 缺点: 占用磁盘更多, 恢复较慢, 有性能压力

同时开启默认读取aof数据, 官方推荐同时启用, 只是作为缓存使用可以都不开启

Mysq和redis数据一致

  1. 删除缓存(常用, 分布式要使用延时双删: 删除缓存-->更新数据库-->线程休眠再删缓存)
  2. 修改msql时同时修改redis(复杂, 不用)
  3. 使用mq消息队列, 让多线程操作顺序执行
  4. 使用Nginx负载均衡, 使相同的进程放入一个队列

缓存穿透

指访问一个数据库中不存在的数据, 无法存储到缓存, 每次都直接击穿缓存, 访问数据库

  1. 缓存null值, 防止直接访问数据库
  2. 使用布隆过滤器, 通过hash算法判断key是否合法(可能误杀)
  3. 读取数据库时加锁, 让其他请求先休眠
  4. 分级缓存

缓存击穿

指同一时刻, 大量热点(集中)数据失效, 同时又有大量并发请求涌入, 直接访问数据库, 导致数据库承受不住压力;

解决方案: (不做过多阐述)

  1. 异步重建缓存, 逻辑过期时间小于缓存过期时间, 超时后重置缓存有效时间
  2. 数据库获取数据时加锁(常用)
  3. 热点永不过期

缓存雪崩

指同一时刻, 大量缓存失效, 同时又有大量并发(分散)请求涌入, 直接访问数据库, 导致数据库承受不住压力, 重启后又会快速崩掉

解决方案: (不做过多阐述)

  1. 设置不同的过期时间
  2. 服务降级, 限流
  3. 集群部署(主从, 哨兵), 一个挂掉其他顶上

Redis分布式锁

目的: 保证集群部署的添加的字段唯一

  1. 查询该字段是否存在
  2. 不存在则加分布式锁
  3. 加锁成功后才能添加到数据库(同时创建守护线程, 监控锁的有效时间, 定期延期)
  4. 操作成功释放锁(守护线程自动结束)

PS

Redis官方为什么不提供Windows版本?

因为redis 是单线程高性能的。所以单线程轮询。linxu轮询用epoll,window 用selector, 性能上来说 epoll是高于selector 的。(仅供需要了解)

所以redis推荐使用linux版本。window版本的redis是微软修改提供的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值