Redis数据一致性实践

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis数据一致性实践

为什么用redis



内存数据库,快;高并发下能有效降低数据库的压力。

但是这里是牺牲了数据强一致性


CAP理论



CAP理论,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中:


  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition tolerance)

分布式系统无法同时满足CAP,要么满足CA,要么CP,要么AP。


缓存和数据库之间一直性的方案



Cache Aside 策略(旁路缓存策略)


读策略


  • 从缓存读取数据
  • 命中返回
  • 没命中从数据库加载数据,并存缓存返回
    写策略
  • 先写库
  • 删缓存

为什么不先删除缓存?因为写库可能没有完成,删掉的缓存重新加载还是脏数据

Cache Aside 策略不保证数据一致性的,但是可以大大减少不一致性的数据。


延时双删


  • 删缓存
  • 更新数据库
  • 休眠
  • 再删缓存

休眠是为了更新库留的时间,可根据业务耗时合理设置。

为什么再删是为了防止写入的时候又脏数据加载到缓存了。


删除重试


主要解决问题时上面的删除缓存的时候出错的情况下脏数据还在,原理是在删除缓存失败的时候引入队列,进行异步删除。


碰到的一个问题



我的数据库被黑掉了, 但redis里面保存了些登录的数据;

这个时候我又初始化了个库,初始化的库用户肯定时没有的,这个时候我用之前的用户竟然发现也能登录进去。


看了下代码发现我登录的时候先查了登录信息的缓存。


思路


  1. 服务端启动把缓存的登录用户信息删了?
    单服务端可以,但是如果是集群就有问题了。
  2. 登录的时候删key
    那和裸db基本一致了
  3. 设置过期时间了
    发现是可行的,如果用户不存在到期后就获取不到用户信息,虽然能登录但是发不了信息,如果发不了信息可以发送个强制退出的命令。

登录流程大概如下


网络异常,图片无法展示
|

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
24天前
|
存储 缓存 NoSQL
蚂蚁金服P7私藏的Redis原理与实践内部笔记
Redis 是完全开源免费的,是一个高性能的key-value类型的内存数据库。整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
65 1
|
24天前
|
缓存 NoSQL 关系型数据库
亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
你们有多少人是被面试官问到过Redis和MySQL的数据一致性如何保证的? 你们是否考虑过在高并发场景下,Redis与MySQL的同步会有哪些问题?该如何解决? 本篇文章会带大家详细了解,让你知其然,知其所以然,吊打面试官。
395 0
亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
|
24天前
|
缓存 NoSQL Java
Spring Cache 缓存原理与 Redis 实践
Spring Cache 缓存原理与 Redis 实践
238 0
|
3天前
|
网络协议 NoSQL Redis
SMC-R 透明加速 TCP 技术,在 Redis 场景下的应用实践 | 干货推荐
SMC-R 作为一套与 TCP/IP 协议平行、向上兼容 socket 接口、底层使用 RDMA 完成共享内存通信的内核协议栈,其设计意图是为 TCP 应用提供透明的 RDMA 服务,同时保留了 TCP/IP 生态系统中的关键功能。
|
11天前
|
存储 缓存 NoSQL
Redis与数据库同步指南:订阅Binlog实现数据一致性
本文由开发者小米分享,探讨分布式系统中的一致性问题,尤其是数据库和Redis一致性。文章介绍了全量缓存策略的优势,如高效读取和稳定性,但也指出其一致性挑战。为解决此问题,提出了通过订阅数据库的Binlog实现数据同步的方法,详细解释了工作原理和步骤,并分析了优缺点。此外,还提到了异步校准方案作为补充,以进一步保证数据一致性。最后,提醒在实际线上环境中需注意日志记录、逐步优化和监控报警。
52 3
|
24天前
|
缓存 运维 NoSQL
面试分享:Redis在大数据环境下的缓存策略与实践
【4月更文挑战第10天】探索Redis在大数据缓存的关键作用,本文分享面试经验及必备知识点。聚焦Redis数据结构(String、List、Set、Hash、Sorted Set)及其适用场景,缓存策略(LRU、LFU、TTL)与过期机制,集群和数据分片,以及性能优化和运维技巧。通过代码示例深入理解,助你面试成功,构建高效缓存服务。
60 4
|
24天前
|
缓存 NoSQL 关系型数据库
MySQL与Redis的默契协作:解析数据一致性难题与解决方案
MySQL与Redis的默契协作:解析数据一致性难题与解决方案
32 0
MySQL与Redis的默契协作:解析数据一致性难题与解决方案
|
24天前
|
缓存 NoSQL 数据库
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
|
24天前
|
弹性计算 NoSQL 测试技术
倚天使用|Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
137530 5
|
24天前
|
SQL 存储 NoSQL
SQL实践篇(三):什么是Redis
SQL实践篇(三):什么是Redis
33 1