| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Redis数据结构、分布式锁、穿透、击穿、雪崩、数据一致性及主从同步 -> 正文阅读 |
|
[数据结构与算法]Redis数据结构、分布式锁、穿透、击穿、雪崩、数据一致性及主从同步 |
Redis有哪些数据结构及典型应用场景 1、字符串:可以缓存简单的字符串,也可以缓存json格式的字符串,redis分布式锁,计数器,Session共享,分布式ID。 2、哈希表:key-value,存储对象。 3、列表:列表通过命令的组合,既可以当做栈,也可以做队列来使用,可以缓存类似微信公众号、微博等消息流数据。 4、集合:类似列表,可存储多个元素,不可重复,集合可进行交集、并集、差集操作,实现共同关注、朋友圈点赞等功能。 5、有序集合:集合是无序的,有序集合可以设置顺序,实现排行榜功能 Redis分布式锁底层实现 1、利用setnx来保证,如果key不存在才能获取到锁,如果key存在,则获取不到锁 2、利用lua脚本保证多个redis操作的原子性 3、考虑到锁过期,需要额外一个看门狗定时任务来监听锁是否需要续约 4、考虑到redis节点挂掉后的情况,需要采用红锁的方式来同时向N/2 +1个节点申请锁,都申请了才能证明获取锁成功,这样就算一个节点挂了,锁也不能被其他客户端获取到 缓存穿透:某一时刻访问redis的大量key都在redis中不存在,重点:不存在的数据,解决方案,布隆过滤器,拦截不存在的key 缓存击穿:某一热点key突然失效,导致了大量请求直接访问Mysql数据库,解决方案,不设置过期时间 缓存雪崩:某一时刻大批热点数据同时过期,解决方案,过期时间增加随机值 Redis和Mysql如何保证数据一致性 1、先更新Mysql,再更新Redis,如果缓存更新失败,可能导致不一致; 2、先删除Redis缓存,再更新Mysql,再次查询的时候将数据添加到缓存中;此方案,在高并发下性能较低,且会出现数据不一致的问题,e.g.线程1删除了缓存,正在更新Mysql,此时线程2查询,将数据库的旧数据又查到了缓存中; 3、延时双删,先删除Redis缓存数据,再更新Mysql,延迟几百毫秒再删除Redis缓存数据;延迟的时间考虑到Mysql数据更新时间+主从同步时间; Redis主从复制的核心原理 1、集群启动时,主从库间先建立连接,主库将所有数据同步给从库,从库收到数据后,在本地完成数据加载,此过程依赖内存快照RDB 2、在主库将数据同步给从库的过程中,主库不会阻塞,任然可以正常接收请求。主库会在内存中用专门的replication buffer记录RDB文件生成收到的所有写操作,当主库完成RDB文件发送后,就会把replication buffer中修改操作命令发送给从库,从库再执行这些操作。 3、后续主库和从库都可以处理客户端读操作,写操作只能交给主库处理,主库收到写操作后,依然将写操作发送给从库,实现增量同步。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:38:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |