自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis的原理

先要了解一下linux系统的结构,即用户空间、内核空间、硬件,一般用户能够操作的软件都在用户空间中,用户空间无法直接操作硬件需要通过内核空间作为中转操作硬件。比如用户发送一条消息给其他人,用户空间想要调用网卡但用户空间的权限不能够直接操作硬件需要将数据和请求写入用户空间的缓冲区再同步到内核空间的缓冲区再调用硬件发送请求。redis提供了三个事件处理器,分别相应连接、处理请求、返回请求。处理请求器在接收到用户请求后会分析请求然后解析请求转成redis命令最后将数据通过请求返回器返回给用户。

2024-11-15 21:09:15 175

原创 Redis集群策略

全量同步:就是从节点发送请求给主节点主节点判断从节点是否为第一次同步,主节点判断的依据是一个叫做replicationid的值,因为如果判断从节点是第一次同步则会将数据的版本和主节点的replicationid发送给从节点,从节点就会保存到本地。在项目开发中当项目的并发量达到一定数量,单个实例已经无法满足用户访问量就可以部署集群,主从复制就是将redis的读写进行分离,写的操作在master主节点上执行,读操作在slave(replication)从节点上执行,一般从节点的数量要多于主节点。

2024-11-13 11:23:32 146

原创 Redis如何实现分布式锁

在实际开发中可以使用redisson提供的分布式锁基于Setnx和lua脚本实现,redisson提供了一个watchdog看门狗机制,当一个锁过期了但是用户的业务还未处理完则会自动进行续期,这样就能保证锁控制的有效时间。原理是维护了一个hash表,因为一个线程只有一个唯一的ThreadId,这个表则会记录这个线程id获取锁的次数,获取一次锁则加一,释放锁则减一,也就是说当一个线程重复获取锁后再释放锁不会直接删除锁而是判断这个表中的value是否为0,如果为0了才会执行删除。

2024-11-13 11:08:36 232

原创 Redis:过期策略、淘汰策略

Redis提供了两种过期删除策略:惰性删除和定时删除 惰性删除: 就是再一个key过期之后,redis不会主动删除这个数据,那么会在用户请求到这个数据时判断这个key是过期的然后进行删除。那么这种删除策略可能会导致一个问题,一个过期key如果再也没有用户访问到可能会导致这个key一直存在在内存当中。 定时删除: 就是每过一段时间redis就会从内存中拿到一些key进行判断删除过期的key。redis提供了两种模式:slow 和 fast 这两种模式顾名思义就是删除的频率和速度的快慢。这种删除策略的问

2024-11-13 09:39:41 207

原创 Redis数据持久化

前者是手动开启的,当开启save命令就会阻塞主进程的其他所有请求来生成RDB。那么在子进程生成RDB时,主进程接收到写命令则会复制一份要修改数据的副本,主进程的读写都会基于这个副本就解决脏数据的问题。always是每一次写操作都会触发一次刷盘数据完整性最高,everysec将一秒中的所有操作先写到缓存中是每秒触发一次刷盘只可能丢失一秒的数据,no则是将写命令写入缓存中后由操作系统来决定刷盘频率。Redis还提供了aof文件的重写功能,这个功能主要是为了将一些无效的操作命令简化清理掉来压缩aof文件的大小。

2024-11-13 08:51:54 163

原创 消息队列(一)

在分布式架构中,可能会出现几个模块依赖于一个模块,这一个模块需要发送消息给多个模块,如果这时新增模块并依赖于这一个模块,这一个模块需要考虑消息发送时其他模块是否在线,需要发给几个模块,这样就形成了很高的耦合。如果在项目中,不需要同步模块就可以使用mq将消息异步解耦。在分布式架构中,当用户发来一个写库请求需要同时写入ABCD模块,请求需要3ms发送到A模块,A模块写库可能需要200ms,其他三个模块可能同样需要200、300ms,所以一整个下来一个请求需要将近1000ms这在用户这边是不可接受的。

2024-11-13 08:19:21 152

原创 Redis使用场景及问题(二)

读写锁:就是在读多写少的情况下使用的一种锁,可以使用redissson提供的readlock和writelock实现。他的原理是在进行读操作时,所有线程都可以获取到这个共享锁,而在写操作时则是排他锁即只有一个线程可以对数据进行操作。但是在实际开发中延迟时间的设定和数据库同步时可能会导致其他线程读取到脏数据,所以在对数据一致性和数据同步实时性要求高的场景下不推荐使用这个方法。在项目中使用mysql和redis,如何保证这两者的数据是同步的。可以使用读写锁来实现数据同步。1、要求数据强一致性。

2024-11-09 20:44:22 149

原创 Redis使用场景及问题(一)

1.互斥锁:当一个线程访问这个数据时,发现这个数据已经过期则会获取到锁,然后去数据库中查询数据进行缓存恢复,其他线程都会等待当前线程,当缓存恢复成功后,再释放锁允许线程进行访问。数据一致性高,性能差。即当一个请求查询的数据是不存在的数据,缓存中和数据库中都不存在这条数据,那么每一次请求都会直接请求数据库,数据库可能会因此宕机造成程序的崩溃。1.将请求查询的数据设置为空,存入缓存,这样可能会导致数据库和缓存的一致性问题,即数据库更新数据后,缓存未实时进行更新导致用户还是无法访问到这条数据。

2024-11-09 20:12:43 183

原创 八股文(五)

处理器映射器通过url找到对应的处理器,生成处理器对象和处理器拦截器(如果有则生成)返回给DispatcherServlet。DispatcherServlet接收到用户请求,调用HandlerMapping处理器映射器,请求获取Handle。DispatcherServlet将解析后的View进行渲染视图,将Model填充到View中。ViewResover将解析的结果具体的View传给DispatcherServlet。DispatcherServlet调用HandlerAdapter处理器适配器。

2024-10-03 10:42:30 255

原创 八股文(四)

Map实现类:HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap、HashTable、Properties等。LinkedHashMap:HashMap,,也是一种拉链式散列结构,在上面的结构中加入了一个链表,使存储的数据有序。实现类:ArrayList、LinkedList、Vector、Stack。3、数组只能存储一种类型的数据,集合可以存储多种类型的数据。Map:Key唯一,Value不唯一,无序,无索引。List:数据不唯一,有序,有索引。

2024-10-03 10:15:57 207

原创 八股文(三)

当java文件被编译为.class文件后,还不能直接调用底层操作系统直接运行,而需要一个翻译器将字节码文件解析为底层系统能看懂的二进制文件。记录程序的行数,通过改变程序运行行数,实现循环,跳转,返回,分支。将(java.object)类加载到运行时数据区的方法区中。java中最大的一块内存区,其中的资源被所有线程共享。和虚拟机栈作用一样,但是服务的是其他编程语言。储存类文件,静态方法,静态变量,常量。储存临时变量,操作数栈,方法出口等。jvm由两个子系统、两个组件组成。二、运行时数据区组成部分及作用。

2024-09-26 09:43:09 129

原创 八股文(二)

5、观察者模式:实现了对象键的一种一对多的关系,一个对象发生变化,依赖于它的对象都要被通知强制更新,例如listener中的applicationlistener。5、spring jdbc 提供了jdbc的抽象类,简化了jdbc的代码和数据库厂商对错误代码的检查,简化了jdbc。3、代理模式:spring aop 通过java的动态代理和cglib的字节码生成技术实现。3、spring context 提供了基于core的封装类,实现了框架式的对象访问方式。2、单例模式:IOC容器管理并创建的对象。

2024-09-21 20:02:06 220

空空如也

空空如也

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

TA关注的人

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