java面试—redis nosql数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qizonghui/article/details/81545668

1.redis的特点
    redis是一款内存告诉缓存数据库。redis:远程数据服务;由C语言编写,典型的NoSql数据库服务器,redis是一个key-value存储系统,它支持丰富的数据类型:String list set hash等
    redis本质上是一个key-value类型的内存数据库,数据库统统加载在内存当中进行操作,定期通过一步操作把数据库数据flush到硬盘上进行保存。因为是纯粹内存操作,redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的key-value DB。
    redis的最大魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,另外redis也可以对存入的key-value设置expire时间,redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此redis适合的场景主要局限在较小数据量的高性能操作和运算上。
2.redis把所有数据放到内存中:
    redis为了达到最快的读写速度将数据都读写达到内存中,并通过异步的方式将数据写入磁盘,所以redis具有快速和数据持久化的特征,如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能,。如果设置了最大使用的内存,则数据已有记录数达到内存限制值后不能继续插入新值。
3.redis常见的性能问题
    1)、Master写内存快照,save命令调度rdbsave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以master最好不要写你内存快照。
    2)、Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度,master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启动内存快照做持久化,如果数据比较关键,某个slave开启AOF备份数据,策略为每秒同步一次。
    3)、master调用bgrewriteAOF重写AOF文件,AOF在重新的时候会占大量的cpu和内存资源,导致服务load过高,出现短暂服务暂停现象。
    4)、redis主从复制的性能问题,为了主从复制的速度和链接的稳定性,slave和master最好在同一个局域网内
4.redis适合场景
    1)、会话缓存(session cache) ;2)、全页缓存(FPC);(3)、队列;(4)、排行榜/计数器;(5)、发布/订阅
5.redis优缺点
    优点:
    a.性能极高-redis能支持超过100k+每秒的读写频率
    b.丰富的数据类型-redis支持二进制的strings,lists,hashes,sets,以及ordered sets数据类型操作。
    c.原子-redis的所有操作都是原子性的,同时redis还支持对几个操作全并后的原子性执行。
    d.丰富的特性-redis支持public/subscribe,通知,key过期等特性。
    缺点:
    a.由于是内存数据库,所以单台机器,存储的数据量,跟机器本身的内存大小,虽然redis本身有key过期策略,但是还是需要提前预估和节约内存,如果内存增长过快,需要定期删除数据。
    b.如果进行完整重同步,由于需要生成rdb文件,并进行传输,会占用主机的cpu,并会消耗带宽,
    c.修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久,在这个过程中,redis不能提供服务
6.redis的持久化
    RDB持久化:该机制可以在指定的时间间隔内生成数据集的时间点快照、
    AOF持久化:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,AOF文件中的命令全部以redis协议的格式来保存,新命令会被追加到文件的末尾,redis还可以在后台对AOF文件进行重写,使得AOF文件的体积不会超出保存数据集状态所需的实际大小;
    

猜你喜欢

转载自blog.csdn.net/Qizonghui/article/details/81545668