当前位置: 首页 > news >正文

redis面试总结

redis的数据类型?

string字符串:类似于java中Map<String,String>。存储字符串、JSON数据、验证码等。

Hash字典:类似java中Map<String, Map<Spring,String>>。比较适合存储对象数据。

List列表:类似java中Map<String, List<String>>。有序、可重复集合。

Set集合:类似java中Map<String, Set<String>>。无序,不可重复。redis提供了交集、并集等操作。

ZSet有序集合:类似java中Map<String, Sort Set<String>>。redis中在zset中提供了score属性,可以根据score进行排序。常用于排行榜等。

什么是缓存击穿、穿透、雪崩?

缓存击穿:redis中某一个key到了过期时间,但这个key还承接着大量的并发请求,导致并发到达数据库,导致数据库压力剧增(压垮、断掉)。

解决:给key设置合理有效时间(对应热点key设置永不过期)。互斥锁(当缓存失效时,通过互斥锁来保护数据库的访问过程。当一个热点key失效时,用互斥锁方式,只让一个请求到数据库查询数据并加载到缓存)。逻辑过期(当查询缓存发现逻辑时间已过期时,会成功获取一个互斥锁,并开启一个新线程进行查询数据库重建缓存数据的操作,然后写入缓存并重置逻辑过期时间,最后释放锁。这种方法可以在缓存击穿问题发生时,避免大量请求直接访问数据库,减轻数据库压力)。

缓存穿透:查询了一个redis中不存在,并且数据库中也不存在的数据。(每次请求直达数据库)

解决:缓存空数据(key,null)。布隆过滤器(先在布隆过滤器中判断是否存在,不存在直接返回)。

缓存雪崩:在同一时间内,redis中大量的key都过期了,导致大量请求到达数据库。

解决:给不同的可以设置不同的过期时间(给过期时间添加随机姓)。利用redis集群,提高可用性。

redis的数据过期策略和数据淘汰策略?

惰性过期策略:查询一个key,判断是否过期,过期直接删除。

定期过期策略:在redis中每过一段时间,查询key是否过期,过期直接删除。

redis的过期策略是惰性过期策略加定期过期策略。查询一个key,若过期就直接删除。每隔一段时间,随机抽取一定数量的key,查询是否过期,过期直接删除。

当redis的内存满了,会触发数据淘汰策略。

redis内存不够,不删除任何数据,直接报错。(redis的默认方式)

LRU:最近最少使用。用当前时间减去最后一次访问时间,值越大被删除的优先级越高。

LFU:最少频率使用。redis中会统计每个key的访问频率,值越小被删除的优先级越高。

redis是单线程,为什么还那么快?

因为redis是纯内存操作的,redis是单线程。

每来一个请求,IO多路复用就会创建一个socket,这样redis就可以同时处理多个请求了。然后redis会把socket压到一个队列中,一个一个执行。单线程处理,并返回结果。

redis的持久化?

RDB:是基于内存快照的方式进行数据的全量备份。redis的主进程根据配置自动触发,fork一个子进程进行全量备份(二进制文件)。但redis宕机,会丢失距下一次快照时间内的数据。重启后,恢复数据快。(redis默认开启)

AOF:是基于日志文件进行数据备份。每一次Redis写操作,都记录在AOF日志中。当AOF体积大到配置值,会触发AOF重写操作,生成一个新的AOF文件。AOF比RDB文件大,重启后,恢复数据较慢。

redis分布式锁?

Redis分布式锁是由Redisson实现的。原理为setnx和lua脚本,setnx是判断key是否存在,若存在才添加,这个行为可以视为上锁。Del删除key,可以视为释放锁。

redisson有个watchDog的线程,一个线程获取锁后,watchDog会给持锁线程续期。

Redisson是可重入锁,内部有hash存储线程与重入次数,同一个线程每次获取锁会对应加1,释放锁会减1

Redisson不能解决主从数据一致的问题,但可以用redisson提供的红锁解决,但性能很低,可以用zookeeper。

主从数据同步?

一个redis的并发能力是有上限的,进一步提高并发能力就需要搭建主从集群。redis集群分为主节点,只有一个,提供读和写操作。从节点,多个,提供读操作。从节点需要与主节点进行数据同步。从节点请求同步发送自己的版本id和偏移量信息,主节点判断是否是第一次同步数据,若为第一次,(bgsave)则会fork一个子进程生成rdb文件发给子节点,子节点根据rdb进行数据同步。若不为第一次,主节点每次操作会记录到一个relp的文件,根据从节点发来的偏移量,发送记录操作。子进程根据写操作同步数据。

哨兵机制?

场景:redis是集群部署,并且还有哨兵集群。哨兵会实时监控主节点redis的情况,当一个哨兵检测主节点redis宕机,并不会主从替换,因为一个哨兵检测异常,可能因为网络的问题导致。当大部分哨兵发现主节点redis异常,会进行哨兵选举,让一个哨兵进行主从切换。(自动切换)

http://www.lryc.cn/news/381983.html

相关文章:

  • 大模型日报2024-06-24
  • 深入理解计算机系统 CSAPP 练习题7.4
  • 摘苹果-第13届蓝桥杯省赛Python真题精选
  • 开源项目推荐-vue2+element+axios 个人财务管理系统
  • 手机数据如何恢复?11 款最佳安卓手机恢复软件
  • 大语言模型千问2的web搭建(streamlit)
  • 守护生产车间安全:可燃气体报警器预警与检测的重要性
  • [创业之路-125] :制造业企业的必备管理神器-ERP-计算的资源管理与企业的资源管理的异同
  • TDengine Cloud 新增签约,这次是能源物联网平台
  • Kafka 最佳实践:构建高性能、可靠的数据管道
  • 进军韩国5G市场!移远通信5G模组RG500L-EU率先获得KT、LGU+认证
  • http/2 二进制分帧层 (Binary Framing Layer)讲解
  • Mybatis分页查询,同时返回total
  • JDK17新增语法特征
  • 2748. 美丽下标对的数目(Rust暴力枚举)
  • Vue中双向数据绑定是如何实现的
  • 桌面云和云桌面的区别联系
  • ECMAScript6介绍及环境搭建
  • 什么是Azure OpenAI?
  • 一个易于使用、与Android系统良好整合的多合一游戏模拟器
  • java spring注解的使用
  • 什么是数据同步?数据同步时发生中断怎么办?
  • HarmonyOS Next开发学习手册——ExtensionAbility
  • 如何开发企业微信SCRM
  • Java中的标准注解与数据校验:深入解析与实例
  • 模型泛化性测试
  • 智能推荐系统:技术解析与实践指南
  • 盛元广通数字孪生智能集控实验室管理系统
  • Spring Boot 优雅进行数据脱敏
  • Vue3 条件语句