深入了解Redis:性能、应用场景与常见问题解决方案

目录

一、简介

二、常用数据类型

三、Redis为什么快?

1、基于内存

2、C语言实现

3、单线程模型

4、IO多路复用

四、持久化机制

1、AOF持久化机制

2、RDB持久化机制

3、选择AOF还是RDB?

五、过期策略及内存回收机制(淘汰策略)

1、过期策略

2、内存回收机制(淘汰策略)

六、常见问题及解决方案

1、穿透

2、雪崩

3、击穿


一、简介

Redis(Remote Dictionary Server) 是一个开源的高性能键值对存储系统,redis基于内存,可以用作数据库、缓存和消息代理。

二、常用数据类型

redis是通过key-value方式存储,其中key自能为字符串类型,而value可以有以下类型。

1、String(字符串):最基本的类型,一个字符串最大支持存储512M

2、Hash(哈希):  键值对集合,键也是要字符串类型

3、List(列表): 有序字符串列表

4、Set(集合): 无序不重复字符串集合

5、Zset(有序集合):有序不重复字符串集合

三、Redis为什么快?

1、基于内存

磁盘速度是毫秒级别,而内存是纳秒级别,redis将数据放到内存进行读写,所以快。

2、C语言实现

redis是用C语言实现的,所以效率高。

3、单线程模型

先解释下单线程指的哪里:Redis 客户端每次调用服务端都有三个阶段,发送命令 -> 执行命令 -> 返回结果,服务端将收到命令放到一个队列中,有一个线程来依次执行队列中的命令。

因为 Redis 是基于内存操作,所以使用单线程既不用考虑锁,又避免了频繁上下文切换。

4、IO多路复用

redis的文件事件处理器是单线程的,多路指的是可以监听多个socket。redis的IO多路复用是基于Linux 的epoll机制

四、持久化机制

redis提供两种持久化机制:AOF与RDB

1、AOF持久化机制

AOF(Append Only File)将所有的写指令记录

相比于RDB,  AOF机制数据更加安全,但是在数据量大的时候,AOF的文件会比RDB大很多,恢复的时间也更长。

AOF文件重写: redis提供用来减小AOF文件体积的机制。

2、RDB持久化机制

RDB(Redis DataBase)内存中的数据集以快照的形式写入磁盘。

配置自动触发:配置比如 save 300 10 表示 300秒内超过10个key被修改就触发 bgsave 命令

手动触发:

        ①save :会阻塞当前服务

        ②bgsave :创建子进程进行保存

3、选择AOF还是RDB?

redis支持同时开启,在同时开启时,使用AOF恢复。

若只是把redis当缓存用,也可以都关闭。

五、过期策略及内存回收机制(淘汰策略)

1、过期策略

redis采用 定期删除+惰性删除策略。

        ①定期删除: 默认每100ms会随机检查一部分key,将随机检查部分中过期的key删掉。

        ②惰性删除策略:每次获取key时,会先检查是否已经过期,过期则删除。

过期策略会导致很多过期key仍未删除,那检查过期时为什么不遍历所有key呢,因为太多太慢了,严重影响性能。

2、内存回收机制(淘汰策略)

淘汰策略默认是noeviction,不淘汰,当内存满了就报错,还可以设置为volatile-lru、volatile-ttl、volatile-random、allkeys-lru、allkeys-random、allkeys-lfu

volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集中挑选过期时间最早的数据优先淘汰

volatile -random :从 已设置过期时间的数据集 随机选择数据淘汰
allkeys -lru:从 数据集 中挑选最近最少使用的数据淘汰
allkey s-random:从 数据集 随机选择数据淘汰

六、常见问题及解决方案

1、穿透

指的是缓存未命中,直接查询数据库,数据库中也没有数据库返回空,重蹈覆辙。

解决方案:

        ①数据库没有对应数据时,缓存也存放,并设置超时时间

        ②布隆过滤器

2、雪崩

指的是大量缓存同时失效,请求都直接打到数据库

解决方案:

        ①缓存预热:在系统启动时将数据加载到缓存

        ②随机过期时间,将过期时间分散,自然不会同时失效

        ③限流熔断,避免了同一时间点的大量的请求

3、击穿

缓存中有一个key频繁被访问,在这个key失效的时候,大量的并发请求落在数据库

解决方案:

        ①使用互斥锁

        ②针对热点数据延长有效期

你可能感兴趣的:(数据库,数据库,缓存)