• 高并发系列之——缓存中间件Redis


    1 概念和使用场景

      下载路径

    2 基本存储类型

    • String  
    • List  
    • Set  
    • SortedSet  
    • Hash

    3 事务

      单线程执行,即只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。

      根据事务的四大特性ACID,只保证了原子性、一致性和隔离性

    4 如何实现mybatis的二级缓存

      步骤一:新建一个类,用于实现org.apache.ibatis.cache.Cache接口

      步骤二:在mapper.xml中开启基于redis二级缓存

        <cache type=“com.wooyoo.learning.util.RedisCache”/>

      步骤三:sql语句中增加标签如,flushCache=true

    4.1 二级缓存目的

      取数据时,首先从一级缓存中取,其次葱二级缓存中,如果二级缓存中有数据,则从二级缓存中取,否则查询数据库。

      删除、更新、增加数据的时候,同时更新缓存。

    4.2 什么数据适合存放到二级缓存中

    • 很少被改动;
    • 数据不是很重要,容许出现偶尔的并发数据;
    • 不会被并发访问;

    5 扩展

    5.1 缓存穿透

      查询缓存中不存在的数据,导致直接查询到数据库。

      解决方案:第一次查询不存在的数据时,在缓存中增加一个对应的key为空的数据。

    5.2 缓存雪崩

      所有缓存在同一时间全部失效,导致了所有请求都直接访问数据库。

      解决方案:设置线程互斥,只让一个线程构建缓存,其他等待缓存创建完成后再通过缓存取数据。或,设置交错失效时间

    5.3 缓存击穿

      缓存雪崩的一个特例,不同的是缓存雪崩针对全部数据,缓存击穿是特定的热点数据。

      缓存方案:二级缓存

  • 相关阅读:
    深入理解JavaScript中的this关键字
    使用yii的layout,加入<?php echo $content; ?>这句话时,它会自动在子页面上面添加一个div包裹
    使用 BEGINCONTENT() 和 ENDCONTENT() 设定 YII 的 LAYOUTS
    孙悟空的师傅是谁
    PHP MemCached高级缓存配置图文教程
    C++中的基类与派生类
    矩阵快速幂
    华为上机测试题
    2016网易研发题目
    冒泡排序
  • 原文地址:https://www.cnblogs.com/guobm/p/9990218.html
Copyright © 2020-2023  润新知