• Redis 常见问题


    1、redis 使用场景?

    高并发、高性能

    2、高并发场景,Redis 的优势和作用

    redis 的所有操作都是在内存(主存)中进行,所以天然就有速度快的优势,而且吞吐量也很大,远远超过关系型数据库的吞吐量。而且 redis 在主存中是顺序执行的,所以无需考虑数据一致性。

    redis 单机吞吐量 10 W,mysql 单机 吞吐量 8K 。

    所以在高并发场景中,可以通过 redis 来减少后端关系型数据库的压力。

    3、redis 如何提高性能?

    将查询很耗时间的数据存于 redis,再次访问时直接从缓存获取,则可以提高响应速度

    4、如何保证 redis 高可用?

    生产者开启 ack 机制

    redis 开启队列持久化和消息持久化

    消费者 实行手动 ack 机制

    5、缓存雪崩、缓存击穿、缓存穿透

    • 缓存穿透:大量请求在缓存中未命中,大量请求到数据库

      解决1:在大量请求缓存未命中时,在第一次请求到数据库时,将 null 存入缓存,避免后续请求到数据库

      解决2:加过滤器,过滤器中保持 mysql 中所有ID,如果ID不在,打回,但是内存会占用过大,所有采用布隆算法(用容错率换取空间):将ID 使用多个哈希算法计算,将多个值存入 bit 数组下标位置,查询时,则先计算多个哈希值,在 bit 数组中进行查询,组合查询ID,都每个哈希值都查询到才算数据存在(多个哈希函数用于降低哈希碰撞)

    • 缓存击穿:高并发热点key过期,导致瞬间大量访问数据库

      解决1:热点key永不过期

      解决2:使用分布式锁在 redis和MySQL之间,保证每次查询只有一个到数据库

    • 缓存雪崩:redis 宕机导致大量请求到mysql,使mysql挂掉

      解决:使用 redis 主从哨兵集群模式

    6、缓存与数据库双写不一致

    7、redis 数据丢失

    redis 过期策略:定时删除 + 惰性删除

    内部淘汰机制:按不同的机制来使内存不足时删除数据、自定义淘汰算法

    8、如何保证 redis 高并发高可用?

    高并发使用主从架构:一主多从,读写分离,主来写,从同步用于查询,

    高可用使用主从架构加哨兵:服务宕机进行主备切换

    9、redis 主从架构如何保证数据不丢失?

    定时生成 RDB 快照文件: 数据恢复快,但是当快照大时,可能影响响应速度,最大丢失时间差数据,适合冷备

    AOF:记录操作日志, 数据丢失少,数据恢复慢

    10、redis 集群之分布式切片

    优雅的一致性Hash 算法

     

    • 定义哈希环,假设是 2^32

    • 分片规则:(ip+id)% 哈希环 = num

      num 的肯定在 [0,2^32-1] 之间,则每条数据在哈希环上都有一个坐标,按照哈希环进行顺时针寻找最近的 redis 数据库进行存储数据

    • 数据迁移:

      新增:如果在redis 2 和 3 之间新增 redis 4,则只需要将哈希环中redis 2 和 4之间的数据迁移到 redis 4

      删除:如果删除 redis 3,则只需要将 redis3 迁移至 redis 1即可

    • 缺点:数据倾斜

  • 相关阅读:
    人机的时空是不同滴
    HTTP DDOS攻击有什么类型和特点?
    js 中的错误类型及处理方式
    自定义iOS注解
    拉普拉斯Laplace算子(高斯二阶导核)
    Android studio进入手机调试状态
    元宇宙电商-NFG系统是如何赋能酒业的?
    django ModelForm文件上传(八)
    智工教育:注册计量师职业资格条件已改革!
    当EAI遇见RPA:破解接口难题,助力数据打通
  • 原文地址:https://blog.csdn.net/qq_42151956/article/details/127106591