redis高级特性

Redis 持久化方式有哪些?
redis是一个支持持久化的内存数据库,也就是redis经常将内存中的数据同步到硬盘来保证持久化

类型 特点
rdb方式 snapshotting (快照) 默认方式 将内存中数据以快照方式写入二进制文件中,默认dump.rdb ,append-only file(缩写 aof)的方式—推荐,由于快照方式在一定时间间隔做一次,有可能发生数据丢失情况,aof方式比快照有更好的持久化性,
aof方式 AOF 特点,写一条redis然后写日志,好处保证数据不丢失,不好地方,数据规模超大时候,磁盘会有卡顿。

RDB 是默认持久化方案,最大好处,基于快照,备份简单,单个文件,不好地方,redis发生故障,可能会导致最后几秒数据丢失。
Redis 支持同时开启 RDB 和 AOF,系统重启后,Redis 会优先使用 AOF 来恢复数据,这样丢失的数据会最少,也可以全部关掉。持久化交给数据库
redis高级特性_第1张图片
在架构设计中,有“分流”一招,说的是将处理快的请求和处理慢的请求分离来开 这些快的放在一个线程中搞定,而持久化,持久化、Master-slave同步数据这些耗时的操作就单开一个进程来处理,不要慢的影响到快的; 既然需要使用keys这些耗时的操作,那么我们就将它们剥离出去,比如单开一个redis slave结点,专门用于keys、sort等耗时的操作,这些查询一般不会是线上的实时业务,查询慢点就慢点,主要是能完成任务,而对于线上的耗时快的任务没有影响。
为什么单线程redis 还这么快?
(1) 绝大部分请求是纯粹的内存操作,非常快速
(2) 采用单线程,避免了不必要的上下文切换和竞争条件, 原子性保证关键
单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程(例如持久化模块)
(3) 非阻塞IO - IO多路复用,这样提高了redis的吞吐量。“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)
基于操作系统epoll实现的
(4) Redis的瓶颈最有可能是机器内存的大小或者网络带宽,还有些操作不当造成的堵塞
用于记录执行时间超过给定时间的命令请求,可以用来监视和优化查询速度

Redis堵塞问题和性能监控
(1) Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞; 当redis的数据量达到一定级别后(比如20G),很多操作对性能的影响尤为严重;
(2) 耗时长的命令造成阻塞 keys、sort,smembers 时间复杂度为O(N), N 为数据库中 key 的数量。当数据库中的个数过大(上亿),这个命令会造成读写线程阻塞数秒;
http://redisdoc.com/set/sadd.html
(3)持久化造成的阻塞AOF / RDB

发布/订阅 及高级特性
redis高级特性_第2张图片
dubbo的注册中心除了Zookeeper也可以Redis,Redis 4 还引入了名为 stream 流处理的新数据类型和对应的命令,野心勃勃想替代流处理中间件(kafka)
GEO地理信息存储
redis高级特性_第3张图片
redis高级特性_第4张图片
在这里插入图片描述
redis高级特性_第5张图片

你可能感兴趣的:(redis)