- 博客(106)
- 收藏
- 关注
原创 Redis ①⑦-分布式锁
分布式锁是锁的一种,都是为了解决多线程/多进程环境下,对共享资源的访问冲突问题。不过,像 Java 的或者 C++ 的mutex这种锁,都是进程内的锁,而分布式锁则是跨越进程/机器的锁。。考虑买票的场景,现在车站提供了若干个车次,每个车次的票数都是固定的。现在存在多个服务器节点,都可能需要处理这个买票的逻辑:先查询指定车次的余票,如果余票 > 0,则设置余票值 -= 1。上述场景如果任何处理,就会存在 “线程安全问题”。当多个客户端同时购买一个车次的票时,此时余票数量还未作出相应的更新。
2025-07-24 10:07:50
827
原创 Redis ①⑥-缓存
计算机存储的访问级别可以大致分为这几个级别(通过 CPU 访问):1。CPU 直接访问的存储单元,速度最快,但容量有限。2。L1、L2、L3 缓存,用于缓解内存和 CPU 的速度瓶颈。3。可以直接访问 CPU,用于缓解外存和 CPU 的速度瓶颈。4。磁盘、机械硬盘、固态硬盘。。。,用于存储大量数据。5。网络的访问是最慢的,通常为 20ms ~ 999+ms。上述的分级中,缓存描述的是 L1、L2、L3 这类高速缓存。
2025-07-14 11:33:31
951
1
原创 Redis ①⑤-集群
广义的集群就是多台服务器构成一个分布式系统,那么就可以称为一个集群。狭义的集群就是 Redis 集群,它是一种基于分布式存储的解决方案,它将数据分布到多个节点上,每个节点存储一部分数据,这样可以提高系统的容量。此处的关键,就是引入了多台机器,然后每台机器存储一部分数据。但是如何将这些以一个较为平均的方式分布这多台机器上,就是 Redis 集群要做的了。分片就是把数据分为多份,每份一片,一片就可以是一个集群。该方法借鉴了哈希表的方式,通过一个哈希函数将键转换为整数,然后将整数进行取模运算,得到的结果就是数组的
2025-07-06 17:40:22
965
原创 Redis ①④-哨兵
在主从复制模式中,如果主节点挂掉了,需要手动把读写请求切换到从节点,这就需要人工干预,费时费力,甚至可能会出错.Redis 哨兵(Sentinel)就是为了解决这一问题而产生的.sentinel 往往由多个节点,如果只设置一个的话,如果该节点挂掉了,整个服务就不可用了.(在分布式系统,要避免 “单点”,“冗余” 反而不是一件坏事)
2025-06-28 15:21:03
923
原创 Redis ①③-主从复制
单点问题就是某个提供服务的程序,只有一个进程在运行,或者只有一台服务器服务于其他客户端或者服务器。为了解决单点问题,可以部署多个服务实例,每个实例提供相同的服务,这些相同的服务就构成一个,它们一起工作,提供更高可用性和更强性能的服务。
2025-06-26 11:08:23
783
原创 Redis ①②-事务
Redis 的事务与 MySQL 的事务相比,是稍逊一筹的。。且 Redis 是否是真正的原子性还持有争议。如果原子性按照 MySQL 事务的原子性定义,那么 Redis 事务其实是没有原子性的。Redis 事务的原子性,就行将多个操作打包成一个整体,要么全部执行,要么全都不执行。。这和 MySQL 事务原子性是不同的,除了执行过程中出现错误的命令外,其他命令都能正常执行,并且,Redis 事务是不支持回滚(roll back)操作的。这与 MySQL 的略有不同。
2025-06-24 12:14:47
636
原创 Redis ①①-AOF
与 RDB 不同,AOF 持久化记录的是客户端所有的操作命令,并以文本的格式追加到一个日志文件中,且 AOF 是的,而 RDB 是定期记录的。这个操作有点类似于 MySQL 的 binlog。AOF 默认是关闭状态,需要通过配置文件开启。而则是日志文件的名称,默认是。开启 AOF 后,RDB 就不生效了,下次 Redis 重启后,会优先加载 AOF 文件。
2025-06-22 19:58:53
805
原创 Redis ⑩-持久化 || RDB
Redis 的数据是存储在内存里的,所以只要断电后,这些数据就都会丢失了。如果这些数据都比较重要,那么就会造成比较大的损失。依此,Redis 提供了持久化功能,可以将内存中的数据保存到磁盘里,防止数据丢失。在存储数据时,Redis 即会写入数据到内存,也会把数据写入到硬盘。但读取数据还只是从内存中读取,硬盘中的数据只是为了将数据恢复到内存。
2025-06-20 11:15:32
579
原创 Vue ⑧-Vue3 | 组合式API
需求:点击按钮,让数字 + 1vue2 的 选项式 API:vue3 的 组合式 API:代码量变少了分散式维护转为集中式维护,更易封装复用create-vue 是 Vue 官方新的脚手架工具,底层切换到了 vite(下一代构建工具),为开发提供极速响应。前提环境条件:已安装 16.0 或更高版本的 Node.js创建一个Vue应用:,这一指令将会安装并执行 关键文件: 语法糖在 > 标签中,使用 语法糖,可以省略掉 和 关键字,直接在 标签中书写代码。reactive()
2025-06-11 09:22:36
301
原创 Vue ⑦-Vuex
默认模块中的 mutation 和 actions 会被挂载到全局,需要开启命名空间,才会挂载到子模块。只有全局前置守卫放行,才会真正解析渲染组件,才能看到页面内容。(当项目变得越来越大的时候,Vuex会变得越来越难以维护)尽管已经分模块了,但其实子模块的状态,还是会挂到根级别的 state 中,属性名就是模块名。:明确 vuex 同样遵循单向数据流,组件中不能直接修改仓库的数据。,为 1-10 的数组,组件中,需要显示所有大于 5 的数据。是辅助函数,帮助我们把 store 中的数据。
2025-06-10 09:15:59
610
原创 Vue ⑥-路由
的两个高亮类名太长了,我们希望能定制怎么办?linkActiveClass: "类名1", // 模糊匹配linkExactActiveClass: "类名2" // 精确匹配})目标:基于 VueCli 自定义创建项目架子的三个属性include : 组件名数组,只有匹配的组件会被缓存exclude : 组件名数组,任何匹配的组件都不会被缓存max : 最多可以缓存多少组件实例</</</</目标:基于 VueCli 自定义创建项目架子。
2025-06-09 12:10:31
732
原创 Vue ③-生命周期 || 脚手架
思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来)一个Vue实例从 创建 到 销毁 的整个过程。① 创建 ② 挂载 ③ 更新 ④ 销毁。
2025-06-06 08:45:44
949
原创 Vue ②-computed || watch || 指令
通过指明一些指令,不同封装了不同的处理操作 → 简化代码v-model@事件名.stop</</constnewVueel'#app'datausername''methodsfneloglogthis'键盘回车的时候触发'</</</</</</</</constnewVueel'#app'datausername''age''methodsfatherFnalert'老父亲被点击了'sonFnealert'儿子被点击了'</
2025-06-05 12:18:23
1068
原创 RabbitMQ ⑥-集群 || Raft || 仲裁队列
确保这三台服务器处于同一个局域网内。,此步骤省略具体的主机IP和主机名可以通过iFconFig和命令查看。为了将集群中的三个节点连接起来,需要告诉另外两个节点加入另一个节点,比如 node1 和 node2 加入 node3。也可以在管理平台查看到如果发现某一个节点显示字样,说明该节点的 Web 管理插件未启用。
2025-05-23 12:42:37
1157
原创 RabbitMQ ⑤-顺序性保障 || 消息积压 || 幂等性
是计算机科学和网络通信中的一个重要概念,指的是某个操作无论被执行多少次,所产生的效果与执行一次的效果相同。在应用程序中,幂等性就是指对一个系统进行重复调用(相同的参数),不论请求多少次,这些请求对系统的影响都是相同的结果。比如数据库的select操作,不同时间两次查询的结果可能不同,但是这个操作是符合幂等性的,幂等性指的是对资源的影响,而不是返回结果。查询操作对数据资源本身不会产生影响,之所以结果不同,可能是因为两次查询之间有其他操作对资源进行了修改。比如i++
2025-05-20 16:10:57
961
原创 RabbitMQ ④-持久化 || 死信队列 || 延迟队列 || 事务
前面讲了消费端处理消息时,消息如何不丢失,但是如何保证RabbitMQ服务停掉以后,生产者发送的消息不丢失呢。默认情况下,RabbitMQ退出或者由于某种原因崩溃时,会忽视队列和消息。为了保证消息持久化,RabbitMQ 提供了持久化机制,分别是:交换机持久化、队列持久化和消息持久化。交换机持久化:使用方法创建的交换机,RabbitMQ 会将交换机信息持久化到磁盘,重启 RabbitMQ 后可以自动恢复。队列持久化:使用。
2025-05-16 15:26:33
1059
原创 RabbitMQ ②-工作模式
一个生产者,一个消费者,消息只能被消费一次,也被称为点对点(Point-to-Point)模式。可以把该模式理解有客户端和服务端间的通信,客户端发送请求,服务端处理请求并返回结果。服务器因为某种原因没有接收到确认消息,需要根据业务情况决定是否重新发送消息。存储多个消息时,就会分配给不同的消费者,每个消费者接收到不同的消息。向生产者发送确认消息,生产者接收到确认消息后才认为消息发送成功。里取出请求,处理请求后,将结果发送到。客户端发送请求时,指定。
2025-05-09 10:12:44
1087
原创 RabbitMQ ①-MQ | Linux安装RabbitMQ | 快速上手
MQ(Message Queue)即消息队列,是一种应用间通信的一种方式。消息队列是一种异步通信方式,生产者(Producer)将消息放入队列,消费者(Consumer)从队列中取出消息进行消费。
2025-05-06 21:53:43
1303
原创 Redis ⑨-Jedis | Spring Redis
通过 Jedis 可以连接 Redis 服务器。通过 Maven 引入 Jedis 依赖。</</</</连接 Redis 服务器。这里设置了 ssh 端口转发,将本地的 8888 端口转发到远程的 6379 端口。
2025-05-03 11:30:51
613
原创 Redis ⑧-RESP | 渐进式遍历 | 数据库管理
除了之前学习的stringhashlistsetZset五种数据结构之外,Redis 还提供了bitmapbitfieldgeospatialstream等数据结构。另外的一些数据结构,都是在某些特定环境下才会使用,使用频率不高,不如前面介绍的stringhashlistsetZset。
2025-05-01 10:02:21
1439
原创 Redis ⑦-set | Zset
Zset为有序集合,该集合为有序集合,可以存储多个不同的数据类型,包括字符串、整数、浮点数等。与setZset中的元素是按照顺序存放的,其通过存储 二元组,随即按照 score 对元素进行升序排序(默认为升序如果出现相同的score,则按照member的字典序进行排序。Zset中的 member 必须是唯一的,不可重复,但是 score 可以重复。
2025-04-28 14:26:31
1001
原创 Redis ⑥-string | hash | list
Redis 自身就是一个 hash类型,通过存储键值对,以达到 O(1) 的时间复杂度的快速访问。这里的 hash类型,是 Redis 中 key-value 中的 value 的类型。也就是 value 是一个 hash 类型,可以存储键值对结构。list 类型相当于 数组 或者 链表。但其内部的编码方式并不是一个数组,其更接近于“双端队列” (Deque)。列表中元素是有序的,该有序并不是 “升序” 或者 “降序”,而是元素在列表中的位置的先后顺序。列表中的元素是可以重复的。
2025-04-25 16:08:20
1222
原创 Redis ④-通用命令
由于 Redis 客户端 和 Redis 服务器之间是通过网络通信的,每发起一次查询都会构造一个请求,多次查询会导致效率比较低。返回值为 key 存在的个数,如果 key 不存在,则返回 0。返回值是毫秒数,-1 表示没有设置过期时间,-2 表示键不存在。返回值是秒数,-1 表示没有设置过期时间,-2 表示键不存在。,不需要加上引号,加上单引号和双引号也不会报错,但是不推荐。是 Redis 最基本的命令,用于获取和设置键值对。命令用于获取键的剩余过期时间,单位是毫秒。命令用于设置键的过期时间,单位是毫秒。
2025-04-20 16:06:35
671
原创 Redis ③-Linux下载Redis
由于 Redis 的官方是不支持 Windows 版本的,尽管 Windows 自己维护了一个 Redis 的分支。所以,我们在 Linux 上安装 Redis 会方便很多。
2025-04-18 11:17:56
411
原创 Redis ②-Redis概述
上述为 Redis 官网对 Redis 的描述。Redis 是一个开源的,在内存中通过键值对的方式存储数据的数据库。与 MySQL 不同的是,Redis 将数据存储在了内存中,因此访问速度非常快。其还可以作为缓存,与 MySQL 等数据库搭配使用,用于缓存那些数据量访问大的数据,提高访问速度。还可以作为消息队列,Redis 的初心,就是用来作为消息队列的。Redis 只有在分布式系统中,才能发挥其最大的作用,如果是传统的单机系统,使用 Redis 反而会使系统的性能下降。
2025-04-17 10:12:52
402
原创 Redis ①-分布式和微服务
只部署在一台服务器上的架构,包含应用和数据库等服务随着用户和数据量的增长,单机架构的性能瓶颈也越来越明显优点是简单,部署方便,成本低廉,适合小型应用缺点是扩展性差,无法满足高并发访问,无法应对大流量的访问解决办法通常有两个:开源节流。
2025-04-15 19:35:56
545
原创 SQL ⑦-索引
索引是一种特殊的数据结构,它帮助数据库系统高效地找到数据。索引通过一定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。索引好比书籍的目录,能帮助你快速找到相应的章节。
2025-04-12 18:24:28
1048
原创 SQl ⑥-视图
视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视图本身不存储数据,而是通过执行查询来动态生成数据。用户可以像操作普通表一样使用视图进行查询、更新、删除等操作。视图本身并不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。
2025-04-11 09:45:00
333
原创 SQL ④-表设计
userorderproductorder_item表名应当能够反映表的主要功能。表名应当简短,易于记忆。表名应当具有描述性。
2025-04-09 09:00:00
285
原创 SQL ②-库操作 | 数据类型
允许定义 CHAR(0),此时列的值只能为 NULL 或 空字符串,主要的目的是为了旧系统兼容,比如类中必须有这个属性,但不使用这个属性的值,也就是说值并没有意义,但列又不能没有。N 表示以字符为单位的最大列长度,取值范围 0 ~ 65,535 (在所有列中共享),有效长度取决于实际字符数和使用的字符集,并且用额外的⼀或两个字节记录实际使用的字节数,当实际字节数不超过255个字节用⼀个字节记录长度,超过255个字节时,使⽤两个字节记录⻓度,获取列的值时不会从尾部删除空格,插入数据时会删除超出长度的空格。
2025-04-06 12:31:43
701
原创 SQL ①-数据库 || MySQL
就是一个经典的关系型数据库,由于 MySQL 是开源免费并且比较成熟的数据库,因此,MySQL 被大量使用在各种系统中。几乎所有的主流关系数据库都支持 SQL ,适用性非常强。,可以修改成其他的端口号,修改的范围在 1025 - 65535,如果真要修改的话,记得先备份一下,以防修改错了导致服务启动失败。(小型数据库,常用于手机APP,处理简单的数据存储,微信本地的聊天记录的存储就是用的 SQLite),我们的数据都被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)。
2025-02-22 15:05:42
1094
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人