redis

1、特点

redis基于内存实现的非关系型数据库,存储键值类型缓存型数据。

性能极高:基于内存实现数据存储,读写性能极高。

多用途:缓存、消息队列、搭建redis集群

支持数据持久化:2种方式,快照式和增量复制

支持主从同步:

支持多种数据类型

官方仅提供linux版本,windows版是民间大神根据源码自行实现的,运行效率可能略低。

2、数据类型

String    set key value             get  key
Hash     hmset key filed value    hmget key field
list        lpush key value          lrange key start stop
set        sadd key member
zset      zadd key score member

HyperLoglog

发布订阅

Stream消息队列

布隆过滤器

GEO地理位置

redis事务

3、高级功能

3.1 内置lua脚本

redis2.6版本后内置lua解释器,redis客户端可直接执行lua脚本,提供自定义编程能力。redis服务器以单线程、原子性的方式执行lua脚本,保证lua脚本在执行过程中不会被其他请求中断。

好处:

减少网络开销:将多个请求以脚本一次性发送,减少网络开销

原子操作:单线程运行,脚本运行不会被中断。脚本运行过程中无需使用事务。

脚本复用:

3.2 分区

对redis数据拆分,分散到多个redis实例。提升服务器性能和存储能力,可构建大型redis数据库。

3.3 管道

将多个redis请求打包成一次请求发送到服务器,从而减少多次请求的往返时间。

3.4 数据备份和还原

RDB(快照模式)  redis是单线程任务执行机制,备份会使用IO,IO又是阻塞的,所以不影响主进程对外继续提供服务,利用操作系统创建子进程备份数据

                               手动触发:save(阻塞) bgsave(非阻塞)
                               自动触发:通过配置文件,自动触发bgsave

AOF(追加模式)  每次的数据修改会写入内存缓存区,然后调fsync()写入AOF文件

                               风险仅仅为发生宕机时,内存缓存区尚未写入AOF的数据,配置文件的默认模式会1秒同步一次,理论上最多丢失1秒的数据

3.5 redis集群主从模式

主从复制,一主多从,主负责写,从负责读
不足:
主节点宕机,需要人工恢复
主宕机前,部分数据未同步到从,即便切换从为主,也会导致部分数据丢失,数据不一致

主只有一个节点,存在读写性能瓶颈

3.6 集群哨兵模式

解决主从模式中主宕机不能自动恢复的问题,哨兵模式提供独立进程,监控所有节点,主节点故障后,选择一个从提升为主,使用消息订阅发布,通知其他节点修改配置文件,跟随新主。

多哨兵模式:哨兵模式的哨兵存在单点故障,多哨兵组成一个集群,互相监控。

3.7 分布式锁

互斥性:任何时刻只能有一个线程持有锁
超时时间:超过时间不释放锁,会自动释放,防止死锁

加锁和解锁由同一个线程设置

4、缓存问题

4.1 缓存穿透

redis未命中查询,直接查询数据库,数据库也没查到,返回空对象,代表查询失败。大量的这种查询会导致mysql压力增加,或者宕机。

解决:

缓存空对象:mysql返回空对象时,redis缓存该空对象,同时设置失效时间

布隆过滤器:在redis缓存层前加一个布隆过滤器的查询,如果没查到,直接返回失败

4.2 缓存击穿

缓存未命中,但后端数据存在,热点缓存key时间失效,导致大量查询进入mysql数据库

解决:

永久key

分布式锁,

4.3 缓存雪崩

大批量key过期
解决:
永久key

随机过期时间

posted @ 2022-06-28 17:44  贰零伍零  阅读(23)  评论(0)    收藏  举报