《Redis开发与运维》快速笔记(一)
1.前言&基本介绍
在原始的系统架构中,我们都由程序直接连接DB,随着业务的进一步开展,DB的压力越来越大,为了缓解DB的这一压力,我们引入了缓存,在程序连接DB中加入缓存层,
从而减轻数据库压力,而且缓存一般存在于内存中,相比于存在硬盘中的DB在读取速度上绝对是比DB高几个等级。下面我们来简单聊聊关于缓存几个东西
2.缓存的优缺点
缓存的优点就是“快”,一个快字基本能概括了。如上文说的加速读写,分流对数据库的压力,归根结底就是对快字的应用及其本身,缺点主要是如下三点:
1.数据不一致性:DB的数据与缓存中的数据不一致
2.开发成本:需要同时处理缓存层跟DB层的逻辑,增加了开发成本
3.维护成本:例如需要对缓存层进行一个监控,增加了运维的成本
3.缓存更新策略
在上面中我们说到数据不一致性,一般来说缓存也是需要有生命周期的,需要被更新或者删除,这样才能保持缓存的可控性,在缓存更新中有如下三点:
4.缓存粒度
假设一张用户表有20个字段,那是否需要将全部字段都放到缓存中?这就涉及到一个粒度的问题!数据字段放少了,就会出现了不通用的问题;数据字段放多了,空间占用也多,序列化跟反序
列化消耗的性能更多了。在粒度这个问题上还是需要根据通用性,代码维护,性能跟空间占用这几点上进行考虑, 简单来说就是靠经验了
5.缓存穿透
缓存穿透指的是查询一个不存在的数据,DB跟缓存都不会命中的数据。这样的话每次查询都会到DB层中查询,DB层负载加大还有可能造成死机,这样缓存就失去了保护DB层的意义。出现这种情况有两种:1.攻击,爬虫的大量请求;2.业务自身有问题。现在基本流行的解决方案有以下两种:
5.1 缓存空对象,当DB层也查不到数据的时候,缓存一个null值进缓存,这样下一次的话就直接从缓存中读取,保护了后端。不过这种带来的后果是缓存了更多的键,需要更多的空间,而且不可控性增加
6.雪崩优化
指的是原先的缓存层承载了大量的请求,有效的保护了DB层,但是假如缓存层炸了,那所有的请求都直接穿透到DB层,会容易造成DB层也炸了。就这个问题一直没有一个很完美的解决方案,可以从下列两个方面进行思考:
7.总结
最后用Xmind总结一下:

《Redis开发与运维》快速笔记(一)的更多相关文章
- Redis开发与运维学习笔记
<Redis开发与运维>读书笔记 一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...
- Redis开发与运维:SDS
STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...
- Redis 开发与运维
Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...
- Redis实战(七)Redis开发与运维
Redis用途 1.缓存 Redis提供了键值过期时间设置, 并且也提供了灵活控制最大内存和内存溢出后的淘汰策略. 可以这么说, 一个合理的缓存设计能够为一个网站的稳定保驾护航. 2.排行榜系统 Re ...
- 《Redis开发与运维》
第1章 初识Redis 1. Redis介绍: Redis是一种基于键值对(key-value)的NoSQL数据库. 与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).has ...
- 《Redis开发与运维》读书笔记
一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争问题 基于键值对的数据结构,支持的数据结构丰富.它 ...
- Redis开发与运维
常用命令 redis-server启动redis redis-server /opt/redis/redis.conf 配置启动 redis-server --port 6379 --dir / ...
- redis 开发与运维 学习心得1
主要是命令相关 第一章 初识Redis 1.redis是基于键值对的NoSQL. 2.redis的值可以是 string, hash, list, set, zset, bitmaps, hyperl ...
- Redis开发与运维:linux安装
Linux 安装 我的系统是inux 系统,官网下载 https://redis.io/download redis-5.0.5.tar.gz 解压: 编译安装: 官网和文档说得已经很清楚了,现在就执 ...
随机推荐
- java 获取时间戳
//java 获取时间戳 long currentTime=System.currentTimeMillis();
- myeclipse -vmargs -Xmx512m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=64m
myeclipse.ini把里面的参数为 -vmargs -Xmx512m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=64m 以对于我而言,我只要把 ...
- vue中导出Excel表格
项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体对待. 1.首先我们需要安装 ...
- [RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/71515020 Platform: RockchipOS: Android 6.0Kernel ...
- POJ2516 Minimum Cost —— 最小费用最大流
题目链接:https://vjudge.net/problem/POJ-2516 Minimum Cost Time Limit: 4000MS Memory Limit: 65536K Tota ...
- 机器学习 Hidden Markov Models 1
Introduction 通常,我们对发生在时间域上的事件希望可以找到合适的模式来描述.考虑下面一个简单的例子,比如有人利用海草来预测天气,民谣告诉我们说,湿漉漉的海草意味着会下雨,而干燥的海草意味着 ...
- 机器学习 Hidden Markov Models 2
Hidden Markov Models 下面我们给出Hidden Markov Models(HMM)的定义,一个HMM包含以下几个要素: ∏=(πi)表示初始状态的向量.A={aij}状态转换矩阵 ...
- 用mkdirs创建目录
import java.io.*; class a { public static void main(String args[]) { createDir("c:/fuck"); ...
- bzoj2337 XOR和路径——高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2337 异或就一位一位考虑: x为到n的概率,解方程组即可: 考虑了n就各种蜜汁错误,所以索性 ...
- Autolayout UIScrollView
http://www.cocoachina.com/ios/20141011/9871.html Xcode6中如何对scrollview进行自动布局(autolayout) Xcode6中极大的 ...