Redis的基本概念
Redis是典型的键值数据库,Redis的实现功能非常多,比如:日志、持久化机制、集群、事务等。应用场景也很多 ,比如:缓存、数据存储等高并发场景。在学习Redis时,如果直接从某个点学习就会造成只会某个点的知识,而不能将整个数据库串联起来。杂且乱!
所以说在学习某一个知识点时。要先建立起全局的观念非常重要。
1.要明白Redis数据库相比于MySQL关系型数据库的优势:
因为称为内存数据库
,我们知道操作系统中内存速度是远远大于磁盘的,所以最大的特点就是存取数据非常快。
2.可以存储什么类型的数据?
MySQL是能够存储多种数据类型的,那么Redis能存储什么类型的数据?Redis提供的基础的数据类型就有五种:
String、list、hash、Set、Sorted set
;
此外Redis还为了应对特殊的场景需求提供几种特殊的数据类型:
BitMap(应用于签到统计)、HyperLogLog(应用于数据统计)、Geo(存储地理位置信息)
同时如果我们自己有实际的需要也可以自己扩展特殊的类型。
3.MySQL可以实现数据的增删改查,Redis可以么?
当然可以!并且操作方法更多,每种类型都自己对应的API;可以实现对数据的增删改查等操作。
4.Redis采用什么方式访问?
访问模式通常有两种
:
- 一种是通过函数库调用的方式供外部应用使用,比如,上图中的
libsimplekv.so,就是以动态链接库的形式链接到我们自己的程序中,提供键值存储功能; - 另一种是通过网络框架以 Socket 通信的形式对外提供键值对操作,这种形式可以提供广泛的键值存储服务。redis就是这种方式!
了解了上面的基本的问题,就算对Redis有一个初步的印象了。
5.总体的Redis架构是如何的?
如图为Redis的整体架构图:
如上图就展示了Redis总体的结构实现,可以看到架构从上到下可以总结以下几个问题:
1.我现在要访问的数据库是通过什么方式实现的
?
2.我访问到数据库后可以进行什么操作
?
3.如果我想存储不同的数据,数据库都支持哪些
?
4.数据库存储到内存中如何防止丢失
?
5.如何实现高可用
?
6.如何实现高扩展
?
6.Redis已经实现了这么多功能,使用Redis会不会出现一些问题?会出现哪些问题?问题如何定位?
了解了Redis整体的结构,就可以对出现问题对症下药:如下图总结了Redis常见问题及对应的问题出现的位置:
上图就列出来了使用redis时在实际的业务场景中可能出现的问题及解决方案。这个图非常的重要!