• 黑马2022最新redis课程笔记知识点(面试用)持续更新


    redis入门

    redis的常见五种数据类型

    String类型

    • String类型,类似于java中的String类型,常见使用get,set方法。

    • String类型还可以存储json字符串格式

    Hash类型

    • Hash类型,也叫散列,它的value是一个无序字典,类似于java中HashMap

    • Hash类型的常用命令:

    List类型:

    • Redis中的List类型与java中的LinkedList相类似,可以看做一个双向链表的结构,即支持正向检索,又支持反向检索。

    • 特征也与java的LinkedList类似

      有序

      元素可重复

      插入和删除速度快

      查询速度一般

    • List类型常用命令

    • 使用List模拟栈、队列、阻塞队列

    Set类型

    Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

    • 无序
    • 元素不可重复
    • 查找快
    • 支持并集,交集,差集

    Set常用命令:

    redis实战(黑马点评)

    短信验证码的登录注册功能

    商家查询的缓存功能

    redis缓存:查询的时候先查询redis,redis有直接返回,redis没有再查数据库

    1、缓存更新

    缓存更新的三种策略

    内存淘汰:redis自带的内存淘汰机制

    过期淘汰:利用expire命令给数据设置过期时间(TTL)

    主动更新:主动完成数据库与缓存的同时更新

    主动更新的三种方案

    策略选择

    低一致性需求:内存淘汰或过期淘汰

    高一致性需求:主动更新为主,过期淘汰兜底

    Cache Aside模式的选择

    1. 更新缓存还是删除缓存?

      更新缓存会产生很多无效更新,并存在较大的线程安全问题。

      删除缓存本质是延迟更新,没有无效更新,线程安全问题相对较低

    2. 先操作数据库还是缓存?

      先更新数据,再删除缓存——在满足原子性的情况下,安全问题概率较低

      先删除缓存,再更新数据库——安全问题概率较高

    3. 如何确保数据库与缓存操作原子性

      单体系统——利用事务机制

      分布式系统——使用分布式事务

    最佳实践

    查询数据时:

    1. 先查询缓存
    2. 如果缓存命中,直接返回
    3. 如果缓存未命中,则查询数据库
    4. 将数据库数据写入缓存
    5. 返回结果

    修改数据库时:

    1. 先修改数据库
    2. 然后删除缓存
    3. 增加事务,确保两者的原子性

    2、缓存穿透

    产生原因

    客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库

    解决方案

    缓存空对象

    对于不存在的数据也在redis、建立缓存,值为空,并设置一个较短的TTl时间

    布隆过滤

    利用布隆过滤算法,在请求进去redis之前先判断是否存在,如果不存在则直接拒绝请求

    其他

    3、缓存雪崩

    产生原因

    在同一时段大量的缓存key同时失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力。

    解决方案

    4、缓存击穿(热点key)

    产生原因

    热点key在某一时间被高并发访问,缓存重建好事较长。

    热点key突然过期,因为重建耗时长,在这段时间内大量请求落到数据库,带来巨大冲击

    解决方案

    互斥锁

    逻辑过期

  • 相关阅读:
    论文学习:RT-DETR
    vue3中组件传值的方法
    用libmodbus实现一个支持多客户端的modbus tcp server (slave)
    微信小程序/uni-app tabBar 页面传参问题
    过拟合和欠拟合是什么?有什么异同点?解决办法是什么?
    9. 函数
    Redis的集群模式搭建
    jQuery中的prop方法(全选按钮)
    Jmeter+Ant+Git+Jenkins持续集成介绍
    带你了解基于Ploto构建自动驾驶平台
  • 原文地址:https://www.cnblogs.com/dengxiaoyi/p/16558233.html