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,主要在内存和网络,并且单线程情况下不存在上下文切换、锁竞争等问题,实现起来更加简单,在单线程不影响效率并且可以避免并发问题的情况下,自然是要选在单线程了

相关文章
|
9月前
|
存储 缓存 NoSQL
Redis持久化深度解析:数据安全与性能的平衡艺术
Redis持久化解决内存数据易失问题,提供RDB快照与AOF日志两种机制。RDB恢复快、性能高,但可能丢数据;AOF安全性高,最多丢1秒数据,支持多种写回策略,适合不同场景。Redis 4.0+支持混合持久化,兼顾速度与安全。根据业务需求选择合适方案,实现数据可靠与性能平衡。(238字)
|
存储 缓存 NoSQL
Redis 服务器全方位介绍:从入门到核心原理
Redis是一款高性能内存键值数据库,支持字符串、哈希、列表等多种数据结构,广泛用于缓存、会话存储、排行榜及消息队列。其单线程事件循环架构保障高并发与低延迟,结合RDB和AOF持久化机制兼顾性能与数据安全。通过主从复制、哨兵及集群模式实现高可用与横向扩展,适用于现代应用的多样化场景。合理配置与优化可显著提升系统性能与稳定性。
881 0
|
9月前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
730 1
Redis-常用语法以及java互联实践案例
|
NoSQL Java API
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!
本文详细解析了分布式锁的实现原理与应用场景,包括线程锁、进程锁和分布式锁的区别,以及分布式锁的四种要求和三种实现方式(数据库乐观锁、ZooKeeper、Redis)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
9月前
|
存储 消息中间件 NoSQL
Redis数据结构:别小看这5把“瑞士军刀”,用好了性能飙升!
Redis提供5种基础数据结构及多种高级结构,如String、Hash、List、Set、ZSet,底层通过SDS、跳表等实现高效操作。灵活运用可解决缓存、计数、消息队列、排行榜等问题,结合Bitmap、HyperLogLog、GEO更可应对签到、UV统计、地理位置等场景,是高性能应用的核心利器。
|
9月前
|
SQL Java 关系型数据库
Spring事务传播机制:7种姿势教你玩转"事务接力赛"
事务传播机制是Spring框架中用于管理事务行为的重要概念,它决定了在方法调用时事务如何传递与执行。通过7种传播行为,开发者可以灵活控制事务边界,适应不同业务场景。例如:REQUIRED默认加入或新建事务,REQUIRES_NEW独立开启新事务,NESTED支持嵌套回滚等。合理使用传播机制不仅能保障数据一致性,还能提升系统性能与健壮性。掌握这“七种人格”,才能在复杂业务中游刃有余。
|
10月前
|
Java API 开发者
Spring 控制反转与依赖注入:从玄学编程到科学管理
在传统开发中,手动`new`对象导致紧耦合、难以维护和测试。控制反转(IoC)将对象创建交给框架,实现解耦。Spring通过IOC容器自动管理对象生命周期,开发者只需声明依赖,无需关心创建细节。依赖注入(DI)是IoC的具体实现方式,支持构造器、Setter和字段注入。构造器注入推荐使用,保证依赖不可变且易于测试。对于多个同类型Bean,可用`@Qualifier`或`@Primary`解决冲突。此外,Spring还支持依赖查找(DL),开发者主动从容器获取Bean,适用于动态场景,但侵入性强。掌握IoC与DI,有助于构建灵活、可维护的Spring应用。
|
9月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。