- 博客(37)
- 收藏
- 关注
原创 36.Redis核心设计原理
Set为无序的,自动去重的集合数据类型,Set 数据结构底层实现为一个value为x`的字典(dict),当数据可以用整形表示时,Set集合将被编码为intset数据结构。ZSet 为有序的,自动去重的集合数据类型,ZSet 数据结构底层实现为字典(dict)+跳表(skiplist),当数据比较少时,用ziplist编码结构存储。ZSet 为有序的,自动去重的集合数据类型,ZSet 数据结构底层实现为 字典(dict) + 跳表(skiplist) ,当数据比较少时,用ziplist编码结构存储。
2024-11-12 18:03:42 1214
原创 35.Redis 7.0简介
2022 年 2 月初,Redis 7.0 迎来了首个候选发布(RC)版本。这款内存键值数据库迎来了“重大的性能优化”和其它功能改进,性能优化包括降低写入时复制内存的开销、提升内存效率,改进 fsync 来避免大量的磁盘写入和优化延迟表现。Redis 7.0-rc1 的其它一些变动,包括将“Redis 函数”作为新的服务器端脚本功能,细粒度 / 基于键的权限、改进子命令处理 / Lua 脚本 / 各种新命令。此外也提供了一些安全改进。
2024-11-08 09:00:00 1217
原创 34.Redis事务
事务表示一组动作,要么全部执行,要么全部不执行。例如微博粉丝关注用户,博主粉丝列表增加了用户,粉丝关注列表增加了博主;Redis 提供了简单的事务功能,将一组需要一起执行的命令放到multi和exec两个命令之间。multi(['mʌlti]) 命令代表事务开始,exec(美[ɪɡˈzek])命令代表事务结束,如果要停止事务的执行,可以使用discard命令代替exec命令即可。它们之间的命令是原子顺序执行的,例如下面操作实现了上述用户关注问题。
2024-11-07 10:51:29 740
原创 33.Redis多线程
反应”器名字中”反应“的由来:“反应”即“倒置”,“控制逆转”,具体事件处理程序不调用反应器,而向反应器注册一个事件处理器,表示自己对某些事件感兴趣,有时间来了,具体事件处理程序通过事件处理器对某个指定的事件发生做出反应;这种控制逆转又称为“好莱坞法则”(不要调用我,让我来调用你)Redis 基于 Reactor 模式开发了自己的网络事件处理器- 文件事件处理器(file event handler,后文简称为 FEH),而该处理器又是单线程的,所以redis设计为单线程模型。
2024-11-06 13:00:09 1605
原创 32.Redis高级数据结构HyperLogLog
HyperLogLog(Hyper[ˈhaɪpə(r)])并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。如果你负责开发维护一个大型的网站,有一天产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现?如果统计 PV 那非常好办,给每个网页一个独立的 Redis 计数器就可以了,这个计数器的 key 后缀加上当天的日期。
2024-11-04 09:03:20 530
原创 31.Redis开发规范与性能优化
以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id保证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:user:{uid}:friends:messages:{mid} 简化为 u:{uid}:fr:m:{mid}反例:包含空格、换行、单双引号以及其他转义字符。
2024-11-01 16:07:57 1535
原创 30.Redis缓存设计
由于大批量缓存在同一时间失效可能导致大量请求同时穿透缓存直达数据库,可能会造成数据库瞬间压力过大,甚至挂掉,对于这种情况我们在批量增加缓存时最好将这一批数据的缓存过期时间设置为一个时间段内的不同时间。
2024-10-31 17:53:21 1196
原创 28.Redis集群
在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异 常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现 一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。
2024-10-29 23:19:37 1455
原创 27.Redis哨兵架构
这样的设计机制确保了 Redis 集群在主节点切换等情况下,客户端能够及时获取最新的主节点信息,从而保证系统的高效运行和数据的一致性。Sentinel(哨兵)是一种特殊的 Redis 服务,其主要功能并非提供常规的读写服务,而是专门用于监控 Redis 实例节点。3.当 Redis 的主节点发生变化时,哨兵能够在第一时间感知到这一变化,并且会立即将新的 Redis 主节点通知给客户端(2.客户端便直接访问 Redis 的主节点,并非每次都需通过哨兵代理来访问 Redis 的主节点。
2024-10-28 17:24:53 822
原创 26.Redis主从架构
所以,当网络连接断开后,slave 会请求 master 继续尚未完成的复制,从所记录的数据下标处开始。要是 Master 接收到了多个 slave 的并发连接请求,它只会进行一次数据持久化操作,并非针对每一个连接都分别进行一次,而后会把这一份持久化后的数据发送给所有并发连接的 slave。3、替代redis的事务功能:redis自带的事务功能很鸡肋,报错不支持回滚,而redis的lua脚本几乎实现了常规的事务功能,支持报错回滚操作,官方推荐如果要使用redis的事务功能可以用redis lua替代。
2024-10-25 10:32:30 1346
原创 25.Redis持久化
在默认情况下, Redis 将内存数据库快照保存在名字为的二进制文件中。对 Redis 进行设置, 让它在“”这一条件被满足时, 自动保存一次 数据集。以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次 数据集:只需要将所有的save保存策略注释掉即可,还可以手动执行命令生成RDB快照,进入redis客户端执行命令save或bgsave可以生成dump.rdb文件,
2024-10-24 18:24:14 614
原创 24.redis高性能
Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外 提供键值存储服务的主要流程。Redis 的多线程部分,比如持久化、异步删除、集群数据同步等,其 实是由额外的线程执行的。
2024-10-24 09:15:30 481
原创 23.Redis核心数据结构
字符串常规操作备注应用场景存入字符转键值对单值缓存、对象缓存批量存储字符串键值对对象缓存存入一个不存在的键值对分布式锁GET KEY获取一个字符串键值批量获取字符串值删除键设置一个键的过期时间原子加减INCR key将key中存储的数字值加1阅读量、登录统计DECR key将key中存储的数字值减1将key中存储的数字值加上increment分布式全局序列号将key中存储的数字值减去decrement。
2024-10-23 15:19:29 1052
原创 21.IT深度剖析
Java程序在运行的时候,主要就是执行字节码指令,一般这些指令会按照顺序解释执行,这种就是解释执行,但是那些被频繁调用的代码,比如调用次数很高或者在 for 循环里的那些代码,如果按照解释执行,效率是非常低的;为了提高热点代码的执行效率,,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化。完成这个任务的编译器,就称为。
2024-10-21 23:53:11 1593
原创 20.ZGC详解
是JDK 11中推出的一款追求极致低延迟的垃圾收集器;停顿时间不超过10ms(JDK16已经达到不超过1ms);停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆,JDK15后已经可以支持16TB。
2024-10-20 19:06:30 1144
原创 19.JVM调优常量池详解
对于java应用我们可以通过一些配置把程序运行过程中的gc日志全部打印出来,然后分析gc日志得到关键性指标,分析GC原因,调优JVM参数。打印GC日志方法,在JVM参数里增加参数,%t 代表时间Tomcat则直接加在JAVA_OPTS变量里。此参数主要定义GC Log 的详细信息。输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式产生GC的原因(默认开启)开启滚动生成日志滚动GC日志文件数,默认0,不滚动。
2024-10-19 18:16:36 2149
原创 18.JVM调优工具详解
JPS命令是用于列出当前系统中所有的,并显示或。默认情况下,jps命令列出Java程序的进。例如,运行jps命令可以列出当前系统中所有的Java进程及其进程ID和主函数名称。jps命令的参数及其作用。
2024-10-18 09:00:00 2214
原创 17.JVM垃圾收集器G1&ZGC
ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器,ZGC可以说源自于是Azul System公司开发的C4(Concurrent Continuously Compacting Collector) 收集器。
2024-10-17 16:19:24 1007
原创 15.JVM垃圾收集算法
分代收集理论是JAVA虚拟机进行垃圾回收的一种思想,根据对象存活周期的不同将内存分成不同的几个区域;一般将JAVA堆内存分为新生代和老年代;根据每个分代特点选择不同的垃圾收集器;在新生代中,每次收集的对象(超过99%)都会立即被清理掉,采用复制算法,每次只需要付出很少的复制成本就可以完成垃圾收集;在老年代中,对象的存活几率较高,存活周期较长,并且没有额外的空间进行分配担保,所以必须选择标记-整理或者标记-清除的算法;注意这种算法效率较低,会是复制算法的10倍以上;
2024-10-15 18:02:37 334
原创 14.JVM对象创建与内存分配机制深度剖析
1.jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩2.jvm配置参数:UseCompressedOops,compressed--压缩、oop(ordinary object pointer)--对象指针-XX:+UseCompressedOops 默认开启的压缩所有指针-XX:+UseCompressedClassPointers 默认开启的压缩对象头里的类型指针Klass Pointer。
2024-10-15 10:15:15 1875
原创 13.JVM内存模型深度剖析
JDK代表Java Development Kit(Java开发工具包),是用于开发和编译Java应用程序的软件包。JDK是由Oracle提供的Java平台的官方实现,包含了开发和运行Java程序所需的工具、库和JRE(Java Runtime Environment)。
2024-10-11 12:55:36 1276
原创 11.MySql8.0新特性
索引隐藏只是不可见,但是数据库后台还是会维护隐藏索引的,在查询时优化器不使用该索引,即使用force index,优化器也不会使用该索引,同时优化器也不会报索引不存在的错误,因为索引仍然真实存在,必要时,也可以把隐藏索引快速恢复成可见。软删除就可以使用隐藏索引,比如我们觉得某个索引没用了,删除后发现这个索引在某些时候还是有用的,于是又得把这个索引加回来,如果表数据量很大的话,这种操作耗费时间是很多的,成本很高,这时,我们可以将索引先设置为隐藏索引,等到真的确认索引没用了再删除。
2024-10-09 10:52:24 1196
原创 9.InnoDB底层原理与日志机制
主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
2024-10-08 18:20:47 1379
原创 8.MVCC多版本并发控制机制
在可重复读隔离级别,当事务开启,执行任何查询sql时会生成当前事务的一致性视图read-view,该视图在事务结束之前永远都不会变化(如果是读已提交隔离级别在每次执行查询sql时都会重新生成read-view),这个视图由执行查询时所有未提交事务id数组(数组里最小的id为min_id)和已创建的最大事务id(max_id)组成,事务里的任何sql查询结果需要从对应版本链里的最新数据开始逐条跟read-view做比对从而得到最终的快照结果。3. 如果 row 的 trx_id 落在黄色部分(min_id。
2024-10-03 20:42:43 669
原创 7.MySql锁机制
MYISAM在执行查询语句SELECT前,会自动给涉及的表加锁,在执行update、insert、delete操作会自动给涉及的表加锁。InnoDB在执行SELECT前不会给表加锁,会在执行update、insert、delete操作时自动给行数据加锁。读锁会堵塞写操作,但是不会阻塞读操作,写锁会堵塞读和写操作。InnoDB存储引擎由于实现了行锁,虽然锁机制的实现会带来性能方面的损耗也有可能比表锁的性能更高,但是在整体并发的处理方面要远远由于MYISAM的表锁定。
2024-10-02 21:36:45 989
原创 6.MySql事务原理及优化
通常我们所用的MySql数据库不是单机的,而是会有很多事务在同时进行,多个事务可能会在同一时间对相同的一批数据进行增删改查操作,也就是我们所说的并发,这样就会导致我们说的脏读、脏写、幻读、不可重复读等操作。这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制、日志机制,用一套机制来解决多事务并发问题。
2024-10-01 22:25:53 964
原创 5.分页、join、in、exists、count查询优化
在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与 join 的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。
2024-09-30 09:00:00 628
原创 4.Order by 与 Group by优化
Using index 是MySql扫秒索引本身完成排序。index 高效,filesort拿到内存或磁盘中排序,效率低;
2024-09-29 15:09:28 1155
原创 2_1 索引优化(补)
对【2.Explain详解与索引优化 - CSDN App】https://blog.csdn.net/Csdn_xzh/article/details/142603868?type=blog&rId=142603868&refer=APP&source=Csdn_xzh 这篇文章的常用优化错误改正和补充这里以表employess为例。
2024-09-28 23:00:21 524
原创 2.Explain详解与索引优化
id列是select查询时执行的先后顺序。一个完整的sql查询可能会嵌套、连接多层查询,有多少个查询就会有多少行查询优化展示信息,id越大执行顺序越优先,若ID相同,则排在上面的优先执行。
2024-09-28 09:00:00 974
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人