怎样保证mysql和redis的双写一致性
一、场景:
双写一致性指的是当我们更新了数据库的数据之后redis中的数据 也要同步去更新。使用redis读取数据的流程,当用户访问数据的时候,会先从缓存中读取数据,如果命中缓存的话,那么直接把缓存中的数据返回给用户,如果缓存中没有数据的话,先查询数据库把查询到的数据保存到缓存中,然后返回给用户。
二、保证双写一致性的策略
1、先更新缓存,再更新数据库
2、先更新数据库,再更新缓存
3、先删除缓存,再更新数据库
4、先更新数据库,再删除缓存
三,四种策略的优缺点
1、先更新缓存,再更新数据库
问题很明显如果更新缓存成功,更新数据库失败,就会造成缓存的脏数据
2、先更新数据库,再更新缓存
如果再高并发的情况下,可能会存在如下的情况,线程A更新了数据库,如果由于网络或者其他的原因,线程A还没来得及更新缓存,这时候有一个进程B更新了数据库,更新了缓存,这时候进程A才更新缓存,这时候就会导致线程B对缓存的更新丢失了,像事务丢失的情况
3、先删除缓存,再更新数据库
这种策略可能已经避免掉了,策略2中缓存丢失的情况,但是再高并发的情况下,也会有不一致的情况,比如线程A做写操作,首先删除缓存然后准备跟新数据库,这时候,线程B执行了写操作,没有命中缓存,然后查询数据库,这时候读取的是旧值,并把查询到的旧值保存到缓存中,接着线程A完成了数据库的更新,这时候数据库和缓存又出现了不一致的情况,解决方案:我们只要再线程A,完成数据库的更新之后,稍作延迟再删除一次缓存,也叫做延迟双删。这里的延迟时间一定要大于业务的一次读操作的时间。
4、先更新数据库,再删除缓存
再高并发的情况下,也会有不一致的情况,比如线程A做读取数据的操作,正准备写入缓存的时候,线程B更新了数据库,然后执行了删除缓存的操作,这时候线程A才把旧值写入到缓存中,虽然这种情况出现的概率比较低,因为写操作的时候要大于一次读操作的时间的。作为替换,可以将原话简化并重新组织结构: 为处理删除失败的情况,建议采用延迟双删方案。即使延时双删仍存在问题,也可反复进行删除操作,直到缓存被彻底清除。如果删除失败,我们可以将需要删除的键放入队列中,一遍又一遍地尝试删除,直到删除成功为止。
以上是怎样保证mysql和redis的双写一致性的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Redis集群模式通过分片将Redis实例部署到多个服务器,提高可扩展性和可用性。搭建步骤如下:创建奇数个Redis实例,端口不同;创建3个sentinel实例,监控Redis实例并进行故障转移;配置sentinel配置文件,添加监控Redis实例信息和故障转移设置;配置Redis实例配置文件,启用集群模式并指定集群信息文件路径;创建nodes.conf文件,包含各Redis实例的信息;启动集群,执行create命令创建集群并指定副本数量;登录集群执行CLUSTER INFO命令验证集群状态;使

可以通过以下步骤打开 phpMyAdmin:1. 登录网站控制面板;2. 找到并点击 phpMyAdmin 图标;3. 输入 MySQL 凭据;4. 点击 "登录"。

理解 Redis 源码的最佳方法是逐步进行:熟悉 Redis 基础知识。选择一个特定的模块或功能作为起点。从模块或功能的入口点开始,逐行查看代码。通过函数调用链查看代码。熟悉 Redis 使用的底层数据结构。识别 Redis 使用的算法。

使用 Redis 指令需要以下步骤:打开 Redis 客户端。输入指令(动词 键 值)。提供所需参数(因指令而异)。按 Enter 执行指令。Redis 返回响应,指示操作结果(通常为 OK 或 -ERR)。

PHPMyAdmin安全防御策略的关键在于:1. 使用最新版PHPMyAdmin及定期更新PHP和MySQL;2. 严格控制访问权限,使用.htaccess或Web服务器访问控制;3. 启用强密码和双因素认证;4. 定期备份数据库;5. 仔细检查配置文件,避免暴露敏感信息;6. 使用Web应用防火墙(WAF);7. 进行安全审计。 这些措施能够有效降低PHPMyAdmin因配置不当、版本过旧或环境安全隐患导致的安全风险,保障数据库安全。

phpMyAdmin不仅仅是数据库管理工具,它能让你深入理解MySQL,提升编程技巧。核心功能包括CRUD和SQL查询执行,理解SQL语句的原理至关重要。高级技巧包括导出/导入数据和权限管理,需要深入的安全理解。潜在问题包括SQL注入,解决方案是参数化查询和备份。性能优化涉及SQL语句优化和索引使用。最佳实践强调代码规范、安全实践和定期备份。

可以采用以下两种方法清除 Redis 中的数据:FLUSHALL 命令:删除数据库中所有键和值。CONFIG RESETSTAT 命令:重置数据库所有状态(包括键、值和其他统计信息)。

Redis数据过期策略有两种:定期删除:定期扫描删除过期键,可通过 expired-time-cap-remove-count、expired-time-cap-remove-delay 参数设置。惰性删除:仅在读取或写入键时检查删除过期键,可通过 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 参数设置。
