Redis 缓存 一致性

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis 缓存 一致性

双写一致性 :当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。

修改了mysql的数据同时也要修改redis的数据,要保证redis缓存的数据和mysql的数据一致。

读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间。

写操作:延迟双删

删除缓存

1.为什么要双删?

先删除缓存,或者先修改数据库,都容易出现数据不一致的情况。所以需要删除两次缓存。

2.为什么要延时删除?

因为主从数据库是有延时性的,所以等到数据库同步之后再延时删除。值得注意的是这种方法也只能做到降低出现脏数据的概率,并不能保证完全一致。

redis缓存存的都是读多写少的数据,如果是写多读少的数据也用不着缓存了,直接写到数据库就好。

共享锁:读锁readlock,加锁之后,其他现场可以共享读操作

排他锁:独占锁writeLock也叫,加锁之后,阻塞其他线程读写操作

读数据。写数据

共享锁:读数据。读读不互斥,写互斥。

排他锁:读写互斥

1.为什么要双删?

先删除缓存,或者先修改数据库,都容易出现数据不一致的情况。所以需要删除两次缓存。

2.为什么要延时删除?

因为主从数据库是有延时性的,所以等到数据库同步之后再延时删除。值得注意的是这种方法也只能做到降低出现脏数据的概率,并不能保证完全一致。

redis缓存存的都是读多写少的数据,如果是写多读少的数据也用不着缓存了,直接写到数据库就好。

共享锁:读锁readlock,加锁之后,其他现场可以共享读操作

排他锁:独占锁writeLock也叫,加锁之后,阻塞其他线程读写操作

读数据。写数据

共享锁:读数据。读读不互斥,写互斥。

排他锁:读写互斥

允许延时一致的业务,采用异步通知

1.使用mq中间件,更新数据之后,通知缓存删除

2.利用canal中间件,不需要修改业务代码,伪装为mysql的一个从节点,canal通过读取binlog数据更新缓存

强一致性的,采用redisson提供的读写锁

1)共享锁:读锁readlock,加锁之后,其他线程可以共享读操作

2)排他锁:独占锁writeLock,加锁之后,阻塞其他线程读写操作

异步通知保证数据的最终一致性


相关实践学习
基于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
目录
相关文章
|
19天前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
20天前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
3天前
|
存储 缓存 NoSQL
解决Redis缓存击穿问题的技术方法
解决Redis缓存击穿问题的技术方法
15 2
|
3天前
|
缓存 NoSQL Redis
解决 Redis 缓存穿透问题的有效方法
解决 Redis 缓存穿透问题的有效方法
13 2
|
2月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
2月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel
|
2月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题
|
2月前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
60 0
|
2月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】使用StackExchange.Redis,偶发ERROR - Timeout performing HSET (15000ms)
【Azure Redis 缓存】使用StackExchange.Redis,偶发ERROR - Timeout performing HSET (15000ms)
|
2月前
|
缓存 NoSQL Java
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务
下一篇
无影云桌面