1.前言&基本介绍

    在原始的系统架构中,我们都由程序直接连接DB,随着业务的进一步开展,DB的压力越来越大,为了缓解DB的这一压力,我们引入了缓存,在程序连接DB中加入缓存层,

从而减轻数据库压力,而且缓存一般存在于内存中,相比于存在硬盘中的DB在读取速度上绝对是比DB高几个等级。下面我们来简单聊聊关于缓存几个东西

2.缓存的优缺点

    缓存的优点就是“快”,一个快字基本能概括了。如上文说的加速读写,分流对数据库的压力,归根结底就是对快字的应用及其本身,缺点主要是如下三点:

      1.数据不一致性:DB的数据与缓存中的数据不一致

      2.开发成本:需要同时处理缓存层跟DB层的逻辑,增加了开发成本

      3.维护成本:例如需要对缓存层进行一个监控,增加了运维的成本

3.缓存更新策略

    在上面中我们说到数据不一致性,一般来说缓存也是需要有生命周期的,需要被更新或者删除,这样才能保持缓存的可控性,在缓存更新中有如下三点:

      1.LR(F)U/FIFO算法删除:简单来说就是按照队列的形式对不常用的缓存进行删除,链表的形式来实现,具体可点这里http://blog.csdn.net/maddemon/article/details/6650703
 
      2.超时删除:在设置缓存的时候可以设置过期时间,在时间到期之后自动删除。在使用这个的时候,最好还是确保缓存数据跟数据库数据不一致的时候业务能容忍,还是存在一致性的问题
 
      3.主动更新:应用于对数据一致性要求高的,但最好还是需要保证更新的准确性。假如对实时性要求不高的,还是根据超时删除吧
 

4.缓存粒度

    假设一张用户表有20个字段,那是否需要将全部字段都放到缓存中?这就涉及到一个粒度的问题!数据字段放少了,就会出现了不通用的问题;数据字段放多了,空间占用也多,序列化跟反序

列化消耗的性能更多了。在粒度这个问题上还是需要根据通用性,代码维护,性能跟空间占用这几点上进行考虑, 简单来说就是靠经验了

5.缓存穿透

     缓存穿透指的是查询一个不存在的数据,DB跟缓存都不会命中的数据。这样的话每次查询都会到DB层中查询,DB层负载加大还有可能造成死机,这样缓存就失去了保护DB层的意义。出现这种情况有两种:1.攻击,爬虫的大量请求;2.业务自身有问题。现在基本流行的解决方案有以下两种:

      5.1 缓存空对象,当DB层也查不到数据的时候,缓存一个null值进缓存,这样下一次的话就直接从缓存中读取,保护了后端。不过这种带来的后果是缓存了更多的键,需要更多的空间,而且不可控性增加

 
      5.2布隆过滤器拦截,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。这样在查询缓存之前先去过滤器中查询缓存是否有存在该key。不过这个适合于数据量固定,实时性低的应用中,因为要维护这一个过滤器。
 

6.雪崩优化

    指的是原先的缓存层承载了大量的请求,有效的保护了DB层,但是假如缓存层炸了,那所有的请求都直接穿透到DB层,会容易造成DB层也炸了。就这个问题一直没有一个很完美的解决方案,可以从下列两个方面进行思考:

      6.1.保证缓存层的高可用(HA),例如redis的Sentinel跟Cluster都实现了高可用(在windows10下跑这个sentinel,偶尔会出现节点挂了但是sentinel没反应过来的情况,还是linux稳定一点)
 
      6.2.提前演练,这个类似与实验设计,模拟某一层挂了的处理情况
 

7.总结

  最后用Xmind总结一下:

  

《Redis开发与运维》快速笔记(一)的更多相关文章

  1. Redis开发与运维学习笔记

    <Redis开发与运维>读书笔记   一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...

  2. Redis开发与运维:SDS

    STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...

  3. Redis 开发与运维

    Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...

  4. Redis实战(七)Redis开发与运维

    Redis用途 1.缓存 Redis提供了键值过期时间设置, 并且也提供了灵活控制最大内存和内存溢出后的淘汰策略. 可以这么说, 一个合理的缓存设计能够为一个网站的稳定保驾护航. 2.排行榜系统 Re ...

  5. 《Redis开发与运维》

    第1章 初识Redis 1. Redis介绍: Redis是一种基于键值对(key-value)的NoSQL数据库. 与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).has ...

  6. 《Redis开发与运维》读书笔记

    一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争问题 基于键值对的数据结构,支持的数据结构丰富.它 ...

  7. Redis开发与运维

    常用命令 redis-server启动redis redis-server /opt/redis/redis.conf    配置启动 redis-server --port 6379 --dir / ...

  8. redis 开发与运维 学习心得1

    主要是命令相关 第一章 初识Redis 1.redis是基于键值对的NoSQL. 2.redis的值可以是 string, hash, list, set, zset, bitmaps, hyperl ...

  9. Redis开发与运维:linux安装

    Linux 安装 我的系统是inux 系统,官网下载 https://redis.io/download redis-5.0.5.tar.gz 解压: 编译安装: 官网和文档说得已经很清楚了,现在就执 ...

随机推荐

  1. 一个简单的servlet

    1.创建一个自己的servlet文件,继承HttpServlet MyServlet.java package com.jmu.ccjoin.controller; import java.io.IO ...

  2. react native 之 redux

    第一章  认识redux 说的通俗且直白一点呢,就是redux提供了一个store,独立的一个内存区,然后放了一些state,你可以在任何component中访问到state,这些state要更改怎么 ...

  3. CVE-2015-7547漏洞分析从原因到利用到补丁(非常适合小白)【转】

    本文转载自:http://blog.csdn.net/u012406115/article/details/72232535 一.         漏洞概述 CVE漏洞链接:http://www.cv ...

  4. 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)

    走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...

  5. HDU3045 Picnic Cows —— 斜率优化DP

    题目链接:https://vjudge.net/problem/HDU-3045 Picnic Cows Time Limit: 8000/4000 MS (Java/Others)    Memor ...

  6. vue开发:移动端图片上传

    因为最近遇到个移动端上传头像的需求,上传到后台的数据是base64位,其中为了提高用户体验,把比较大的图片用canvas进行压缩之后再进行上传.在移动端调用拍照功能时,会发生图片旋转,为了解决这个问题 ...

  7. hdu 2594 Simpsons’ Hidden Talents(两个串的next数组)

    题意:两个字符串s.t,求s和t的最长的相同的前缀和后缀 思路:先求s的next数组,再求t的next数组(即代码中ex数组,此时不是自己与自己匹配,而是与s匹配),最后看ex[len2]即可(len ...

  8. Opencv:10个步骤检测出图片中条形码

    1. 原图像大小调整,提高运算效率 2. 转化为灰度图 3. 高斯平滑滤波 4.求得水平和垂直方向灰度图像的梯度差,使用Sobel算子 5.均值滤波,消除高频噪声 6.二值化 7.闭运算,填充条形码间 ...

  9. Apostrophe not preceded by \

    编辑strings.xml的时候, <string name="start">Let's get started!</string> 报错说:“Apostr ...

  10. I.MX6 system.img unpack repack

    /************************************************************************* * I.MX6 system.img unpack ...