Redis——特性介绍与应用场景

Redis特性介绍

In-memory data structrues

众所周知,MySQL是一种关系型数据库,其通过表的结构存储数据,就类似于建立了一个excel表格来存储数据。但是像视频这类数据并不适合存储在关系型数据库中,因此存在非关系型数据库——通过键值对存储数据

redis中存储的key都是string,而value可以是string,hashes,lists,sets,sorted sets,streams等等

Programmability

可以通过基础的交互式命令操作redis,也可以通过脚本(Lua)来批量的进行操作

Extensibility

redis提供了一组API,让我们可以在redis原有的功能上进行扩展(C,C++,Rust),例如让redis支持更多的数据结构,更多的命令

Persistence

Redis将数据存储在内存中,这保证了能够更快的获取数据,但是内存中的数据在系统重启后就会消失,因此Redis还在硬盘中备份了内存中的内容,保证数据的持久性

Clustering

Redis支持集群,也就是水平扩展,类似于分库分表,多个服务器中部署多个Redis节点,让数据分散存储

High availability

Redis支持主从结构,从节点是主节点的备份,当主节点有问题时,从节点可以替代主节点继续工作,因此Redis是高可用的

Redis读写数据迅速的原因

  1. Redis的数据存储在内存中,读写内存比读写硬盘快好几个数量级
  2. Redis的核心功能实现的比较简单,没有关系型数据库那么复杂的外键等等约束,因此读写数据迅速
  3. Redis通过IO多路复用的方式处理网络请求(使用一个线程管理多个socket)
  4. Redis使用单线程模型,减少了线程竞争的开销
  5. Redis是用C语言开发的

Redis使用场景

Real-time data store

将Redis当作数据库存储数据,实时性要求较高,高吞吐的场景。例如搜索引擎需要较快的响应速度,这时就需要将需要检索的数据存储在内存中

Caching & session storage

由于计算机中的数据也存在二八原则(80%的用户需要的是20%的热点数据),因此可以将Redis中存储这20%的热点数据作为缓存

而要理解session storage首先要理解下面这个概念:

http中的cookie是用来实现用户信息的保存的,其需要session的配合完成。服务器这边存储了用户的数据,而cookie是让浏览器存储用户的身份标识(sessionId)

但如果应用了分布式系统,存在多个应用服务器。与用户登录时可能将用户会话信息存储在a服务器中,但是用户下次访问请求可能发送到c服务器中,而c服务器中没有用户的会话信息
Redis——特性介绍与应用场景_第1张图片
解决方法:

  1. 负载均衡器始终将同一个用户的请求发送到同一台服务器中
  2. 将会话信息单独存储在一台服务器中,并且当服务器重启后会话信息不能丢失

显然,Redis就可以负责存储分布式系统下的用户的会话信息
Redis——特性介绍与应用场景_第2张图片

Streaming & messaging

Redis可以作为消息队列,是一个网络版本的生产者消费者模型,消息队列可以解耦合,削峰填谷

你可能感兴趣的:(redis,数据库,redis,数据库,缓存)