1 Redis的应用场景有那些
- Token令牌的生成
- 短信验证码Code
- 缓存查询数据,减轻数据库访问压力
- 帮助实现计数器
- 分布式锁 延迟操作 秒杀抢购 订单超时:30分钟内取消订单 库存+1
- 分布式消息中间件(发布订阅)
2 Redis线程模型IO多路复用
Redis官方没有windows版本redis,只有linux版本的reids。
Redis的底层是采用nio的多路io复用机制对多个不同的连接(tcp)实现io的复用,能够非常好的支持高并发,同时能够先天性保证线程安全的问题。
多路io复用:使用一个线程维护多个不同的io操作。
原理:使用nio的选择器,将多个不同的Channel统一交给Selector(选择器)管理。
但是nio的实现在不同的操作系统上存在差别:在windows操作系统上使用select实现轮询机制、在linux操作系统使用epoll。(windows操作系统是没有epoll)
在windows操作系统中使用select实现轮询机制时间复杂度为o(n),而且会存在空轮询的情况,效率非常低;其次默认对轮询有一定限制(默认1024),所以这样的话很难支持上万tcp连接。
linux操作系统采用epoll实现事件驱动回调形式通知,不会存在空轮询的情况,只是对活跃的socket实现主动回调,时间复杂度为是o(1),性能有很大的提升。
注意:windows操作系统没有epoll、只有linux操作系统有。
所以为什么Nginx、redis能够支持非常高的并发?最终都是靠的linux版本的io多路复用机制(epoll)。