自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 Redis的三种集群方案

3.通知,当集群发生故障转移的时候,哨兵集群会充当redis客户端服务发现来源,把最新信息通知客户点连接哪一个redis节点,那个是主节点。2.自动故障恢复,选举新的从节点升级为master节点。增量同步:发生在slave重启或者后期数据变化。1.监控:检查节点是否按照预期工作。全量同步:第一次同步时。

2024-07-30 14:43:53 244

原创 Redisson实现的分布式锁实现主从一致性问题以及解决方案

当主节点被第一个线程加锁以后,还没有来得及把数据同步给子节点就宕机了,这个时候其中一个子节点会晋升为主节点,如果这个时候又来了一个线程2,会对新的主节点加锁,这个时候就会出现俩个线程持有同一个锁,没有了锁的互斥性,造成线程安全问题。RedLock(红锁)锁:不能只在一个redis实例上创建锁,应该是在多个redis实例上创建锁(n/2+1),避免在一个redis实例上上锁。我们的redis是AP高可用思想,如果实在要实现强一致性,那就用CP思想的Zookeeper解决主从一致性问题。

2024-07-30 14:34:59 488

原创 Redis分布式锁结合Lua脚本实现

通过 Lua 脚本,Redisson 能够确保分布式锁的一系列操作(获取锁、设置过期时间、释放锁)的原子性,这对于实现分布式锁等关键功能至关重要。Lua 脚本不仅可以确保操作的原子性,还能提高性能,因为它可以避免客户端和服务器之间的多次往返通信。

2024-07-30 14:28:56 606

原创 Redis分布式锁在抢券场景中的使用

如果在它加锁的时候来了一个新线 一个新线程,他不会立马结束这个线程,而是会有个while尝试获取锁机制 e尝试获取锁机制,一旦短时间内,加 间内,加锁线程结束了,他就会立马获得锁,提高了分布式下的性能。但是这个setnx的锁不好控制锁的有效时间,所以就用了redis的客户端锁redisson,它自带看门狗机制,帮我们处理锁的有效时间。

2024-07-30 14:22:54 308

原创 Redis的数据过期和数据淘汰处理

Rdis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。慢模式是一个定时任务,执行频率是每1秒执行10次(10hz),每次不超过25ms,防止时间太长影响主线程,可以通过配置文件的hz选项调整这个次数;惰性删除:当需要这个key的时候,会检查它有没有过期,如果过期了就删除它,反之返回这个key;5.对全体key基于LRU最近最少使用的key进行删除,统计时间。4对设置了TTL的key随机淘汰。

2024-07-30 14:19:54 256

原创 Redis持久化的俩种方案

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。这样打开以后,aof重写的时候就直接把rdb的内容写到aof文件开头,避免了快速加载时丢失过多数据,缺点是aof里面的rdb部分文件是压缩格式不再是aof格式,可读性差。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。redsi4.0以后开始支持rdb和aof混合持久化,它是默认关闭的,可以通过配置项aof-use-rdb-preamble开启。

2024-07-30 14:14:33 323

原创 Redis实际生产中遇到的三大缓存问题

当线程1来的时候,如果发现逻辑时间已经过期了,他会获得redisson非公平锁,然后开启一个新线程去查询数据库和完成缓存重建,并且重置逻辑过期时间。强一致方案:加互斥锁:线程1没有命中缓存以后,会获取一个redisson的非公平锁,然后查询数据库并且完成缓存重建,然后释放锁;如果在线程1还没有释放锁的时候,线程2来了,他会获取锁失败,然后它会不断地尝试获取锁,直到线程1释放锁,才能拿到缓存数据。大量请求同时针对一个缓存资源的请求,这个时候缓存资源又刚刚过期,这个时候请求会直接达到数据库上面,导致宕机。

2024-07-30 14:10:06 351

原创 Spring AOP在Spring事务和操作日志上的应用

利用切点获取增强类和方法信息,然后利用反射getMethod获取被增强的方法对象,然后从方法中解析Log注解,拿到注解的name属性,然后用RequestContextHolder类获取Request对象,进一步获取用户的登录ip,请求url和方式,操作时间,然后把这些信息写入数据库表里面。AOP称为面向切面编程,用于将那些与业务无关,但是却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重复利用的模块,这个模块被称为“切面”,减少系统中重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

2024-07-30 14:04:05 234

原创 微服务架构里的登录拦截器

它的泛型是map结构,记录登录上下文映射。然后使用Sa-token框架提供的StpUtil工具类获取请求token信息,然后从token信息里面拿到登录id,再把这个登录id添加到我之前创建的请求修改器里面,其中key是loginId和后续每个微服务的登录拦截器做统一,value是用户具体的登录id。定义有个登录拦截器类实现GlobalFilter全局过滤器,重写它的filter方法,形参是当前http服务器上下文,包含请求和响应的信息。然后获取请求路径,如果请求路径是我们的登录接口,才会通过过滤链处理。

2024-07-30 13:58:18 386

原创 遇到的Spring中的事务失效场景

因为我们的事务处理如果出现了问题,它就会自己回滚,但是如果你自己去try catch这个异常的话,方法出现了异常会被我们自己写的try catch捕获处理,事务通知也不知道,就不会出现我们想要的回滚操作。由于spring默认只会回滚非检查异常(RuntimeException),所以我们抛出一个非检查异常也会失效,解决办法就是给Transactional配置一个rollbackFor属性为Exception.class,有了这个属性,只要我们的事务不管出现了什么异常都会回滚。●非public方法。

2024-07-30 13:53:10 131

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除