Redis 学习心得二

一、redis是什么?
redis是C语言开发的一个开源的高性能键值对的内存数据库,nosql(非关系型数据库)。
二、redis优势
1、性能优秀 读写快
2、单进程单线程,线程安全 io多路复用(单线程是指网络请求这一模块 持久化时也会用fork()生成子进程)
3、丰富的数据类型,支持五种数据类型(string、hash、list 、set、sorted set)
4、数据持久化
5、主从复制,哨兵,集群 高可用
6、分布式锁
7、中间件 支持发布订阅
三、redis 应用场景
1、排行榜
2、共同好友等等
四、redis不适合场景
1、用户信息
2、数据量大访问低
五、五种数据类型(type 存储类型 encoding是存储方式)
1、String 时 与memcached类似 二进制安全可包含任何数据 最大能存储512M
2、hash 键值集合 适合存储对象
3、list 应用场景多也是最重要的数据结构(链表)之一
4、set 无序去重集合
5、sorted set 有序去重集合
六、使用
spring boot pom文件引入依赖
1、redisTemplate使用 需自定义模板
2、spring cache 集成
七、遇到麻烦
缓存和数据库的一致性,分布式环境下无法避免这一事情发生,只能降低概率,可以使用缓存更新策略,数据库更新后更新缓存,重试缓存失败机制
redis雪崩
key失效 大量查询 直接到数据库 然后boom 方法:每个key随机值失效或者热点不失效
redis击穿
一个热点key有大量请求 然后失效后 boom 方法:设置热点数据不过期或加上互斥锁
redis穿透
找个不存在的数据一直耍,然后boom 方法 接口校验 不合法的直接return还有Bloom Filter
八、快的原因
1、纯内存操作
2、单线程操作,避免了频繁的上下文切换
3、采用了非阻塞I/O多路复用机制
4、数据结构简单
九、淘汰策略
1、volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
2、volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
3、volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
4、allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
5、allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
6、no-enviction(驱逐):禁止驱逐数据,新写入操作会报错
十、哨兵模式实现原理
1.三个定时监控任务:
1.1 每隔10s,每个S节点(哨兵节点)会向主节点和从节点发送info命令获取最新的拓扑结构
1.2 每隔2s,每个S节点会向某频道上发送该S节点对于主节点的判断以及当前Sl节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他S节点以及它们对主节点的判断(做客观下线依据)
1.3 每隔1s,每个S节点会向主节点、从节点、其余S节点发送一条ping命令做一次心跳检测(心跳检测机制),来确认这些节点当前是否可达。

		2.主客观下线:
			2.1主观下线:根据第三个定时任务对没有有效回复的节点做主观下线处理
			2.2客观下线:若主观下线的是主节点,会咨询其他S节点对该主节点的判断,超过半数,对该主节点做客观下线
			
		3.选举出某一哨兵节点作为领导者,来进行故障转移。选举方式:raft算法。每个S节点有一票同意权,哪个S节点做出主观下线的时候,就会询问其他S节点是否同意其为领导者。获得半数选票的则成为领导者。基本谁先做出客观下线,谁成为领导者。
		
4.故障转移(选举新主节点流程):

参考链接: 师长学不动了
睶先森

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值