为什么redis需要把所有数据放在内存中?
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
Redis最适合的场景有哪些?
1、会话缓存
2、全页缓存
3、队列
4、排行旁/计数器
5、发布/订阅
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最好在同一个局域网内。
Memcache与Redis的区别都有哪些?
1、存储方式不同,Memcache是把数据全部存在内存中,数据不能超过内存的大小,断电后数据库会挂掉。Redis有部分存在硬盘上,这样能保证数据的持久性。
2、数据支持的类型不同memcahe对数据类型支持相对简单,redis有复杂的数据类型。
3、使用底层模型不同它们之间底层实现方式以及与客户端之间通信的应用协议不一样。Redis直接自己构建VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、支持的value大小不一样redis最大可以达到1GB,而memcache只有1MB。
Redis的优缺点
优点:
1、性能极高:Redis 能支持超过100K+ 每秒的读写频率。
2、丰富的数据类型:Redis 支持二进制案例的Strings, Lists, Hashes, Sets 及Ordered Sets数据类型操作。
3、原子:Redis 的所有操作都是原子性的,同时Redis 还支持对几个操作全并后的原子性执行。
4、丰富的特性:Redis 还支持publish/subscribe, 通知, key 过期等等特性。
缺点:
1、由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。
2、如果进行完整重同步,由于需要生成rdb文件,并进行传输,会占用主机的CPU,并会消耗现网的带宽。不过redis2.8版本,已经有部分重同步的功能,但是还是有可能有完整重同步的。比如,新上线的备机。
3、修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务。