一、区别:
1、redis可支持多种5数据类型、memache只有string。
2、redis可数据持久化。master-slave模式:RDB内存快照、AOF日志文件
3、底层实现方式不同,以及与客户端之间通信的应用协议不一样。redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4.、redis目前官方只支持LINUX 。因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
5、Memcache支持多线程,redis支持单线程;CPU利用方面Memcache优于redis(采用压缩的情况下比memcache高);
6、过期策略:memcache过期后,不删除缓存,会导致下次取数据数据的问题,Redis有专门线程,清除缓存数据;redis
redis单线程为何如此之快:
1.redis是基于内存的,内存的读写速度非常快;
2.redis是单线程的,省去了很多上下文切换线程的时间;
3.redis使用多路复用技术,可以处理并发的连接;
多路复用:
多路-指的是多个socket连接,复用-指的是复用一个线程。
目前,多路复用主要有三种技术:select,poll,epoll。它们出现的顺序是哟西按后的,越排后的技术改正了之前技术的缺点。epoll是最新的也是目前最好的多路复用技术。
举个例子:一个酒吧服务员,前面有很多醉汉,epoll这种方式相当于一个醉汉吼了一声要酒,服务员听见之后就去给他倒酒,而在这些醉汉没有要求的时候可以玩玩手机等。但是select和poll技术是这样的场景:服务员轮流着问各个醉汉要不要倒酒,没有空闲的时间。io多路复用的意思就是做个醉汉公用一个服务员。
二、 Redis 常见的性能问题都有哪些?如何解决?
1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。
2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
3).M