- 博客(24)
- 收藏
- 关注
原创 Redis核心技术及实战(十.String类型开销大?如何替代?)
十:String类型内存开销大?如何替代?原文:《11丨“万金油”的String,为什么不好用了?》例子:存储一个10位数的图片ID和其对应的10位数的图片存储ID,一共存储1亿个这样一个单键值对,我们选用String类型存储时,发现居然用了6.4GB的内存,也就是说平均一个键值对就用了64字节内存,但是,10位数可以用一个8字节的Long型表示,那么一个键值对也就16字节,多出来的48字节去哪了呢? => **除了记录实际数据,String还需要额外的内存空间记录数据长度、空间使用
2022-05-25 10:23:12
80
原创 Redis核心技术及实战(九.解决大数据量问题)
九:cluster集群——解决大数据量问题原文:《09丨切片集群:数据增多了,是该加内存还是加实例?》Redis要保存大量数据怎么办?纵向扩展:升级单个Redis实例的资源配置,如增加内存容量、高配置CPU等。但是,当数据量特别大时,硬盘会很难支撑,而且,一个实例中的数据太多,在fork子进程保存快照时就会严重阻塞主线程。横向扩展:切片集群,使用多个Redis实例存储数据。这时,会有两个问题:数据切片后,怎么在多个实例间分布?客户端怎么确定想要访问的数据在哪个实例上?1. 数据切片和实例的对应
2022-05-25 10:21:25
829
原创 Redis核心技术及实战(七、八 . 哨兵)
七:哨兵机制——实现不间断服务原文:《07丨哨兵机制:主库挂了,如何不间断服务?》当主库挂了之后,写服务会中断、从库无法进行数据同步。我们需要运行一个新的主库,比如说把一个从库切换为主库,这就涉及到三个问题:主库真的挂了吗?该选择哪个从库作为主库?怎么把新主库的相关信息通知给从库和客户端?要解决这三个问题,就需要用到哨兵机制。哨兵其实就是一个运行在特殊状态下的Redis进程,只不过不执行读写请求操作。哨兵机制的流程:**监控:**哨兵会在运行过程中,周期性地向所有主从库发送PING命令
2022-05-25 10:20:20
98
原创 Redis核心技术及实战(六.实现数据一致性)
六:主从同步——实现数据一致性原文:《06丨数据同步:主从库如何实现数据一致?》Redis是读写分离的,每个节点都可以进行读操作,但是写操作只能在主节点上,当主节点写完后才会同步给从节点。那么主从同步是怎么完成的呢?一次性全部传给从库还是分批同步?主从库之间的网络连接中断了还能保持数据一致吗?1. 主从库间的第一次同步三个阶段:**第一阶段:建立连接、协商同步。**从库执行slaveof命令(Redis5.0以后为replicaof命令)告诉主库即将进行同步,主库同意后便可以开始同步。具体来说
2022-05-25 10:19:14
352
原创 Redis核心技术及实战(四、五 . AOF日志、RDB日志)
四:AOF日志原文:《04丨AOF日志:宕机了,Redis如何避免数据丢失?》AOF日志记录了什么? => 操作的具体逻辑,具体格式见下图。不同于redo log的WAL(写前日志),AOF日志是写后日志,先把数据写到内存中去,再写日志。为什么呢?因为为了避免额外的开销,Redis在向AOF里面记录日志的时候并不会对其进行语法检查,如果先记录日志再执行命令的话,如果语句有错,日志中就记录了错误的命令。除此之外,写后日志不会阻塞当前的写进程。但是AOF也存在两个风险:如果记录完日
2022-05-25 10:18:17
118
原创 Redis核心技术及实战(三.为什么单线程的Redis那么快)
三:为什么单线程的Redis那么快?原文:《03丨高性能IO模型:为什么单线程Redis能那么快?》注:Redis的单线程是指网络IO和键值对读写是单线程的,而其它功能如持久化、异步删除、集群数据同步等其实是额外线程完成的。Redis为什么不用多线程?系统中会存在很多被多线程同时访问的共享资源,比如共享的一个数据结构,如果是多线程的话,对于这个共享资源还要制定同步机制,不仅不会提供吞吐率,反而会增大开销、提高系统的复杂度。为什么单线程还这么快?除了上节讲的两个原因外,还有一个原因,Redis采用了
2022-05-25 10:15:34
39
原创 Redis核心技术及实战(二.数据结构)
二:Redis为什么这么快?=> 数据结构原文:《02丨数据结构:快速的Redis有哪些慢操作?》为什么这么快?一是因为内存存储,二是因为其数据结构,三是多路复用机制(下一节讲)。Redis使用Hash表来保存所有的键值对,Key为String类型,Value为五种数据形式,每一种数据形式都有其对应的底层结构,除String类型外的4种数据类型又称为集合数据。Note:Redis还有三种扩展数据类型,BitMap、HyperLogLog、GEO,这三种在后面十一、十二节介绍。1. 全局哈希
2022-05-25 10:14:04
346
原创 Redis核心技术及实战(一.如何设计一个键值数据库)
一:一个键值数据库包含了什么/如何设计一个键值数据库?原文:《01丨基本架构:一个键值数据库包含什么?》设计一个键值型数据库时要考虑:存哪些数据? => 数据类型。key大多为String,value可以多种多样,如Redis的string、set、hash…可以对数据做哪些操作? => 操作模块。如put、get、scan、delete、set…键值对保存在内存还是外存? => 存储模块。内存快但可能丢失(作缓存),外存慢但安全(作
2022-05-25 10:12:56
159
原创 B站千锋教育Kafka视频
知识来源:B站视频零. 基础知识类似于RabbitMQ应用解耦异步提速削峰填谷一. 消息中间件的流派什么是MQ?有Broker的MQ:以一台服务器作为消息中转站Broker,生产者把消息发给Broker就完成任务了,Broker负责消息的分发。重Topic:整个Broker依据topic来进行消息的中转,一定需要topic;如Kafka(性能最快)、ActiveMQ、RocketMQ(性能与kafka比肩,功能更多)**轻Topic:**topic只是一种中转模式,可有可没有;
2022-05-25 10:08:20
152
原创 常见排序算法Java实现
排序方法分类**比较类排序:**通过比较来决定元素间的相对次序 时间复杂度不能突破O(nlogn),因此又被称为非线性时间比较类排序;交换排序冒泡排序快速排序插入排序(简单)插入排序希尔排序选择排序(简单)选择排序堆排序归并排序**非比较类排序:**不通过比较来决定元素的相对次序,时间复杂度可以突破到线性,又被称为线性时间非比较类排序。计数排序桶排序冒泡排序 O(n^2)不断比较相邻的两个元素,并交换位置,一次遍历确定一个最值放在最后。
2022-05-06 13:16:14
62
原创 若依项目分离版 后端部分讲解
RuoYi-Vue版:后端部分 若依分离版官方文档 写在前面:下面每一个功能后面写的(如/captchaImage、/login)都是实现该功能的核心方法或者映射路径,使用 Ctrl + Shift +F 全局查找,找到这些核心代码然后去debug。1. 登录逻辑(含验证码) /captchaImage、/login// 进行登录校验的核心方法:AuthenticationManager.authenticate()// 调用链AuthenticationManager.authe
2022-04-18 23:36:41
1412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人