redis 优势
1. 操作都是原子性
redis是单线程,可以保证原子性。异步、非阻塞的。
redis单线程,如何实现异步和非阻塞?
同步/异步:首先同步和异步主要是从消息通知机制来讲起的。
同步:一个任务的完成必须依赖另一个任务,两个要么都成功要么都失败,是一种可靠的任务序列。当一个同步调用发生后,调用者必须等待返回结果,才能继续后面任务的执行。
异步:不需要等待被依赖任务的完成,只需要完成自己的任务就可以,所以是不可靠任务序列。当一个异步调用发生后,调用者不必等待返回结果,调用者可以去做其他的事情,被调用部件在处理完成后,通过(状态、通知、回调)来通知调用者。
阻塞/非阻塞:阻塞和非阻塞和调用者等待消息通知时的状态有关。很重要,不要和同步混淆。
阻塞:调用者在等待通知的过程中,不能执行其他业务,傻傻的等待通知到来。
非阻塞:和阻塞相反,调用者可以去执行其他业务。
2. 高性能、高响应
Redis 给予内存读写,响应非常快,每秒可以执行大约 110 000 个写入操作,或者 81 000 个读操作,其速度远超数据库。如果存入一些常用的数据,就能有效提高系统的性能。当然也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
Redis快的原因?
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU;
4、使用多路I/O复用模型,非阻塞IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
3. 支持 6 种数据类型
是字符串、哈希结构、列表、集合、可排序集合和基数
4. 丰富的特性
Redis还支持 publish/subscribe, 通知, key 过期等等特性