hexo 主题测试
redis缓存一致性
redis 缓存一致性有几种方案
先写缓存–>写数据库 如果 写数据库时故障, 则导致缓存中脏数据;
写数据库–> 写缓存; 高并发场景下会产生多个线程对同一缓存的并写问题, 也会产生脏数据;
删除缓存–>写数据库; 如果在删除缓存后 有其他数据查询了为修改的数据库内容 也会导致缓存脏数据;
删除缓存–>写数据库–>[延时后再次删除缓存] 方案是可以的,但是延时多久就需要具体设置了,
写数据库–>删除缓存’ 这种方案可能会产生小概率的脏数据, 但是删除会保证数据的最总一致性;
缓存删除失败怎么办
上面双删 或则先写数据库再删缓存, 都会面临一个问题就是删除缓存失败了怎么办:
重试机制;
重试次数后记性人工处理;
异步重试:
线程;线程池, mq队列, 定时任务, 或则监听mysql的binlog(canal中间件);
数据一致性问题,没有100%的方案,都是预期方案+自动化赋值方案+人工兜底方案
本质上是分布式一致性问题,一个写操作包含了两个操作写数据库和写缓存。试想如果它们在一个事务里问题就很简单,假设是读已提交的级别。事务会保证原子性,也会防止脏读,即在事务提交前,读的还是老数据。
但如果是不在一个事务里,为了高并发我们无法使用分布式锁等方法实现强一致性,所以为了防止删除失败,选择了重试、mq、binlog方法等常用的最终一致性的方法。
这里除了删除失败会导致一致性问题外,还有个写缓存的并发也会导致不一致的问题。写操作会写缓存;读操作发现缓存没有,也会去写缓存。读已提交的隔离级别同样可以防止脏写的问题。这里写数据库后修改不直接写缓存改成删除缓存,延时双删,都是为了解决并发导致的不一致问题。始终没有在读的时候更新缓存这里没有加锁应该是考虑高并发性能的问题。
附件下载:springboot生命周期.xmind
post链接增加
你好,世界123
/hexo2/posts/d516ee14/斜体
==重点显示==
删除线
下划线
加粗
任务列表
你好
[]:
注解
注解内容
This is my website, click the button Butterfly
项目 | 价格 | 数量 |
---|---|---|
计算机 | $1600 | 5 |
手机 | $12 | 12 |
管线 | $1 | 234 |
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
$ hexo new "My New Post"
More info: Writing
Run server
$ hexo server
More info: Server
Generate static files
$ hexo generate
More info: Generating
Deploy to remote sites
$ hexo deploy
More info: Deployment