今天主要介绍的是Redis基本概念和特点。
最本质的,Redis是一个数据库,作为一个数据库,它和其他数据库自然不会完全相同,如下是它的一些本质特性:
key-value
键值对存储:键、值都有丰富的数据类型支持Redis技术之所以被广泛使用,是因为它具有很多优点,如下所示:
访问速度快
支持丰富的数据类型
Redis基于键值对完成数据存储,那么对于键key
、值value
都有相对应的数据类型支持,如下所示:
key
:只能是字符串类型value
:可支持丰富的数据类型,如下所示:
单线程
key
等,但是这些操作都是在后台线程中完成,不会影响主线程的访问速度。非阻塞I/O多路复用
多路复用
,指的正是上文中Redis6.0使用多线程处理读写操作的技术部分。select
、poll
、epoll
.具体可参考此篇博客:【后端面经-Java】I/O多路复用 简录支持持久化、分布式系统、事务、主从复制(集群)
任何一个技术都不会是完美的,有优点就必然也存在缺点。——鲁迅(:“我没说过”)
Redis的缺点如下所示
Redis是Web应用的常用中间件,它的应用场景非常广泛,如下所示:
Q:Redis、内存、磁盘的区别,为什么快为什么慢?
A:Redis是内存数据库,内存是计算机中最快的存储介质,磁盘是最慢的存储介质。Redis快速是因为它将数据存于内存之后,而内存访问可以直接传输到CPU中,磁盘访问则需要通过IO操作先将数据写入内存空间之后然后再传入CPU中。
Q:Redis的数据库类型、存储结构如何?如何实现排行榜功能
A:Redis属于NoSQL数据库,它的存储结构是键值对,其中键的数据类型只支持字符串,而值可以支持丰富的数据类型,包括列表、有序集合、集合、哈希表、字符串等等,通过列表、有序集合等数据结构实现排行榜功能。
Q:Redis是单线程还是单进程?哪些模块是单线程?
A:Redis执行指令的相关模块是单线程,6.0之后,关于网络IO的处理则转为多线程,使用非阻塞IO多路复用提高IO效率