目录
Redis是一个在内存中存储数据的中间件,能够用于作为数据库,数据缓存等,能在分布式系统中大展拳脚.
Redis的特性
关于redis的特性,在redis官网中给出了六个.
内存存储数据
在内存中存储数据.
Mysql主要通过表的方式来存储和组织数据,是关系型数据库.
Redis则是主要通过键值对的方式来存储和组织数据,是一个非关系型数据库.
key是string类型,value可以是上述类型.
可编程性
针对redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些带有逻辑的操作.
可扩展性
可以在redis原有的功能基础上进行扩展,redis提供了一组api.可以通过c,c++和rust编写redis扩展.
比如redis自身已经提供了很多的数据结构和命令,通过扩展,让redis支持更多的数据结构和命令.
持久化
redis是把数据存储在内存上的,而内存的数据是易失的,进程退出和系统重启都会造成内存数据的丢失.所以redis也会把数据存储在硬盘上.内存为主,硬盘为辅.硬盘相当于对内存的数据备份了一下,如果redis重启了,就会在重启时加载硬盘中的备份数据,使redis的内存恢复到重启之前的状态.
水平扩展性
redis作为一个分布式系统的中间件,能够支持集群是非常关键的,这个水平扩展就类似于"分库分表".一个redis能存储的数据是有限的(内存空间有限),引入多个主机,部署多个redis节点,每个redis存储数据的一部分.
高可用性
redis自身也是支持主从结构的,从节点就相当于是主节点的备份了.具有自动故障转移机制,主节点挂了,从节点能够随时上来顶替主节点.
为什么redis是快的
快是redis的一个极其重要的优势,那redis为什么是快的?
1.redis数据存储在内存中,访问内存是比访问硬盘要快的.
2.redis的核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构.
3.从网络角度上来讲,redis使用了IO多路复用的方式.
4.redis使用的是单线程的模型(虽然高版本的redis引入了多线程),这样的单线程模型,减少了线程之间不必要的竞争开销.
5.redis是使用c语言开发的,相对于其他编程语言来说,速度快一些.
Redis的应用场景
数据库
大多数情况下,考虑到数据存储,优先考虑到的是空间要大,但是仍有一些场景,优先考虑的的快.
当然使用这样的内存数据库存储大量的数据,需要更高配置的内存硬件.
redis当作数据库使用的时候,存的是全量数据,这里的数据是不能随便删除的.
缓存和会话存储
使用mysql存储数据虽然大了,但是速度慢.因此我们可以把热点数据单独拿出来,放到redis中存储.
作为缓存,redis存的是部分数据,哪怕redis中的数据丢失了,还可以从mysql那里加载回来.
作为会话存储,之前我们的会话是存储在应用服务器上的,一旦服务器重启,会话就没了.要想实现会话的持久化存储,我们可以把会话存储到redis中.
消息队列
redis作为消息队列,可以实现一个网络版本的生产者消费者模型.对于分布式系统来说,服务器和服务器之间有时候也需要用到生产者消费者模型.(解耦,削峰填谷)
如果当前场景中,对于消息队列的功能依赖不是很多,并且不想引入其他依赖,此时redis可以作为一个选择.
redis是一个客户端服务器结构的程序
redis的客户端和服务器可以在同一个主机上,也可以在不同的主机上.
reids的客户端有多种形态:自带的命令行客户端,图形化界面的客户端和基于redis的api自行开发的客户端.