Redis是什么?能干什么?Redis特性以及应用场景

Redis官网进行了详细的自我介绍

Redis是一个在内存中存储数据的中间件,用作数据库,用作数据缓存,在分布式系统中大展拳脚

核心能力:

In-memory data structures

Well-known as a "data structure server", with support for strings, hashes, lists, sets, sorted sets, streams, and more.

在内存中以键值对的形式存储数据,key均为String类型,vlaue则是上述的数据结构。MySQL 是以表的形式来存储组织数据的属于关系型数据库,Redis是以键值对的形式来存储组织数据的属于非关系型数据库。

Programmability

Server-side scripting with Lua and server-side stored procedures with Redis Functions.

可编程性:可以使用 Lua 编写服务器端脚本,使用 Redis Functions 编写服务器端存储过程。

Redis可以直接通过简单的交互式命令进行操作,也可以通过编写脚本进行批量操作。

Extensibility

A module API for building custom extensions to Redis in C, C++, and Rust.

用于在 C、C++ 和 Rust 中构建 Redis 自定义扩展的模块 API。

可自己取扩展Redis的功能,使其支持更多的数据结构和命令。Redis扩展本质上是动态链接库,比如Windows系统的.dll文件可以让.exe文件去调用,里面包含很多代码,Linux的动态链接库是.so。
 

Persistence

Keeps the dataset in memory for fast access, but can also persist all writes to permanent storage to survive reboots and system failures.

 持久化:将数据集保留在内存中以进行快速访问,但也可以将所有写入保存到永久存储中,以便在重新启动和系统故障时幸存下来。

Redis的数据存储在内存上,内存的数据不具有持久性,容易丢失。Redis会把数据备份在硬盘上,重启Redis是会重新加载数据到内存,恢复到重启之前的状态,内存为主,硬盘为辅。

Clustering

Horizontal scalability with hash-based sharding, scaling to millions of nodes with automatic re-partitioning when growing the cluster.

 集群:通过基于哈希的分片实现水平可扩展性,在扩展集群时通过自动重新分区扩展到数百万个节点。 

redis作为分布式系统的中间件,需要具有支持集群的功能,一个redis能存储的数据是有限的,引入多个主机,部署多个Redis节点,每个节点存储部分数据。

High availability

Replication with automatic failover for both standalone and clustered deployments.

高可用性:具有自动故障转移功能的复制,适用于独立部署和群集部署。

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

Redis快的原因:
这里的快是相对于MYSQL等数据库而言的。

Redis的数据存储在内存之中,访问速度要比存储在硬盘的数据库快很多
Redis的核心功能都是比较简单逻辑,都是简单的操作内存中的数据结构
从网络的角度来看,Redis使用里IO多路复用(使用一个线程管理很多个)的方式(epoll)
Redis使用的是单线程模型(高版本中引入了多线程),减少了不必要的线程之间的竞争开销
有人说Redis是用C写的,所以快,但是MySQL也是C写的 
在处理CPU密集型人物时使用多线程可以提高效率,因为此时多个线程和以充分利用CPU的多核资源

使用案例:

Real-time data store

Redis' versatile in-memory data structures enable building data infrastructure for real-time applications that require low latency and high-throughput.

 使用Redis数据库,数据库不仅要大,有时候也要快。有些场景适合使用Redis.比如说浏览器的广告会选择把redis当作数据库。

Caching & session storage

Redis' speed makes it ideal for caching database queries, complex computations, API calls, and session state.

使用Redis通常作为缓存使用。 

比如使用redis缓存session,我们之前一直是把session存储在服务器的内存上的。

如果将session存储在服务器的内存中,在分布式系统的登陆场景中,第一次用户请求A服务器,A服务器会存储了session,第二次请求负载均衡器可能会转发给B服务器,此时B服务器并没有存储session就会导致用户重新登陆。

如果将session存储在Redis中,第一次用户请求A服务器,会把session存储到Redis中,第二次请求被转发给了B服务器,B服务器可以通过redis得到session,系统就可以得知用户已经登陆了。而且即使redis重启也没有影响,因为redis持久化的特性会把数据加载到硬盘中,重启后重新加载到内存。redis可以设置数据保存的寿命。

Streaming & messaging

The stream data type enables high-rate data ingestion, messaging, event sourcing, and notifications.

充当消息队列,Redis开发者的初心是开发消息队列,后来发现作为缓存很好用,就无心插柳柳成荫了,但依然保存了充当消息队列的功能。当系统已经使用了redis作为缓存,又需要使用消息队列的时候不想引入别的以来比如kafuka,就可以使用redis同时充当消息队列。

Redis不能做的事情:
存储大规模数据,因为redis的数据是存储在内存中的,一方面是内存本身就不够大,另外就是容量大了就可变慢。

总之:redis是一个使用内存存储数据的中间件

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值