redis

# redis
## redis的5种基本数据类型
1、String 字符
应用场景:分布式锁、限流
2、list 链表
应用场景:队列
3、set 集合
4、hash 哈希 k-k-v结构
应用场景:缓存用户信息
5、zset 有序集合
应用场景:排行榜
## redis的三种特殊数据类型
Geo:Redis3版本推出的,地理位置定位,用于存储地理位置信息,并对存储的信息进行操作
HtperLogLog:用来做基数统计算法的数据结构,如统计网站的uv
BitMaps:用一个比特位来映射某个元素的状态,在redis中

## 缓存穿透
不合理的查询,一直redis查询不到,导致对db造成巨大压力
产生原因:恶意点击
解决办法:
1、通过token等过滤非法值
2、查询不到设置一个默认值0或null
3、布隆过滤器过滤

## 缓存雪崩
在一段时间内,大量的缓存失效,大量请求直接到达db,导致性能下降甚至宕机
解决办法:key设置不同失效时间,尽量避免一个时间段

## 缓存击穿
指热点key在某个时间过期的时候,有大量的并发请求对这个key,从而导致大量请求达到db
缓存机场看着和雪崩差不多,差别在于雪崩更加严重,多个key失效,暂且认为击穿是雪崩的一个子集吧
解决方案:
1、使用互斥锁。缓存失效时,不立即去加载db数据,先试用setNx之类的原子性操作,成功的时候就去db
2、永不过期,并不是指没有过期时间,指的是当热点key快要过期的时,开启一个异步线程去更新和设置过期时间

## 什么是热点key,如何解决热点key问题
redis中访问量很大的key称为热key
热key问题也是访问量请求很大的问题
解决方案:
1、将热key分散到不同的服务器中
2、使用二级缓存,即jvm本地缓存,减少redis的读请求

## 内存过期策略
1、定时过期
key到了过期时间,立即清除
2、定期过期
定期的去清理过期的key
3、惰性过期
等到使用的时候看到key过期了进行清除

## redis的内存淘汰策略
1、当内存不够时,从设置了过期时间key中选取最少使用进行清理
2、当内存不够时,从所有的key中进行最少使用清理
3、当内存不够时,从设置了过期时间key中进行随机清理
4、当内存不够时,从所有key中进行随机清理
5、直接报出错
6、当内存不够时,从设置了过期时间key中进行lfu算法清理
7、当内存不够时,从所用key中进行luf算法清理

## Redis的持久化机制
### AOF
记录命令行,恢复完整
### RDB
定期快照持久化磁盘,有可能不完整

## Redis实现高可用
redis实现高可用主要是通过部署模式来实现,主要包括三种:主从模式、哨兵模式、集群模式
### 1、主从模式
多台服务器中分为主服务器和从服务器,主服务器负责读写,从服务器负责读。从节点的数据来源于主服务器,同步数据用的是主从复制机制
主从复制包括全量复制和增量复制两种。一般当salve服务器第一次连接master的时候,会进行全量复制,而后续再次同步数据就是增量复制了

### 2、哨兵模式
在主从模式的基本上增加了哨兵机制,哨兵的作用就是检测服务节点可用,包括主服务器和从服务器,当主服务器不可用,自动切换从服务器为主服务器
#### 哨兵的工作模式
1、每个哨兵向他所知的salve、master节点和其他哨兵节点发送ping命令
2、如果其中一个实例ping的时间超过了最大超时时间,这个节点就会被哨兵标记为主观下线
3、当某一个master被标记为主观下线,则正在监视这个master节点的哨兵们以每s一次的频率确认master节点进入了主观下线状态
4、当足够多的哨兵标记master为主观下线状态,则该master被标记为客观下线
5、在一般情况下,哨兵会向master、salve发送10s一次的info命令
6、当master被哨兵标记为客观下线时,哨兵向此master下的所有salve节点发送info的命令由10s一次改为1s一次
7、若没有足够数量的哨兵同意master下线,master的客观下线状态就会被移除;若master节点向哨兵节点发送的ping命令有效返回,则客观下线状态被移除
### 3、集群模式
哨兵模式实现了读写分离,但是每个节点上存储的数据都是一致的,浪费了内存空间,并且不好在线扩容。由此诞生了集群模式,实现了redis的分布式存储,也就是数据分片,不同redis上存储的是不同的数据,不同节点之间通过gossip协议进行通信

## redis是什么协议
resp,专门给redis使用的协议,优点有实现简单、解析速度快、可读性好等优点

## mysql、redis如何保证读写一致性
缓存延时双删
删除缓存重试
读取biglog异步删除缓存

### 缓存延时双删
1、先删除缓存
2、再更新数据库
3、休眠一会,再删除缓存

### 删除缓存重试
多次删除

### bigLog异步删除缓存
通过日志消息来发送mq之类来更新缓存,当然要开启ack
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值