Redis是什么,为什么这么快
- Redis 是key-value型数据库
- Redis是内存的数据库,这样可以避免磁盘I/O,因此Redis也被称为缓存工具
- 采用单线程单进程查询模型,这样避免了上下文切换和不必要的的线程之前的资源竞争
- 采用多路I/O复用技术,复用是复用一个线程,采用多路I/O复用技术的好处就是可以在同一个线程中处理多个I/O请求,尽量减少网络I/O的消耗,提升效率
- 采用Key-value存储,数据的查询复杂度味O(1)
Redis的数据类型
Redis 支持的数据类型包括字符串、哈希、列表、集合、有序集合等。
- 字符串类型是 Redis 提供的最基本的数据类型,对应的结构是 key-value。
- 哈希(hash)提供了字段和字段值的映射,对应的结构是 key-field-value。
- 字符串列表(list)的底层是一个双向链表结构,所以我们可以向列表的两端添加元素,时间复杂度都为 O(1),同时我们也可以获取列表中的某个片段。
- 字符串集合(set)是字符串类型的无序集合,与列表(list)的区别在于集合中的元素是无序的,同时元素不能重复。
- 有序字符串集合(SortedSet,简称 ZSET)理解成集合的升级版。实际上 ZSET 是在集合的基础上增加了一个分数属性,这个属性在添加修改元素的时候可以被指定。每次指定后,ZSET 都会按照分数来进行自动排序,也就是说我们在给集合 key 添加 member 的时候,可以指定 score。
除了这 5 种数据类型以外,Redis 还支持位图(Bitmaps)数据结构,在 2.8 版本之后,增加了基数统计(HyperLogLog),3.2 版本之后加入了地理空间(Geospatial)以及索引半径查询的功能,在 5.0 版本引用了数据流(Streams)数据类型。
为什么采用连接池
基于直接连接的弊端,Redis 提供了连接池的机制,这个机制可以让我们事先创建好多个连接,将其放到连接池中,当我们需要进行 Redis 操作的时候就直接从连接池中获取,完成之后也不会直接释放掉连接,而是将它返回到连接池中。
连接池原理
在连接池的实例中会有两个 list,保存的是_available_connections和_in_use_connections,它们分别代表连接池中可以使用的连接集合和正在使用的连接集合。当我们想要创建连接的时候,可以从_available_connections中获取一个连接进行使用,并将其放到_in_use_connections中。如果没有可用的连接,才会创建一个新连接,再将其放到_in_use_connections中。如果连接使用完毕,会从_in_use_connections中删除,添加到_available_connections中,供后续使用。
网友评论