ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Redis简介,特性和使用场景

2026/8/11 8:07:44 拓冰建站 浏览量
Redis简介,特性和使用场景

(一).概念

Redis是一个在内存中存储数据的中间件,用于作为数据库,数据缓存,等等。Redis在分布式系统中能够发挥主要作用。

(二).特性

1.内存数据结构

Redis能够在内存中存储数据,支持strings,hashes,lists,sets,sorted sets,streams 等数据结构。

对于Mysql来说,主要是通过“表”的方式存储和组织数据的,这种数据库被称为“关系型数据库”;

对于Redis来说,主要是通过“键值对”的方式来存储组织数据的,这种数据库被称为“非关系型数据库”。

在Redis种,key都是String类型,value可以是上面提到的类型。

2.可编程性

我们可以针对Redis的操作,直接通过简单的交互式命令来进行操作,也可以通过一些脚本的方式,批量执行一些操作。例如,Lua编程语言。

3.可扩展性

可以使用C,C++,Rust等编程语言,可以在Redis原有的功能基础上再进行扩展。

4.持久化

Redis是把数据存放在内存上,但是内存上的数据是“易失”的,当进程退出或者系统重启,这些数据就丢失了。但是,Redis除了会将数据存放在内存上,Redis也是会将数据存放在硬盘上的,采取“内存为主,硬盘为辅”。如果Redis重启了,就会在重启的时候加载硬盘中的备份数据,使Redis的内存恢复到重启前的状态。

5.集群

Redis作为一个分布式系统的中间件,能够支持集群也是很关键的,这个类似于“分库分表”

对于Redis来说,能存储的数据是有限的,此时就可以引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分

6.高可用

高可用,就意味着对数据进行了“冗余备份”

Redis自身也支持“主从结构”,“从节点”就相当于“主节点”的备份。

7.快

Redis “快”的原因有以下几个

(1).Redis数据存放在内存中,访问速度就比访问硬盘快很多

(2).Redis的核心功能都是比较简单的逻辑,其核心功能就是操作内存的数据结构

(3).从网络角度上,Redis使用了IO多路复用的方式

(4).Redis使用的是单线程模型,虽然高版本的Redis引入了多线程。Redis的单线程模型,减少了不必要的线程之间的竞争开销。

注意:可能有人会问,多线程不就是为了提高性能的的,为什么这里说单线程是提高性能的?

这是因为,多线程提高效率的前提是,执行的是CPU密集型的任务,此时,使用多线程可以充分利用CPU多核资源。但是Redis的核心任务,主要是操作内存的数据结构,这个操作不会吃很多CPU。

(三).使用场景

1.数据库

关于数据存储,在一些业务场景中,考虑的还是“快”,此时就可以把Redis当作数据库,存储全量数据,这里面的数据是不能随便丢的。

2.缓存

对于Mysql来说,存储的数据量大,但是速度慢,此时,就可以把一些热点数据存放在Redis中。

Redis中存放是部分数据,全量数据以mysql为主,即使Redis中的数据没了,还可以从mysql这边再加载回来。

3.消息队列

基于Redis可以实行一个网络版本的生产者/消费者模型。

对于分布式系统来说,服务器和服务器之间,有时候也是需要使用到生产者/消费者模型的。优势在于,解耦合 和 削峰填谷

4.会话存储

前面在介绍JavaEE进阶的http协议阶段,介绍到过cookie和session,通过sessionId建立连接,实现用户身份信息的存储,将用户数据存储到服务器上。

但是在“分布式系统”中,就会有问题

当用户第一次访问的时候,访问的第一个应用服务器,然后在客户端中保存下了SessionId

但是,当第二次访问,如果访问的是第三个服务器

此时,第三个服务器通过Cookie中的SessionId,并没有找到Session,此时,用户还是需要重新登陆。这就出现了问题,明明用户已经登录过了,现在还是需要重新登陆。如果下一次访问的第二个服务器,那么还是需要重新登陆,这显然不太好。

那么该如何解决上述问题?

①.让负载均衡器把同一个用户的而请求始终打到同一个机器上。即对于用户1来说,每次都让用户1访问第一个服务器。

②.把会话数据单独拎出来,放到一组独立的而机器上存储,例如Redis

此时,无论第一次客户端访问的是那个服务器,都会到Redis中存储会话。然后下次再访问的时候,也是从Redis中查看是否够存在Session。

这样,即使服务器挂了,会话也不会丢失,一直在Redis中存着。