redis相关概念

Redis作为高性能的内存数据存储,因其全内存使用、单线程模型、IO多路复用等特性实现高并发。其高级功能包括慢查询、pipeline、弱事务等。在数据持久化方面,AOF提供实时持久化,RDB则周期性保存内存快照。针对缓存穿透、击穿和雪崩问题,文章提出了相应的解决方案,如设置空值缓存、使用布隆过滤器、设置随机过期时间等。
摘要由CSDN通过智能技术生成

一、为什么要用redis(为啥快)

1、高性能

使用内存。全内存使用更快
单线程有效避免上下文切换
渐进式rehash、缓存时间戳全局hash索引表把一次性大量的开销,分摊到多次请求中。保证数据的快速响应。
io多路复用技术(实现网络IO高并发)

2、高并发

对比mysql 并发量到1000左右
单redis(微秒)并发能到10W左右。如果不够还能加分片集群。

二、redis 有哪些高级功能

1、慢查询

slowlog-log-slower-than 选项指定执行时间超过多少微秒。
slowlog-max-len 选项指定服务器最多保存多少条慢查询。

2、pipline功能

快速插入数据的功能。通过管道批量插入。
使用的jedisPool连接池,节省大量的建立连接的connection的时间。
redis客户端,都实现了pip的结构。
可以减少rtt(网络往返时间)
要消耗大量内存。建议分开一次1W条命令。

限制是只能用于执行连续、且不相关的命令。(不支持可靠性要求高的、不支持计算)

3、弱事务

原子性(具备一定的原子性,但不支持回滚。)
命令入队时就报错 会放弃执行命令(保证原子性)
命令入队时没有报错,实际执行报错(不保证原子性)
exec 命令执行时实例故障。如果开启AOF日志保证原子性

一致性(弱一致性)
命令入队时就报错,事务会被放弃执行,所以可以保证一致性。
exec 命令执行时报错。有错误的命令不会被执行,一致性可以保证。
exec 命令执行时实例故障,有AOF、RDB的持久话方式决定。

隔离性
因为Redis是在单线程下,也就是串行化的方式来执行任务的,所以它总是隔离的
持久性(不具备)

持久性
Redis只有在AOF持久化模式下,并且每写入一条更新命令都被写入AOF文件时,才是具有持久性的。

三、redis 穿透 击穿 雪崩

1、穿透

redis和mysql中没有要查寻到的数据(多用于黑客攻击)

解决方式
1、杀死连接
2、缓存空值(并设置最少过期时间)
3、采用布隆过滤器

2、击穿

热key 过期导致

解决方式
1、提前知道这个是热key 可以设置热key 永不过期。
2、加互斥锁。

3、雪崩

大量key 同时过期或者redis 故障。导致数据大批量访问到mysql 数据库。

解决方式。
大key过期
1、在一段时间内设置随机过期时间。
2、创建定时任务,在缓存失效前及时缓存。
3、业务限流、或者业务熔断。
redis故障
1、创建集群版本实现故障自动切换。
2、做好监控,发现不可用及时告警。

四、AOF和rdb 文件

1、AOF

aof 是以实时叠加的方式进行持久化数据的。会导致AOF文件过大。造成性能IO的问题。
所以设计出了重写机制。(先fork一个子进程,然后在根据redis数据重新构建一个新的AOF文件,读取当前redis数据,同时追加实时数据到AOF缓存区。写入到新的AOF文件中。覆盖源文件)

2、rdb文件

类似redo, 循环写入。主从同步是利用rdb 文件实现的。
redis rdb 文件是 redis 在内存中所存储全部数据的二进制表示,结构非常紧凑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值