阅读量:0
Redis的优势
1.性能极高
2.数据类型丰富
3.支持数据的持久化
4.支持数据备份
Redis除了能做什么?
分布式缓存、内存存储和持久化、分布式锁、排行榜、消息队列.....
Redis怎么实现消息队列?
Redis5.0新增的数据结构Stream可以用来做消息队列,不过和专业的消息队列相比还有很多欠缺。
Redis数据类型
1.String(字符串)
2.List(列表)
3.Hash(哈希表)
4.Set(集合)
5.Zset(sorted set:有序集合)
6.GEO(地理空间)
7.HyperLogLog(基数统计)
8.bitmap(位图)
9.bitfield(位域)
10.Stream(流)
最后两种不常见
Redis实现统计网站UV?
UV:独立访客,一般理解为客户端IP,需要去重
HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的
Redis实现一个排行榜?
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。可以用Zset实现排行榜。
Redis单线程模型
Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现
所谓 I/O 多路复用机制,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。这种机制的使用需要 select 、 poll 、 epoll 来配合。多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象上等待,无需阻塞等待所有连接。当某条连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理。Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型Redis6.0之前为什么不使用多线程依旧很快?
1.基于内存操作
2.数据结构简单
3.多路复用和非阻塞I/O
4.避免上下文的切换
Redis6.0之前性能瓶颈不在CPU
Redi6.0之后为何引入了多线程?
提高网络IO读写性能