3 个回答
可以采用缓存失效策略:
1、对于读操作,先从 Redis 读取,如果 Redis 中没有,从数据库读取并更新 Redis。对于写操作,更新数据库后,删除或更新 Redis 中的相关数据,使用 Redis 的过期时间或主动删除策略,确保数据一致性。
2、可以使用 Redis 的 DEL 或 EXPIRE 操作,在数据库更新后,使 Redis 中的数据失效或更新。
发布于:3个月前 (01-23) IP属地:四川省
采用同步更新策略:
1、可以在应用程序中使用事务,先更新数据库,然后更新 Redis。如果更新 Redis 失败,可以通过重试或记录日志等方式处理异常。
2、采用消息队列,将更新操作发送到消息队列,然后由消费者同时更新数据库和 Redis,保证更新顺序。
发布于:3个月前 (01-23) IP属地:四川省
常见的方案有以下几个:
1、先更新数据库,再更新缓存。
由于是两个操作,如果多线程并发情况下,很难保证线程之间的顺序,可能导致缓存的是旧数据。一般不推荐这种方案
2、先删除缓存,再更新数据库
两个操作,如果中间执行过程中,缓存被删除,恰好有其他线程来读数据,缓存会被重新预热旧的数据。一般不推荐这种方案
3、先更新数据库,再删缓存。
可能会导致无效删除,但是删除本身具有幂等性。该方案成本最低,一般推荐该方案
4、借助消息中间件,对缓存的数据强制维护,但也只能保证最终一致性。
5、不管最终采用哪种方案,Key都要设置一个过期时间,借助自身的淘汰机制保证数据的更新。
1、先更新数据库,再更新缓存。
由于是两个操作,如果多线程并发情况下,很难保证线程之间的顺序,可能导致缓存的是旧数据。一般不推荐这种方案
2、先删除缓存,再更新数据库
两个操作,如果中间执行过程中,缓存被删除,恰好有其他线程来读数据,缓存会被重新预热旧的数据。一般不推荐这种方案
3、先更新数据库,再删缓存。
可能会导致无效删除,但是删除本身具有幂等性。该方案成本最低,一般推荐该方案
4、借助消息中间件,对缓存的数据强制维护,但也只能保证最终一致性。
5、不管最终采用哪种方案,Key都要设置一个过期时间,借助自身的淘汰机制保证数据的更新。
发布于:6个月前 (11-08) IP属地:四川省
我来回答
您需要 登录 后回答此问题!