一文讲解Redis中和本地缓存之间的一致性问题及区别等

一文讲解Redis中和本地缓存之间的一致性问题及区别等

在我做的项目中,为了减轻 Redis 的负载,我追加了一层本地缓存 Caffeine。

三分恶面渣逆袭:延时双删

为了保证本地缓存和 Redis 缓存的一致性,通常采用的策略有:

①、设置本地缓存的过期时间,这是最简单也是最直接的方法,当本地缓存过期时,就从 Redis 缓存中去同步。

②、使用 Redis 的 Pub/Sub 机制,当 Redis 缓存发生变化时,发布一个消息,本地缓存订阅这个消息,然后删除对应的本地缓存。

③、Redis 缓存发生变化时,引入消息队列,比如 RocketMQ、RabbitMQ 去更新本地缓存。

三分恶面渣逆袭:本地缓存/分布式缓存保持一致

由于技术派本身对缓存的一致性要求不是特别高,所以我就采用第一种方式。

另外,在技术派实战项目中,我对缓存的使用场景做了细化。比如说,使用 CacheBuilder 来完成 Guava Cache 的构建,像一些简单的缓存场景,比如说获取菜单分类、获取登录验证码、获取用户转存图片等,都使用了 Guava Cache。

技术派教程:Guava

像首页侧边栏、专栏侧边栏、文章详情侧边栏等缓存场景,就使用了 Caffeine 作为本地缓存,通过 @Cacheable、@CacheEvit、@CachePut 等注解实现,非常轻巧。

技术派教程:Caffeine

而像用户 Session 和网站地图 SiteMap 等缓存场景,就使用了 Redis 来作为缓存。

技术派教程:Redis

如果在项目中多个地方都要使用到二级缓存的逻辑,如何设计这一块?

在设计时,应该清楚地区分何时使用一级缓存和何时使用二级缓存。通常情况下,对于频繁访问但不经常更改的数据,可以放在本地缓存中以提供最快的访问速度。而对于需要共享或者一致性要求较高的数据,应当放在一级缓存中。

本地缓存和 Redis 缓存的区别和效率对比?

Redis 可以部署在多个节点上,支持数据分片,适用于跨服务器的缓存共享。而本地缓存只能在单个服务器上使用。

Redis 还可以持久化数据,支持数据备份和恢复,适用于对数据安全性要求较高的场景。并且支持发布/订阅、事务、Lua 脚本等高级功能。

效率上,Redis 和本地缓存都是存储在内存中,读写速度都非常快。

在处理高并发系统中MySQL和Redis的数据一致问题时,推荐使用消息队列和异步串行化策略来优化删除-写入-删除操作。为了深入了解这些策略,可以参考《MySQLRedis一致性实现策略详解》一文,它提供了针对这一复杂问题的实战解析。 参考资源链接:[MySQLRedis一致性实现策略详解](https://wenku.youkuaiyun.com/doc/4imhnyeyfz?spm=1055.2569.3001.10343) 当执行删除-写入-删除操作时,可以采用以下步骤来保证数据一致性: 1. 在应用程序中,当需要更新数据时,首先向消息队列发送一个删除Redis缓存的命令。 2. 由一个独立的消费者服务从消息队列中取出这个删除命令,并执行删除Redis缓存的操作。 3. 确保删除操作执行后再向MySQL数据库执行更新操作。 4. 更新MySQL数据库后,再次将删除Redis缓存的命令发送到消息队列,由消费者服务异步执行。 5. 为了防止消息队列中的消息丢失,可以在消息发送时设置消息持久化。 6. 如果消费者服务在执行删除操作时发生失败,可以依赖于消息队列的重试机制,而不是依赖于Redis的过期机制。 通过这种方式,可以有效地解决数据不一致问题,因为所有的删除和更新操作都通过消息队列进行了异步串行化处理,这样就大大降低了并发操作导致的数据冲突风险。通过实现这种策略,你可以提高系统的稳定性和可靠性,减少因数据不一致导致的错误。 推荐进一步阅读《MySQLRedis一致性实现策略详解》中的高级内容,深入理解如何在实际项目中应用这些策略,以及如何处理各种边缘情况和潜在的性能瓶颈。 参考资源链接:[MySQLRedis一致性实现策略详解](https://wenku.youkuaiyun.com/doc/4imhnyeyfz?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值