Redis 简介:打造快速数据存储的利器

简介: Redis 是一款开源的内存数据结构服务器,支持字符串、哈希、列表等多种数据结构,具备高性能、持久化、高可用及分布式特性,适用于缓存、会话管理、实时统计等场景。

Redis 介绍

一、什么是Redis?

从官网复制下来的

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串哈希表列表集合有序集合位图hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区

二、Redis的核心特点

  • 基于内存:基于内存存储,读写速度极快。单秒可处理数十万甚至百万级请求,适合高并发场景。
  • 丰富的数据结构:支持字符串、哈希、列表、集合、有序集合、位图、超日志、地理空间等多种数据结构。
  • 持久化:提供 RDB 和 AOF 两种持久化方式,可以将内存中的数据写入磁盘,防止数据丢失。
  • 高可用:通过主从复制、哨兵(Sentinel)机制实现高可用,支持分布式部署。
  • 丰富的功能:包括事务、Lua脚本、发布订阅、限流、统计等。

二、Redis的应用场景

场景类别 具体场景说明
缓存系统 网站页面缓存、数据缓存、热点数据缓存
会话管理 用户登录会话信息存储、分布式会话管理
实时统计 游戏排行榜、积分排名、PV/UV统计、广告点击统计、实时分析
消息队列 任务调度、事件通知、异步处理
分布式锁 PV/UV统计、广告点击统计、实时分析
地理空间信息处理 根据地理位置查找附近商户
限流和防刷 用户请求限制、反作弊、防刷机制

三、Redis的局限性

  • 内存限制:数据量受服务器内存限制
  • 单线程模型:虽然 6.0+ 支持多线程 I/O,但命令执行仍是单线程
  • 持久化开销大:持久化操作可能影响性能
  • 不支持复杂查询:不支持复杂的关系查询和 JOIN 操作

四、 Redis vs 其他数据库

特性 Redis MySQL MongoDB Memcached
数据存储 内存 + 持久化 磁盘 磁盘 内存
数据结构 丰富(8种+) 行式存储 文档 键值对
性能 极高 中等 中等 极高
持久化 支持 支持 支持 不支持
集群 原生支持 需要配置 原生支持 需要客户端
事务 支持 支持 支持 不支持

五、相关面试题

Redis 为什么这么快?

Redis之所以如此快速,主要归功于其设计特点和工作原理:

  1. 基于内存存储:Redis的数据主要存储在RAM(随机存取存储器)中,对于内存存储,基本操作几乎是常数时间(O(1)),确保了极快的响应
  2. 高效的数据结构
    1. 字符串(String):基本操作在常数时间内完成
    2. 哈希、列表、集合等数据结构都经过优化,支持快速的插入、删除和查找
  3. 单线程模型(事件驱动I/O)
    1. 单线程处理:Redis采用单线程架构,避免了多线程模型中的上下文切换和锁竞争问题
    2. I/O 多路复用技术:Redis采用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了时间,不在I/O上浪费过多的时间

Redis 是单线程吗?

网上的资料大部分都是简单的说Redis 是单线程的,但这句话严格来说是不正确的。Redis 程序并不是单线程的,只是对于数据的操作是单线程处理的,Redis 在启动的时候,是会启动后台线程的,用于关闭文件、AOF刷盘等。

那为什么对于数据的操作要使用单线程呢
大家之前可能会有一个误区:就是多线程一定比单线程的速度快。
首先多线程的优势在于充分利用了多核CPU的资源,但对于单个CPU而言,多线程就意味着上下文切换以及锁竞争。
这个问题 官网上其实有回答,其中的核心点就是 Redis 的性能瓶颈不在 CPU,主要在内存和网络,并且单线程情况下不存在上下文切换、锁竞争等问题,实现起来更加简单,在单线程不影响效率并且可以避免并发问题的情况下,自然是要选在单线程了

相关文章
|
12月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
427 1
|
存储 缓存 NoSQL
Redis数据存储:高效、灵活、实时
Redis数据存储:高效、灵活、实时
|
12月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
150 2
数据的存储--Redis缓存存储(二)
|
12月前
|
存储 消息中间件 缓存
Redis 简介
10月更文挑战第14天
292 58
|
11月前
|
存储 NoSQL PHP
PHP与Redis结合使用,提升数据存储性能
随着互联网应用的发展,PHP与Redis的结合成为提升数据存储性能的重要手段。PHP作为流行的服务器端语言,常用于网站开发;Redis作为高性能内存数据库,以其快速读写能力,有效优化数据访问速度,减轻数据库压力。两者结合通过缓存机制显著提升应用响应速度,支持高并发场景下的稳定性和可扩展性。
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
12月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
279 4
|
11月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
288 0
|
C# 开发者 UED
WPF开发者必备秘籍:深度解析文件对话框使用技巧,打开与保存文件原来如此简单!
【8月更文挑战第31天】在WPF应用开发中,文件操作是常见需求。本文详细介绍了如何利用`Microsoft.Win32`命名空间下的`OpenFileDialog`和`SaveFileDialog`类来正确实现文件打开与保存功能。通过示例代码展示了如何设置文件过滤器、初始目录等属性,并使用对话框进行文件读写操作。正确使用文件对话框能显著提升用户体验,使应用更友好易用。
417 0
|
存储 JSON NoSQL
揭秘Redis字符串String的隐藏技能!从基础到进阶,让你的数据存储操作秒变高大上!
【8月更文挑战第24天】Redis中的字符串类型作为其基石,不仅能够存储从简单文本到复杂格式如JSON的各种数据,还能通过多样化的命令实现包括但不限于自增自减、设置过期时间等高级功能,极大提升了其实用性和灵活性。例如,使用`SET`命令可添加或更新键值对,`GET`获取值,`DEL`删除键;同时,`INCR`和`DECR`支持对整数值的原子性增减操作,非常适合实现计数器等功能;通过`EXPIRE`命令设置过期时间,则适用于需要限时存储的应用场景。尽管名为“字符串”,但实际上还可存储图片、音频文件的Base64编码等形式的数据,为开发者提供了强大而灵活的工具。
144 0