1.Redis单线程问题。
单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性问题),即一个线程处理所有网络请求。其他模块仍用了多个线程。
2.为什么说Redis能够快速执行
2.1.绝大部分请求是纯碎的内存操作(非常快速)
2.2.采用单线程,避免了不必要的上下文切换和竞争条件。
2.3.非阻塞IO-IO多路复用。
3.Redis的内部实现
内部实现采用epoll,采用了epoll+自己实现的简单事件框架。epoll中的读,写,关闭,连接都转化成了事件,然后利用epoll的多路复用特性,不在IO上浪费一点时间,这3个条件不是相互独立的。特别是第一条,如果请求都是耗时的,采用单线程吞吐量及性能很差。Redis为特殊的场景选择了合适的技术方案。
4.Redis关于线程的安全问题。
Redis实际上是采用了线程封闭的观念,把任务封闭在一个线程,自然避免了线程安全的问题,不过对于需要依赖多个Redis操作的复合操作来说,依然需要锁,而且有可能是分布式锁。
5.使用Redis的一些好处
1.速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
2.支持丰富的数据类型,不如我们的String,int,sorted,list,set,hash
3.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么是全部执行,要么全部不执行。
4.丰富的特性:可用于缓存,消息,按KEY设置过期时间,过期后将会自动删除。