Redis主要设计原理

  • redis高并发

1 redis是单线程程序,所以不用加锁

2 redis数据都存储在内存中,操作内存的数据极快

3 底层使用多路复用IO

 

  • redis集群和高可用

1 redis改用集群的方式,并且每个节点都支持一主多倍

2 redis集群采用哈希槽分区算法:

(1)redis集群中设计了16384个槽位(16384和redis节点之间发送心跳包的大小有关,16384够用且不会导致心跳包太大),每个节点负责一部分槽位。

(2)计算槽位:slot = CRC16(key)%16384。

(3)节点的删除或增加:只用移动部分数据。

4 redis每个节点都可以是一主多从,读写分离。

 

  • redis持久化

RDB:指定一定时间内一定的写操作次数,将内存中的数据保存到磁盘。优点是操作少,确定是如果在两次写磁盘之前宕机会导致数据丢失。

AOF:将每次写操作都记录。优点是每一次的写操作都记录在文件中,但是随着写错的次数过多会导致AOF文件越来越大,redis为了决绝AOF文件越来越大的问题设计了重写机制,当aof文件超过设置的阈值时,会将当前内存的值读到新文件中并替换旧文件。

 

  • redis应用场景

1 保存热点数据,避免太多请求打到db

2 分布式限流

3 分布式锁:使用Lua脚本(包含setnx和expire两条指令)

  • redis常见问题

1 redis缓存雪崩 穿透 击穿

(1)雪崩是指的大量key同时失效,请求打到db。解决办法是:key的过期时间不要设置得都一样。

(2)穿透是值redis和db都没有的key,一般是攻击者的请求,解决办法是参数校验

(3)缓存击穿是单个key的量比较大,如果key失效,导致大量请求打到db,解决办法是:设置过期时间长一点或者限流。

  • redis内存淘汰策略

1 对所有写请求直接返回错误

2 随机淘汰

3 最快过期的key淘汰

4 lru算法淘汰(最久没有被访问的key淘汰)

  • redis事务

用redis的命令执行:muti - 一系列操作 - exec

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值