Redis的面试

本文介绍了Redis,一个非关系型数据库,强调了其内存存储、数据结构多样性、高性能、持久化策略、主从复制、集群和发布/订阅等功能,以及在缓存、分布式锁、双写一致性等方面的应用和常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认识Redis

认识NoSQL

SQL(关系型数据库)       NoSQL(非关系型数据库)

1.结构化                             非结构化

2.关联的                             非关联的

3.SQL查询                          非SQL

4.事务 ACID                        BASE

认识Redis

Redis 是一个开源的基于键值对数据结构存储系统,被广泛应用于缓存、消息队列、分布式锁等多种场景。它支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等,还提供了持久化、事务、Lua脚本、Pub/Sub等高级功能。

特征

高性能:Redis使用内存存储数据,支持高读写速度,是许多高性能系统中不可或缺的组件。

数据结构丰富:除了基本的键值对,Redis提供了多种数据结构,便于开发者灵活选择最适合存储和操作数据的方式。

持久化:支持RDB(快照)和AOF(追加文件)两种持久化方式,确保数据不会因进程退出而丢失。

主从复制:支持数据复制,可以配置多个从节点,提高数据可用性和系统的扩展性。

集群:Redis Cluster提供了自动分片功能,可以将数据分布在多个节点上,实现水平扩展和故障转移。

发布/订阅(Pub/Sub):提供发布消息和订阅频道的能力,可以构建实时通知、聊天系统等。

基本命令

•设置值:SET key value

•获取值:GET key

•删除键:DEL key

•列表操作:LPUSH key value(左侧插入),RPUSH key value(右侧插入),LPOP key(左侧弹出),RPOP key(右侧弹出)

•集合操作:SADD key member(添加元素),SMEMBERS key(获取集合所有成员)

•有序集合操作:ZADD key score member(添加成员并指定分数),ZRANGE key start stop [WITHSCORES](按分数范围获取成员)

•哈希操作:HSET key field value(设置哈希表字段值),HGETALL key(获取哈希表所有字段和值)

Redis常见面试问题

使用场景

缓存三兄弟(穿透、击穿、雪崩)、双写一致、持久化、数据过期策略,数据淘汰策略

1. 高速缓存:Redis最广泛的应用之一是作为数据库查询结果的缓存,以减轻数据库压力,加速数据访问。它特别适合存储频繁访问但不经常变更的数据,如网页内容、用户会话信息等。

2. 会话管理:利用Redis的高速读写特性,可以将用户会话信息存储在内存中,实现会话的集中管理,支持高并发下的会话访问。

3. 消息队列与发布/订阅:Redis的发布/订阅模式(Pub/Sub)可以构建轻量级的消息系统,用于消息传递、实时通知、聊天应用等,支持一对多的消息广播。

4. 实时分析与计数器:Redis的原子操作和高性能特性使其非常适合实时数据分析和计数器应用,如网站访问计数、投票系统、实时统计等。

5. 排行榜系统:有序集合(Sorted Set)数据结构天然支持排序,非常适合构建各种排行榜系统,如游戏积分榜、评论热度排名等。

6. 分布式锁与同步:Redis的SETNX、GETSET等命令可以用来实现分布式锁,解决分布式系统中的并发控制问题,保障数据一致性。

7. 事务处理:虽然Redis的事务不支持回滚,但其提供了简单的事务管理能力,适用于需要一次性执行多个操作且这些操作需要原子性完成的场景。

8. 数据过期策略:Redis支持设置键的生存时间(TTL),可以自动删除过期数据,适用于实现限时优惠、会话超时等场景。

缓冲穿透

缓存穿透是指在使用缓存系统时,客户端请求的数据既不在缓存中也不在数据库中。这种情况通常发生在查询一个数据库中并不存在的数据时,缓存因为未命中而直接将请求转发到数据库,而数据库中也查不到这个数据,于是每次这样的请求都会穿透缓存直接打到数据库上,给数据库带来不必要的压力,同时也失去了缓存提高效率的意义。

解决方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存

解决方案二:布隆过滤器

bitmap(位图):相当于是一个以bit)位为单位的数组,数组中每个单元只能存储二进制数01

布隆过滤器作用:布隆过滤器可以用于检索一个元素是否在一个集合中。

        存储数据:id为1的数据,通过多个hash函数获取hash值,根据hash计算数组对应位置改为1

        查询数据:使用相同hash函数获取has

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值