Redis基础——针对实习面试

目录

Redis基础

什么是Redis?

Redis是一个开源的高性能键值对数据库,它通常用作数据结构服务器,支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。

Redis因其高性能、高可用性和灵活性,被广泛应用于互联网公司的技术栈中,尤其是在需要快速访问和处理大量数据的场景下。

除了Redis,你还知道其他分布式缓存方案吗?

除了Redis,以下是一些其他的分布式缓存方案:

  1. Memcached

    • Memcached是一个高性能的分布式内存对象缓存系统,主要用于缓存数据和减轻数据库负载。在Redis之前,它是最常见的分布式缓存方案。它基于内存存储,支持键值对的存储,并提供简单的API接口。Memcached不提供持久化机制,但可以通过第三方软件如MemcacheDB来支持其持久性。
  2. Hazelcast

    • Hazelcast是一个开源的分布式内存数据网格,提供了分布式数据结构和集群管理功能,可以用于缓存、数据存储和分布式计算。
  3. Apache Ignite

    • Apache Ignite是一个内存中数据网格平台,提供了分布式缓存、分布式计算和分布式存储等功能,支持SQL查询和事务处理。
  4. Ehcache

    • Ehcache是一种广泛使用的开源Java缓存库,支持多种缓存策略和配置,能够缓存数据到内存或磁盘,并能与其他分布式缓存解决方案集成。Ehcache主要用于Java应用中,以减少数据库查询次数、提高数据访问速度和改善整体系统性能。
  5. Tair

    • Tair是阿里巴巴集团旗下淘宝事业部开发的一个分布式高可用Key-Value存储引擎。Tair最新的开源版本实现了四种存储引擎:MDB、FDB、KDB和LDB,分别基于四种开源的Key-Value数据库:Memcached、Firebird、Kyoto Cabinet和LevelDB。Tair分为持久化和非持久化两种使用方式,非持久化Tair可以用作分布式缓存;持久化Tair可类比数据库。

其他分布式缓存方案主要还是作为一个扩展,如果面试官问到你,可以显示你的知识面很广,但在现实开发中用的最多的还是Redis。

Redis与其他key-value存储有什么区别?

简洁来说,Redis与其他键值存储的主要区别在于:

  1. 数据结构 :Redis支持多种复杂的数据结构,而其他存储如Memcached主要支持简单的字符串。

  2. 持久化 :Redis提供持久化选项,而Memcached等不提供。

  3. 事务和Lua脚本 :Redis支持事务和Lua脚本,其他存储通常不支持。

  4. 发布/订阅:Redis支持发布/订阅模式,其他存储一般不支持。

  5. 内存管理 :Redis提供多种内存淘汰策略,而其他存储可能没有。

  6. 高可用和分布式:Redis提供主从复制、哨兵和集群等高可用和分布式解决方案,其他存储可能只提供基本复制。

  7. 监控工具:Redis提供丰富的监控工具,其他存储可能监控工具较少。

  8. 客户端库:Redis拥有广泛的客户端库支持,而其他存储支持可能较少。

总结来说,Redis以其丰富的功能和灵活性,在许多场景下成为首选的键值存储解决方案。

Redis的优缺点是什么?

Redis的优点:

  1. 性能卓越:由于数据存储在内存中,读写速度快。
  2. 丰富的数据结构:支持字符串、列表、集合、哈希、有序集合等多种数据结构。
  3. 持久化:支持RDB和AOF两种持久化方式,保证数据安全。
  4. 高可用性:通过主从复制、哨兵系统和集群模式实现高可用。
  5. 事务支持:支持事务,保证操作的原子性。
  6. 发布/订阅:支持消息发布和订阅机制。
  7. Lua脚本:支持在服务器端运行Lua脚本,实现复杂逻辑。
  8. 内存管理:提供多种内存淘汰策略,有效管理内存使用。

Redis的缺点:

  1. 成本较高 :由于使用内存存储数据,成本相对较高。
  2. 数据容量受限 :受限于物理内存的大小,不适合存储大量数据。
  3. 数据丢失风险:在某些情况下,如主从复制中断,可能会有数据丢失的风险。
  4. 内存管理复杂:需要合理配置内存淘汰策略,以避免内存溢出。
  5. 单线程处理:虽然性能高,但在处理复杂或耗时的Lua脚本时,可能会成为瓶颈。

为什么要用Redis?

使用Redis的主要原因包括:

  1. 高速缓存:提升应用性能,减少数据库访问。
  2. 数据结构丰富:支持多种数据类型,便于实现复杂功能。
  3. 持久化:保证数据安全,防止服务重启导致数据丢失。
  4. 高可用:通过复制和集群提高系统的可靠性。
  5. 消息队列:支持发布/订阅模式,实现消息传递。
  6. 原子操作:支持事务,保证数据操作的一致性。
  7. 灵活性:支持Lua脚本,实现自定义逻辑。
  8. 监控与分析:提供工具监控性能,优化系统。

了解Redis的线程模型吗?

Redis的线程模型相对简单,它主要采用单线程模型来处理客户端请求。以下是Redis线程模型的一些关键点:

  1. 单线程处理

    • Redis命令处理、数据读写都是单线程运行的,这意味着Redis在处理客户端请求时,所有命令都是顺序执行的,避免了多线程竞争和同步问题。
  2. I/O多路复用

    • 尽管Redis是单线程的,但它使用I/O多路复用技术(如epoll在Linux上)来同时处理多个客户端连接。这意味着Redis可以同时监听多个socket连接,当某个socket有新的数据可读或可写时,Redis能够及时响应。
  3. 事件驱动

    • Redis的网络通信模型基于事件驱动,它将网络I/O操作和命令处理都视为事件,通过事件循环来处理这些事件。
  4. 非阻塞I/O

    • Redis的I/O操作是阻塞的,但由于它是基于非阻塞I/O多路复用的,所以单个I/O操作的阻塞不会影响其他I/O操作的执行。
  5. 后台子线程

    • 尽管Redis的主线程是单线程,但它有一些后台子线程来处理特定的任务,如RDB持久化、AOF日志文件的重写等。这些子线程与主线程是分离的,不会影响主线程的性能。
  6. 性能优化

    • 单线程模型使得Redis避免了多线程编程中的锁和上下文切换开销,这有助于提高性能。
  7. 扩展性

    • 虽然Redis是单线程的,但它通过主从复制和集群模式来实现水平扩展,以支持更高的并发和数据分片。

Redis持久化机制是怎样的?

Redis的持久化机制主要有两种:RDB(Redis Database Backup)和AOF(Append Only File)。以下是它们的基本工作原理和特点:

  1. RDB持久化

    • RDB是通过创建数据快照来实现持久化的。在指定的时间间隔内,Redis会将内存中的数据集快照保存到磁盘上的RDB文件中。
    • 触发RDB持久化有两种方式:手动触发和自动触发。手动触发可以通过执行SAVEBGSAVE命令实现,其中SAVE命令会阻塞服务器直到快照完成,而BGSAVE命令会在后台异步执行快照。
    • 自动触发则是基于配置文件中的save指令设置的条件来触发RDB文件的生成。
    • RDB文件是一个紧凑的二进制文件,适合用于灾难恢复。
  2. AOF持久化

    • AOF通过记录Redis服务器接收到的每条写命令来记录数据变化,并将这些命令追加到AOF文件中。
    • AOF文件是一个文本文件,里面记录的是Redis服务器的所有写操作命令,以Redis协议格式保存。
    • AOF文件的重写(rewrite)操作会在后台进行,以减少文件大小并优化恢复速度。
    • AOF提供了不同的同步选项,包括每次写命令后同步(always)、每秒同步(everysec)和让操作系统决定何时同步(no)。
  3. 混合持久化

    • Redis 4.0引入了混合持久化机制,结合了RDB和AOF的优点。这种机制首先以RDB格式保存当前数据状态,然后继续以AOF格式记录新的写操作,以优化恢复速度和数据完整性。

参考

这是专门总结Java学习和面试的指南网站,推荐阅读!
https://javaguide.cn/home.html

相关推荐
亿坊电商1 天前
在PHP框架里如何进行数据库连接?
数据库·oracle·php
满昕欢喜1 天前
SQL Server从入门到项目实践(超值版)读书笔记 28
数据库·sql·sqlserver
楚韵天工1 天前
宠物服务平台(程序+文档)
java·网络·数据库·spring cloud·编辑器·intellij-idea·宠物
ajsbxi1 天前
【Java 基础】核心知识点梳理
java·开发语言·笔记
呱呱巨基1 天前
vim编辑器
linux·笔记·学习·编辑器·vim
新子y1 天前
【小白笔记】普通二叉树(General Binary Tree)和二叉搜索树的最近公共祖先(LCA)
开发语言·笔记·python
聪明的笨猪猪1 天前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
爱学习的uu1 天前
CURSOR最新使用指南及使用思路
人工智能·笔记·python·软件工程
YuCaiH1 天前
Linux文件处理
linux·笔记·嵌入式
Cathy Bryant1 天前
大模型损失函数(二):KL散度(Kullback-Leibler divergence)
笔记·神经网络·机器学习·数学建模·transformer