数据库面试题:Redis如何保证数据一致性
Redis缓存如何保证数据一致性
一. Redis概述
- redis是一个内存数据库, 因此数据基本上都存在于内存当中
- 但是Redis会定时以追加或者快照的方式刷新到硬盘中.
- 由于redis是一个内存数据库, 所以读取写入的速度是非常快的, 所以经常被用来做数据, 页面等的缓存。
二.为什么会出现数据不一致
2.1 一般的读写模式
当Redis作为缓存的时候,经典的读写模式如下:
(1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应
(2)更新的时候,先删除缓存,然后再更新数据库
问题:
- 上述的读写模式看似没有任何问题,但是在高并发及多线程的情况下会出现数据不一致的情况。
2.2 单库产生数据不一致
发生条件:
- 同一时间发生了并发读写请求,比如A(写) ,B (读),2个请求
发生过程:
- A发送更新请求,先删除缓存,删除缓存后由于某种原因被阻塞
- B发送读请求,此时缓存无效,直接读取数据库,再将数据库的数据更新到缓存中
- 之后A再写数据库
- 这时候缓存和数据库就产生了数据不一致的问题,缓存中的数据就是脏数据
2.2 主从同步,读写分离产生数据不一致
主从同步,读写分离:实际上就是读数据库都是读从库,写数据库是写主库,然后进行主从同步。
过程:
- A请求发送一个写操作到服务端,第一步就会淘汰掉cache
- A请求写主数据库,往主数据库写了最新的数据。
- B请求发送一个读操作,读cache,因为cache淘汰,所以为空
- B请求继续读DB,这个时候读的是从库,此时主从同步还没同步成功。读出脏数据,然后脏数据写入cache
- 最后数据库主从同步完成。这时候还是会发生数据不一致的情况。
三. 数据不一致解决方案
3.1 缓存双淘汰法
- 在写库前后都进行redis.del(key)操作,并且设定合理的超时时间。这样最差的情况是在超时时间内存在不一致,当然这种情况极其少见,可能的原因就是服务宕机。此种情况可以满足绝大多数需求。 当然这种策略要考虑redis和数据库主从同步的耗时,所以在第二次删除前最好休眠一定时间,比如500毫秒,这样毫无疑问又增加了写请求的耗时。
3.2 异步淘汰缓存
- 增加一个线下的读取binlog异步淘汰缓存模块,在读取binlog总的数据,然后进行异步淘汰。
过程:
MySQL binlog增量发布订阅消耗+消息队列+增量数据更新到redis
1)读取请求转到Redis:热数据基本上在Redis
2)写入请求转到MySQL:增加删除和 修改MySQL
3)更新Redis数据:MySQ数据操作binlog更新为Redis
数据库面试题:Redis如何保证数据一致性相关推荐
- 分布式缓存数据库面试题redis
redis和memcached什么区别?为什么高并发下有时单线程的redis比多线程的memcached效率要高? 区别: 1.mc可缓存图片和视频.rd支持除k/v更多的数据结构; 2.rd可以使用 ...
- MySQL数据库面试题(2021最新版)
文章目录:http://github.crmeb.net/u/defu 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 ...
- 复试面试-数据库面试题
将网上常见的数据库面试题整理一下,方便自己和有需要的人学习. 1.事务 概念:访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位.事务由事务开 ...
- 2020字节跳动数据库面试题及答案(二)—— NoSQL部分
本文答案整理为原创,转载请说明出处 文章目录 redis 的底层数据结构有哪些 redis 中的 SDS 和 C 语言中的字符串有什么区别,优点是什么 redis 中的字典是如何实现的,如何解决冲突和 ...
- datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...
原文: https://www.enmotech.com/web/detail/1/794/1.html 两万字全面论述数据库面试题(上) https://www.enmotech.com/web/d ...
- 计网/数据库面试题(更新中ing~~)
计网/数据库面试题(更新中ing~~) <计算机网络> 1. OSI七层模型.设备 (传输层)协议的多路分用和复用 2. TCP/IP四层模型==五层模型 (传输层)TCP和UDP协议对比 ...
- redis主从保证数据一致性
redis主从保证数据一致性 前言 在redis中为了保证redis的高可用,一般会搭建一种集群模式就是主从模式. 主从模式可以保证redis的高可用,那么redis是怎么保证主从服务器的数据一致性的 ...
- SQL编程软件测试,编程程题库之软件测试8大常见数据库面试题
原标题:编程程题库之软件测试8大常见数据库面试题 一.事务的四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前其它会话不能看到过程一致性,事务前后,数据总额一致持久性,一旦事务提交 ...
- C# 联合查询_直击数据库面试题:数据库查询语句
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...
- Oracle数据库面试题 精选 Oracle 面试题
Oracle数据库面试题 1.解释冷备份和热备份的不同点以及各自的优点 冷备份 发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法.适用于所有模式的数据库. 优点 1. 是非常快速 ...
最新文章
- Java主要知识结构
- wxWidgets:运行时类型信息 (RTTI)
- 前端程序员书桌上不可缺少的CSS书籍
- 独家分享| 2019年校招大厂算法自己经历和好友经验(大疆,百度,腾讯……)
- socket,与粘包
- WEB版一次选择多个文件进行批量上传(Plupload)的解决方案
- 程序员必杀技——《编程全能词典》即将震憾上市
- Java面向对象 第5节 抽象类和接口
- ROS2 Galactic teb_local_planner
- unity打开摄像头
- 【金融量化】我以为我是食物链顶层的收割者,想不到只是别人手中的镰刀
- Mybatis学习整理
- 食品加工企业自营商城小程序开发,帮助企业增加销售渠道,提高销量
- Navicat 连接阿里云上的数据库
- Polkadot + DeFi | 透明公平、高效交易的去中心化金融未来可期
- windows下根据端口号查杀进程脚本(BAT脚本)
- poj3253切割木板(哈夫曼树) 贪心【优先队列】
- 捞王二闯IPO,谁是“火锅第三股“?||Review
- compressGOP函数代码跟踪
- 高等数学学习笔记——第二十一讲——函数的一致连续性
热门文章
- phpstudy修改mysql账户名_phpstudy怎么更改用户名
- SI24R1兼容NRF24L01P DEMO板使用说明书
- 业务测试如何无缝转成测试开发?
- 美股全线收涨 特斯拉涨超7% 瑞幸大跌近13%
- B站有哪些程序员大牛up主?
- 拼多多商品详情页API接口、拼多多APP详情API接口、拼多多商品销量API接口、拼多多商品列表API接口、拼多多详情API接口
- linux aria2安装路径,Aria2 Linux 完整安装及使用教程
- ps里文字变形、、、
- stm32晶振匹配电容_晶振的匹配电容选择
- 关于等价鞅、反等价鞅、剀利公式、赌徒输光定理(非常有启发意义)