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必须考虑的数据一致性解决方案,你有思路么?以下方案你能回答出几种?

  1. 懒加载;

  2. 延迟双删;

  3. 操作队列,使用锁;

  4. 设置超时时间;

  5. 引入其他中间件,Canal。

如果我告诉上面的方案,都行!我想继续和你聊聊你的实际应用场景是什么?你还有思路么?

Redis作为现在互联网企业的标配技术栈,在使用它给我们带来便利的同时,它还会给我们带来很多问题,数据一致性只是其中一个,除此之外,以下问题你又有考虑到么?

  • 缓存击穿、缓存穿透、缓存雪崩你如何解决?

  • 数据倾斜,冷热数据分离怎么考虑?

  • 内存淘汰你如何考虑?

  • 分布式锁的高可用方案你如何考量?

  • Redis的性能优化你如何实现?

  • epoll底层实现细节

  • Redis 6.*新版本特性

    等等,这里就不一一例举了。

上面的问题听过没见过,一知半解,又或者不知道如何和实战结合?没关系。为了让大家搞明白Redis在大厂的实战场景以及它的底层实现细节(面试极爱问)。

我特邀请James(前阿里)& 大飞(前美团)来给大家分享一堂有关Redis的课程《千万级Redis架构,底层原理剖析&企业级实战》,本堂课程将结合实战&高频面试问题来带大家一探Redis的体系知识。

添加助教老师微信“lzc1314592”或扫面下方二维码领取课程预习资料

本号专属福利来啦——前50名限时优惠~原价199元,限时优惠0.1元????

而且为了帮助大家搞定大厂面试,我特意申请了专属的额外福利,当晚完成听课后即可找助手领取:学习笔记&面试资料。

长按上图添加助教老师微信“lzc1314592”

回复“5102”领取【2021 Java大厂面试解析+后端进阶完整笔记】

​Redis的各种“坑”,你知道多少?相关推荐

  1. 阿里云服务器 搭建单体redis 以及踩坑

    在搭建阿里云服务器的过程中,踩坑很多,特写此文: 简介 Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序 ...

  2. Spring Boot集成Redis,这个坑把我害惨了!

    最近项目中使用SpringBoot集成Redis,踩到了一个坑:从Redis中获取数据为null,但实际上Redis中是存在对应的数据的.是什么原因导致此坑的呢? 本文就带大家从SpringBoot集 ...

  3. redis 失效时间单位是秒还是毫秒_经常用Redis,这些坑你知道吗?

    文章转载自二马读书,作者二马读书 作者简介:曾任职于阿里巴巴,每日优鲜等互联网公司,任技术总监,15年电商互联网经历. 近些年,Redis凭借在性能.稳定性和高可扩展性上的卓越表现,基本上已经成了互联 ...

  4. 玩redis遇到的坑-redis重启之后丢失数据

    最近小编在玩redis其中遇到很多坑,其中遇到的一个坑就是刚开始学习的时候-当redis重启后之前存的数据都会被清除了 这一点是新手最容易入的坑,当然我也是新手.下面介绍一下解决方法吧 第一步 在re ...

  5. linux的iso镜像机没有redis,在Linux系统上安装Redis【避坑篇】

    redis官网下载地址,当前稳定版本是6.0.0. redis的下载 具体下载方式依照当前网页下面提供的命令即可: # 下载及安装 wget http://download.redis.io/rele ...

  6. supervisor 管理 redis 遇到的坑

    1.首先要把 redis.conf 配置文件中 修改 daemonize = no (关闭redis自带的守护进程),如果不关闭会报(entered FATAL state, too many sta ...

  7. 本地客户端远程连接不到阿里云redis遇到的坑

    我的问题是只修改了一个安全组可能没有修改对,所以就把两个安全组都修改就解决问题了 首先linux中的redis配置都已经按照网上的配置已经更改,注释bind 127.0.0.0. 修改protecte ...

  8. jedis使用_网易架构师心得:Springboot下使用redis踩过的坑

    点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 首先总结了redis服务端单线程工作模型,redis四种部署方式及使用场景,然后从源码的角 ...

  9. 美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout

    转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 1. 背景: 大部分互联网公司都会有Mysql或者Oracle的DBA,但是在Nosql方面一般不会设置 ...

最新文章

  1. VMwareWorkstation设置U盘启动(或U盘使用)
  2. mysql oracle 表空间大小_最简单的查询表空间的使用量、剩余量的方法 - Focus on Oracle、MySQL and GNU/Linux...
  3. 背景宽高随文本变化_中科大提出ContourNet:更准确的任意形状场景文本检测新方法...
  4. qaxobject控制word到某一行_太简单了!Excel信息导出为每页打印一行,且批量添加同一表头...
  5. 【React 基础】之 React 面向组件编程
  6. sql查询非11位非数字_非生产环境SQL查询性能调优技巧
  7. 如何遍历给定目录中的文件?
  8. git本地给远程仓库创建分支
  9. Java 设计模式 之 装饰器模式(Decorator)
  10. linux程序设计第四版中文pdf下载地址
  11. 多种视觉SLAM方案对比
  12. java是用什么语言写的_java用什么开发出来的?
  13. Nat Methods | 德州大学西南医学中心王涛/王莉等开发空间转录组数据降噪的新方法...
  14. 医学检验论文题目大全汇总
  15. 解决TortoiseSVN文件夹没有绿色对号
  16. springboot中集成servlet
  17. 【已解决】Try using tf.compat.v1.experimental.output_all_intermediates(True).
  18. (3)mifare卡读写器开发心得『转』--整理重发贴
  19. js实现页面的上滑下拉功能
  20. Android中的TCP协议与UDP协议

热门文章

  1. c语言中 调用函数除函数名外,【单选题】在 C 语言中 , 调用函数除函数名外 , 还必须有 ( ). (10.0分) A. 函数预说明 B. 实际参数 C. ( ) D. 函数返回值...
  2. php 伪造请求连接,phpcurl发送伪造请求
  3. Linux内核 获取本机mac,Linux获取本机MAC地址
  4. python 无序列表中第k大元素_查询无序列表中第K小元素
  5. dynamo怎样由线生成体_语音生成效果评价不再逐句进行:谷歌提出长文本语音生成评价新系统...
  6. cnn文本分类python实现_CNN文本分类
  7. redirect_uri 域名与后配置不一致是什么意思_免费 amp; 无限的域名/企业邮箱
  8. Valgrind快速入门指南
  9. 求正整数N(N1)的质因数的个数,相同的质因数需要重复计算(java)
  10. 1003. 检查替换后的词是否有效