Redis的各种“坑”,你知道多少?
Redis做为目前互联网标配的技术中间件,在缓存数据库(K-V)占有市场率一直雄霸榜首。不管是传统项目重构,还是现在流行的分布式微服务架构,它都有广泛应用。
物联网系统????
传统项目网优系统重构????
而且自从Redis 6.*版本正式发布,里面包含多项重大功能更新使其性能又进一步大幅度提升。更加巩固了它在缓存数据库的“一哥”地位。
它在架构中最基本的用法,是分担数据压力,提升并发量与用户感知度。
比如:通过以下的架构,将部分非事务的操作、高频展示信息、静态信息等存放在Redis(用户基本信息、权限信息、区域信息、库存等)。
用户请求数据时,会先从Redis获取,如果Redis有,就直接返回,如果Redis没有,再从数据库里获取,并缓存一份至Redis,下次用户再请求时,就不用访问数据库,节省宝贵的数据库资源,并提升用户的感知度(什么操作和硬盘打交道多了,肯定快不起来)。
这时,大厂高频面试题来了,数据是从数据库复制到Redis中的,查询的时候一切安好,如果此时数据发生了变化,如何保证两者的数据一致性?请结合你的项目经验进行阐述。
问题我详细地描述一下:数据在Redis和MySQL都存储了一份,那你在更新数据时,怎么保证两边的数据一致?先更新数据库,再更新Redis?如下图所示:
步骤1:线程1更新MySQL,库存=100
步骤2:线程1更新Redis,库存=100
步骤3:线程2更新MySQL,库存=90
步骤4:线程2更新MySQL,库存=90
有并发线程1和2,他们两都需要更新库存,如果此时命令执行顺序按照预期行为走了,好像没什么问题。
但是,如果在远程调用过程中,网络出了问题(抖动、超时、阻塞等)呢?如下图所示:
步骤1:线程1更新MySQL,库存=100
步骤2:线程2更新MySQL,库存=90
步骤3:线程2更新Redis,库存=90
步骤4:线程1更新MySQL,库存=100
发现问题所在了吧,数据不符合基本逻辑了,这时候在Redis获取的数据是错的,和数据库的信息不一致(数据库中是90,而Redis中是100)。
当操作序列没有严格按照请求的先后顺序执行时,会引发并发安全问题。
没错,这就是在架构使用Redis必须考虑的数据一致性解决方案,你有思路么?以下方案你能回答出几种?
懒加载;
延迟双删;
操作队列,使用锁;
设置超时时间;
引入其他中间件,Canal。
如果我告诉上面的方案,都行!我想继续和你聊聊你的实际应用场景是什么?你还有思路么?
Redis作为现在互联网企业的标配技术栈,在使用它给我们带来便利的同时,它还会给我们带来很多问题,数据一致性只是其中一个,除此之外,以下问题你又有考虑到么?
缓存击穿、缓存穿透、缓存雪崩你如何解决?
数据倾斜,冷热数据分离怎么考虑?
内存淘汰你如何考虑?
分布式锁的高可用方案你如何考量?
Redis的性能优化你如何实现?
epoll底层实现细节
Redis 6.*新版本特性
等等,这里就不一一例举了。
上面的问题听过没见过,一知半解,又或者不知道如何和实战结合?没关系。为了让大家搞明白Redis在大厂的实战场景以及它的底层实现细节(面试极爱问)。
我特邀请James(前阿里)& 大飞(前美团)来给大家分享一堂有关Redis的课程《千万级Redis架构,底层原理剖析&企业级实战》,本堂课程将结合实战&高频面试问题来带大家一探Redis的体系知识。
添加助教老师微信“lzc1314592”或扫面下方二维码领取课程预习资料
本号专属福利来啦——前50名限时优惠~原价199元,限时优惠0.1元????
而且为了帮助大家搞定大厂面试,我特意申请了专属的额外福利,当晚完成听课后即可找助手领取:学习笔记&面试资料。
长按上图添加助教老师微信“lzc1314592”
回复“5102”领取【2021 Java大厂面试解析+后端进阶完整笔记】
Redis的各种“坑”,你知道多少?相关推荐
- 阿里云服务器 搭建单体redis 以及踩坑
在搭建阿里云服务器的过程中,踩坑很多,特写此文: 简介 Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序 ...
- Spring Boot集成Redis,这个坑把我害惨了!
最近项目中使用SpringBoot集成Redis,踩到了一个坑:从Redis中获取数据为null,但实际上Redis中是存在对应的数据的.是什么原因导致此坑的呢? 本文就带大家从SpringBoot集 ...
- redis 失效时间单位是秒还是毫秒_经常用Redis,这些坑你知道吗?
文章转载自二马读书,作者二马读书 作者简介:曾任职于阿里巴巴,每日优鲜等互联网公司,任技术总监,15年电商互联网经历. 近些年,Redis凭借在性能.稳定性和高可扩展性上的卓越表现,基本上已经成了互联 ...
- 玩redis遇到的坑-redis重启之后丢失数据
最近小编在玩redis其中遇到很多坑,其中遇到的一个坑就是刚开始学习的时候-当redis重启后之前存的数据都会被清除了 这一点是新手最容易入的坑,当然我也是新手.下面介绍一下解决方法吧 第一步 在re ...
- linux的iso镜像机没有redis,在Linux系统上安装Redis【避坑篇】
redis官网下载地址,当前稳定版本是6.0.0. redis的下载 具体下载方式依照当前网页下面提供的命令即可: # 下载及安装 wget http://download.redis.io/rele ...
- supervisor 管理 redis 遇到的坑
1.首先要把 redis.conf 配置文件中 修改 daemonize = no (关闭redis自带的守护进程),如果不关闭会报(entered FATAL state, too many sta ...
- 本地客户端远程连接不到阿里云redis遇到的坑
我的问题是只修改了一个安全组可能没有修改对,所以就把两个安全组都修改就解决问题了 首先linux中的redis配置都已经按照网上的配置已经更改,注释bind 127.0.0.0. 修改protecte ...
- jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 首先总结了redis服务端单线程工作模型,redis四种部署方式及使用场景,然后从源码的角 ...
- 美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout
转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 1. 背景: 大部分互联网公司都会有Mysql或者Oracle的DBA,但是在Nosql方面一般不会设置 ...
最新文章
- VMwareWorkstation设置U盘启动(或U盘使用)
- mysql oracle 表空间大小_最简单的查询表空间的使用量、剩余量的方法 - Focus on Oracle、MySQL and GNU/Linux...
- 背景宽高随文本变化_中科大提出ContourNet:更准确的任意形状场景文本检测新方法...
- qaxobject控制word到某一行_太简单了!Excel信息导出为每页打印一行,且批量添加同一表头...
- 【React 基础】之 React 面向组件编程
- sql查询非11位非数字_非生产环境SQL查询性能调优技巧
- 如何遍历给定目录中的文件?
- git本地给远程仓库创建分支
- Java 设计模式 之 装饰器模式(Decorator)
- linux程序设计第四版中文pdf下载地址
- 多种视觉SLAM方案对比
- java是用什么语言写的_java用什么开发出来的?
- Nat Methods | 德州大学西南医学中心王涛/王莉等开发空间转录组数据降噪的新方法...
- 医学检验论文题目大全汇总
- 解决TortoiseSVN文件夹没有绿色对号
- springboot中集成servlet
- 【已解决】Try using tf.compat.v1.experimental.output_all_intermediates(True).
- (3)mifare卡读写器开发心得『转』--整理重发贴
- js实现页面的上滑下拉功能
- Android中的TCP协议与UDP协议
热门文章
- c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分)
A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...
- php 伪造请求连接,phpcurl发送伪造请求
- Linux内核 获取本机mac,Linux获取本机MAC地址
- python 无序列表中第k大元素_查询无序列表中第K小元素
- dynamo怎样由线生成体_语音生成效果评价不再逐句进行:谷歌提出长文本语音生成评价新系统...
- cnn文本分类python实现_CNN文本分类
- redirect_uri 域名与后配置不一致是什么意思_免费 amp; 无限的域名/企业邮箱
- Valgrind快速入门指南
- 求正整数N(N1)的质因数的个数,相同的质因数需要重复计算(java)
- 1003. 检查替换后的词是否有效