常见面试题21

简介: 本文介绍如何提升分布式锁性能,包括减少锁范围、使用Redis集群、优化库存扣减及分段锁策略;探讨Redis故障时的应对方案,如哨兵机制、本地缓存 fallback;并解析Redis常见数据类型及其应用场景,对比主从与分片集群架构差异。

如何提升分布式锁性能

1、锁定的代码块尽量的少,和尽早的释放锁;

2、redis集群有助于redis的处理效率;

3、库存数据不一定使用分布式锁,而是可将库存放入redis中,然后递减方式来实现扣减;

4、复杂一点的实现也可以采用:分段分布式锁,将库存分成好几个数据,然后锁这几个数据,也能提高性能

Redis挂了数据如何处理

1、redis有集群,不会轻易不可用;若某个主节点挂了则通过sentinel哨兵自动用从节点替换为主节点;

2、若redis真不可使用;可以支持查询数据库,业务还是一样可执行;然后再修复redis;

3、如果要完整的思考在redis挂掉的情况下,微服务需要高效稳定运行,那么可以在每台微服务中都设置本地缓存(hashMap、memcache、caffeineCache都可以)

redis常见数据类型

Redis 是一种基于内存的键值存储数据库,支持多种数据类型,每种数据类型都有其特定的用途和适用场景。以下是 Redis 中常见的数据类型:

  1. 字符串(String)
  1. 最简单的数据类型,可以存储字符串、整数或者浮点数。常用命令包括 SET、GET、INCR 等。
  1. 哈希表(Hash)
  1. 键值对集合,其中每个键都包含一个字段和值的映射表。适合存储对象的属性集。常用命令包括 HSET、HGET、HDEL 等。
  1. 列表(List)
  1. 一个有序的字符串元素集合,可在头部或尾部插入元素。适合实现队列、栈等数据结构。常用命令包括 LPUSH、RPUSH、LPOP、RPOP 等。
  1. 集合(Set)
  1. 无序且唯一的字符串集合,支持交集、并集、差集等操作。适合存储不重复的元素。常用命令包括 SADD、SREM、SMEMBERS 等。
  1. 有序集合(Sorted Set)
  1. 类似集合,但每个元素都关联一个分数(score),可以按照分数排序。适合实现排行榜、范围查找等功能。常用命令包括 ZADD、ZRANGE、ZREVRANK 等。

项目中缓存的数据类型

缓存在redis中的数据类型有:

  • 字符类型的常规缓存内容(验证码)
  • 列表类型的有首页广告列表
  • 集合类型的热门商品

redis主从集群与分片集群的区别

  1. 主从集群(Master-Slave Replication)
  1. 主从集群是通过主节点(Master)和若干个从节点(Slave)组成的集群。主节点负责处理写操作和广播读操作给所有从节点,从节点负责处理读操作并复制主节点的数据。
  2. 主从集群的优点是简单易用,从节点可以提高读取性能和数据冗余,同时也能在主节点故障时提供故障转移。提高redis的可用性
  1. 分片集群(Sharded Cluster)
  1. 分片集群将数据分片存储在多个节点上,每个节点负责存储部分数据。客户端根据一定的规则将数据请求路由到相应的节点上。
  2. 分片集群的优点是能够横向扩展,提高了整体的读写性能和存储容量;同时也能提高系统的可用性和容错能力。

总的来说,主从集群适合简单场景下的读写分离和故障恢复,而分片集群适合需要大规模扩展和高性能的场景。

目录
相关文章
|
1月前
|
数据库 微服务
常见面试题19
BASE理论提出“基本可用、软状态、最终一致性”,是分布式系统中对CAP定理的实践妥协。相比强一致的刚性事务(ACID),它属于柔性事务,强调高可用与最终一致,适用于Seata等分布式事务方案中的AT、TCC、SAGA模式,而非传统2PC的强一致性。
51 7
|
1月前
|
NoSQL API 调度
常见面试题20
分布式锁适用于共享资源互斥、防止重复操作、控制并发流量等场景,常见于超卖防控。可通过数据库、Redis(如Redisson)、ZooKeeper实现,其中Redisson适合高并发,ZooKeeper保证强一致性。
59 5
|
1月前
|
负载均衡 安全 应用服务中间件
常见面试题18
正向代理代表客户端发起请求,隐藏客户端身份,用于访问控制与隐私保护;反向代理代表服务器接收请求,实现负载均衡与安全防护;CDN通过全球节点加速内容分发;Nginx可作反向代理实现轮询、权重等负载均衡策略;CAP定理指出分布式系统无法同时满足一致性、可用性与分区容错性。
71 4
|
1月前
|
XML SQL Java
常见面试题15
Spring Boot配置优先级:命令行参数 > 系统属性 > application.properties > .yml > .yaml;自动配置基于@Import与条件注解,SpringBoot3使用xxx.imports替代spring.factories。自定义starter需分离starter与autoconfigure模块。MyBatis支持XML或注解映射结果集,参数传递可用@Param或直接传对象/Map。
113 4
|
1月前
|
缓存 负载均衡 Java
常见面试题16
MyBatis提供一级缓存(SqlSession级)和二级缓存(Mapper级),提升查询效率。Eureka通过注册、续约、发现、下线实现服务治理,Nacos在功能与性能上更优,支持配置管理与实时推送。Spring Cloud LoadBalancer取代Ribbon,提供轮询、随机等负载策略。Hystrix与Sentinel均支持熔断限流,但Sentinel在流量控制和实时性上更强。
60 2
|
2月前
|
SQL Java 索引
常见面试题12
通过SkyWalking链路追踪或MySQL慢查询日志定位慢SQL,结合explain分析执行计划,优化索引与表设计,提升SQL性能。Spring中IOC实现对象托管,DI完成依赖注入,Bean默认单例非线程安全,作用域可配置,初始化时机分情况而定。
108 7
|
2月前
|
缓存 Java 数据库
常见面试题13
本文详解Spring核心机制:Bean生命周期(实例化、依赖注入、初始化、销毁)、三级缓存无法解决构造函数循环依赖(需@Lazy解决)、AOP原理(动态代理实现日志、权限控制)及事务管理(@Transactional与传播行为),并梳理常用注解分类。
178 5
|
2月前
|
JSON 前端开发 Java
常见面试题14
Spring MVC核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、Handler及ViewResolver。拦截器用于登录校验等,与过滤器在范围和机制上有所不同。常用注解如@RequestMapping、@RequestBody等简化开发。SpringBoot则通过起步依赖、自动配置和内嵌服务器,大幅简化Spring应用的搭建与部署。
56 2
|
2月前
|
存储 网络协议 关系型数据库
常见面试题10
HTTP是超文本传输协议,基于TCP,规定客户端与服务器通信规则。常见请求方式有GET和POST,区别在于参数传递、安全性和用途。HTTPS通过SSL加密更安全,但耗资源。常用状态码如200成功、404未找到、500服务器错误。转发在服务端完成,重定向由浏览器发起两次请求。MySQL中char定长、varchar变长;事务具ACID特性,隔离级别解决并发问题。
89 3
|
2月前
|
缓存 搜索推荐 算法
常见面试题09
排序算法分为比较类(如快排、归并、堆排)和非比较类(如计数、桶、基数)。快排平均最快但不稳定,归并稳定且复杂度恒定,插入排序适合小规模或近有序数据。工业级常混合多种算法优化性能。
72 2