自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis 典型应⽤-分布式锁

在⼀个分布式的系统中,也会涉及到多个节点访问同⼀个公共资源的情况.此时就需要通过锁来做互斥控制,避免出现类似于"线程安全"的问题.⽽java的synchronized或者C++的std::mutex,这样的锁都是只能在当前进程中⽣效,在分布式的这 种多个进程多个主机的场景下就⽆能为⼒了.此时就需要使⽤到分布式锁本质上就是使⽤⼀个公共的服务器,来记录加锁状态.这个公共的服务器可以是Redis,也可以是其他组件(⽐如MySQL或者ZooKeeper等),还可以 是我们⾃⼰写的⼀个服务.

2024-11-11 08:00:00 684

原创 Redis 典型应用 - 缓存(cache)

短时间内⼤量的key在缓存上失效,导致数据库压⼒骤增,甚⾄直接宕机.本来Redis是MySQL的⼀个护盾,帮MySQL抵挡了很多外部的压⼒.⼀旦护盾突然失效了,MySQL ⾃⾝承担的压⼒骤增,就可能直接崩溃.此处把breakdown翻译成"击穿",个⼈以为并⾮是⼀个好的选择.容易和缓存穿透混淆. 翻译成"瘫痪"或者"崩溃"也许更合适⼀些.breakdownn.(汽⻋或机器的)故障,损坏;(关系的)破裂,(系统的)瘫痪;精神崩 溃,(健康、体⼒等的)衰竭;细⽬,分类;分解;跺脚曳步舞。

2024-11-10 08:00:00 532

原创 Redis - 集群(Cluster)

上述的哨兵模式,提⾼了系统的可⽤性.但是真正⽤来存储数据的还是master和slave节点.所有的数 据都需要存储在单个master和slave节点中.如果数据量很⼤,接近超出了master/slave所在机器的物理内存,就可能出现严重问题了.如何获取更⼤的空间?加机器即可!所谓"⼤数据"的核⼼,其实就是⼀台机器搞不定了,⽤多台机器来 搞.Redis 的集群就是在上述的思路之下,引⼊多组Master/Slave,每⼀组Master/Slave存储数据全集的 ⼀部分,从⽽构成⼀个更⼤的整体,称为Redis集群

2024-11-09 08:00:00 855

原创 Redis - 哨兵(Sentinel)

Redis Sentinel 相⽐于主从复制模式是多了若⼲(建议保持奇数)Sentinel节点⽤于实现监控数据节 点,哨兵节点会定期监控所有节点(包含数据节点和其他哨兵节点)。针对主节点故障的情况,故障 转移流程⼤致如下:1)主节点故障,从节点同步连接中断,主从复制停⽌。2)哨兵节点通过定期监控发现主节点出现故障。哨兵节点与其他哨兵节点进⾏协商,达成多数认 同主 节点故障的共识。

2024-11-08 21:00:00 1245

原创 Redis - 主从复制

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢 复和负载均衡等需求。Redis也是如此,它为我们提供了复制的功能,实现了相同数据的多个Redis副 本。复制功能是⾼可⽤Redis的基础,哨兵和集群都是在复制的基础上构建的。

2024-11-08 20:00:00 911

原创 Redis - 事务

Redis 的事务和MySQL的事务概念上是类似的.都是把⼀系列操作绑定成⼀组.让这⼀组能够批量执 ⾏.弱化的原⼦性:redis没有"回滚机制".只能做到这些操作"批量执⾏".不能做到"⼀个失败就恢复到 初始状态".不保证⼀致性:不涉及"约束". 也没有回滚.MySQL的⼀致性体现的是运⾏事务前和运⾏后,结果都 是合理有效的,不会出现中间⾮法状态.不需要隔离性:也没有隔离级别,因为不会并发执⾏事务(redis单线程处理请求).

2024-11-08 18:30:00 869

原创 Redis - 持久化

Redis ⽀持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。

2024-11-08 17:00:00 931

原创 Redis - 数据库管理

Redis 提供了⼏个⾯向Redis数据库的操作,分别是dbsize、select、flushdb、flushall命令, 本机将通过具体的使⽤常⻅介绍这些命令。

2024-11-07 21:45:00 427

原创 Redis - 渐进式遍历

Redis 使⽤scan命令进⾏渐进式遍历键,进⽽解决直接使⽤keys获取键时可能出现的阻塞问 题。每次scan命令的时间复杂度是O(1),但是要完整地完成所有键的遍历,需要执⾏多次scan。整 个过程如图2-29所⽰。

2024-11-07 19:00:00 416

原创 Redis - Zset 有序集合

有序集合相对于字符串、列表、哈希、集合来说会有⼀些陌⽣。它保留了集合不能有重复成员的 特点,但与集合不同的是,有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数(score)与之关 联,着使得有序集合中的元素是可以维护有序性的,但这个有序不是⽤下标作为排序依据⽽是⽤这个分数。有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利⽤有序集合,可 以帮助我们在实际开发中解决很多问题。

2024-11-07 18:45:00 1539

原创 Redis - Set 集合

有了这些数据就可以得到喜欢同⼀个标签 的⼈,以及⽤⼾的共同喜好的标签,这些数据对于增强⽤⼾体验和⽤⼾黏度都⾮常有帮助。集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中1)元素之间是⽆序 的2)元素不允许重复,如图2-24所⽰。注意,由于set内的元素是⽆序的,所以取出哪个元素实际是 未定义⾏为,即可以看作随机的。获取⼀个set的基数(cardinality),即set中的元素个数。获取⼀个set中的所有元素,注意,元素间的顺序是⽆序的。获取给定set的并集中的元素并保存到⽬标set中。

2024-11-07 17:00:00 2108

原创 Redis - List 列表

列表类型是⽤来存储多个有序的字符串,如图2-19所⽰,a、b、c、d、e五个元素从左到右组成 了⼀个有序的列表,列表中的每个字符串称为元素(element),⼀个列表最多可以存储 2^32 − 1 个元 素。在Redis中,可以对列表两端插⼊(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等(如图2-19和图2-20所⽰)。列表是⼀种⽐较灵活的数据结构,它可以 充当栈和队列的⻆⾊,在实际开发上有很多应⽤场景。

2024-11-07 08:00:00 853

原创 Redis - Hash 哈希

⼏乎所有的主流编程语⾔都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数 组、映射。在Redis中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如key="key",value={{ field1, value1 }, ..., {fieldN, valueN } },Redis 键值对和哈希类型⼆者的关系可以⽤图2-15来表⽰。

2024-11-06 21:00:00 1089

原创 Redis - String 字符串

如图2-12所⽰,⼀个分布式Web服务将⽤⼾的Session信息(例如⽤⼾登录信息)保存在各⾃ 的服务器中,但这样会造成⼀个问题:出于负载均衡的考虑,分布式服务会将⽤⼾的访问请求均衡到 不同的服务器上,并且通常⽆法保证⽤⼾每次请求都会被均衡到同⼀台服务器上,这样当⽤⼾刷新⼀ 次访问是可能会发现需要重新登录,这个问题是⽤⼾⽆法容忍的。学会使⽤批量操作,可以有效提⾼业务处理效率,但是要注意,每次批量操作所发送的键的数量也不 是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞。

2024-11-06 15:09:03 967

原创 Redis-数据结构和内部编码

type 命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、list(列 表)、hash(哈希)、set(集合)、zset(有序集合),但这些只是Redis对外的数据结构。实际上Redis针对每种数据结构都有⾃⼰的底层内部编码实现,⽽且是多种实现,这样Redis会 在合适的场景选择合适的内部编码,如表2-1所⽰。可以看到每种数据结构都有⾄少两种以上的内部编码实现,例如list数据结构包含了linkedlist和 ziplist 两种内部编码。

2024-11-04 21:00:00 689

原创 Redis-基本全局命令

Redis 有5种数据结构,但它们都是键值对种的值,对于键来说有⼀些通⽤的命令。返回所有满⾜样式(pattern)的key。⽀持如下统配样式。命令有效版本:1.0.0之后时间复杂度:O(N)返回值:匹配pattern的所有key。

2024-11-04 20:00:00 411

原创 Redis-基本了解

Redis 是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis 中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、 Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis 可以满⾜很多的应⽤场景,⽽且因为Redis会将所有数据都存放再内存中,所以它的读写性能⾮常惊 ⼈。

2024-11-04 07:00:00 1089

原创 Centos 安装 Redis

默认情况下,Redis只绑定在127.0.0.1接⼝上,即只允许从127.0.0.1(localhost)上进⾏连接 Redis 服务,但在随后的代码篇,我们需要在Windows上连接云服务器的Redis进⾏⼀系列的操作, 所以需要配置允许Redis接受远程访问,修改Redis的配置⽂件:/etc/redis.conf。默认安装的⽬录为/opt/rh/rh-redis5/root/usr/bin/,藏的太深了,不⽅便使⽤.通过符号链接,把需 要⽤到的关键内容设置到⽅便使⽤的⽬录中.

2024-11-03 21:00:00 294

原创 Ubuntu 安装 redis

修改 /etc/redis/redis.conf。

2024-11-03 21:00:00 292

原创 Linux-自旋锁

自旋锁是一种多线程同步机制,用于保护共享资源免受并发访问的影响。在多个线程 尝试获取锁时,它们会持续自旋(即在一个循环中不断检查锁是否可用)而不是立即 进入休眠状态等待锁的释放。这种机制减少了线程切换的开销,适用于短时间内锁的 竞争情况。但是不合理的使用,可能会造成 CPU 的浪费。

2024-10-20 08:45:00 642

原创 读者写者问题与读写锁

读者写者 vs 生产消费读者写者问题如何理解下面是一段伪代码:公共部分ReaderWriter在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会 比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴 随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低程序的效 率。那么有没有一种方法,可以专门处理这种多读少写的情况呢?有,那就是读写锁阻塞设置读写优先初始化销毁加锁和解锁读写锁案例:Makefile部分

2024-10-20 08:30:00 396

原创 手动部署并测试内网穿透

nginx 首页默认 apt 安装之后,首页是:/var/www/html/XXX(index.nginx-debian.html)frp 下载:https://github.com/fatedier/frp/releases/tag/v0.58.1。github 提速工具,Watt Toolkit 官网:https://steampp.net/服务器和客户端都可以这样在后台启动。

2024-10-20 08:15:00 316

原创 DNS 与 ICMP

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。C域名使用 . 连接com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等。baidu: 二级域名, 公司名。www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于 ftp.xxx.xxx/www.xxx.xxx 这样的格 式, 来表示主机支持的协议。

2024-10-20 08:00:00 787

原创 TCP 全连接队列与 tcpdump 抓包

可以看到客户端发送一个长度为 1 字节的数据, 此时服务器返回了一个 ACK 以及一个 9 个字节的响应(捎带应答), 然后客户端再反馈一个 ACK(注意观察 序列号和确认序号)注意:-i any 指定捕获所有网络接口上的数据包,tcp 指定捕获 TCP 协议的数据 包。如果使用虚拟机部署服务器, 建议使用 "桥接网卡" 的方式连接网络. NAT 方式下由于进 行了 ip 和 port 的替换。全连接队列满了的时候, 就无法继续让当前连接的状态进入 established 状态了。

2024-10-19 23:45:00 1692

原创 HTTP cookie 与 session

HTTP Cookie(也称为 Web Cookie、浏览器 Cookie 或简称 Cookie)是服务器发送到 用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发 起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一 浏览器,如保持用户的登录状态、记录用户偏好等。HTTP Session 是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于 HTTP 协议是无状态的(每个请求都是独立的),因此服务器需要通过 Session 来记住用户 的信息。

2024-10-19 23:00:00 711

原创 进程间关系与守护进程

刚刚谈到了进程组的概念, 那么会话又是什么呢?会话其实和进程组息息相关,会话可以看成是一个或多个进程组的集合, 一个会话可以包含多个进程组。每一个会 话也有一个会话 ID(SID)通常都是使用管道将几个进程编成一个进程组。Shell# &表示将进程组放在后台执行Shell# 用管道和 sleep 组成一个进程组放在后台运行# 查看 ps 命令打出来的列描述信息# 过滤 sleep 相关的进程信息# a 选项表示不仅列当前⽤户的进程,也列出所有其他⽤户的进程。

2024-10-19 21:00:00 1365

原创 connect 的断线重连设计

客户端会面临服务器崩溃的情况,我们可以试着写一个客户端重连的代码,模拟并理 解一些客户端行为,比如游戏客户端等。

2024-10-19 19:30:00 301

原创 windows 作为 client 访问 Linux 服务器

【代码】windows 作为 client 访问 Linux 服务器。

2024-10-19 19:00:00 107

原创 Linux-网络命令

netstat 是一个用来查看网络状态的重要工具。在查看服务器的进程 id 时非常方便。通过进程名, 查看进程 id。netstat【选项】pidof [进程名]

2024-10-19 18:45:00 327

原创 ProtoBuf 的使用 - C++

消息(message): 要定义的结构化对象,可以给这个结构化对象中定义其对应的属性内容。这⾥再提⼀下为什么要定义消息?在⽹络传输中,我们需要为传输双⽅定制协议。定制协议说⽩了就是定义结构体或者结构化数据, ⽐如,tcp,udp 报⽂就是结构化的。再⽐如将数据持久化存储到数据库时,会将⼀系列元数据统⼀⽤对象组织起来,再进⾏存储。所以 ProtoBuf 就是以 message 的⽅式来⽀持定制协议字段,后期帮助形成类和⽅法来使⽤。在通讯录 1.0 中就需要为 联系⼈定义⼀个 message。

2024-10-12 08:00:00 723

原创 ProtoBuf 安装

可以不⽤下载最新版本,具体的下载根据电脑情况选择。下载之后将压缩包解压到本地⽬录下。解压后的⽂件内包含 bin、include⽂件,以及⼀个 readme.txt。

2024-10-11 08:00:00 1594

原创 Git 原理与使用

测试系统的完善和成熟也是衡量⼀个软件企业整体⽔平的重 要指标之⼀,测试往往被忽视,因为它对可以的隐性、对软件开发企业不产⽣直接的效益,但是它却 是软件质量的最终保障,乃⾄项⽬能否成功的重要因素!可以简单理解为,每个⼈的电脑上都是⼀个完整的版本库,这样⼯作的时候,就不需要联⽹了,因为版本库就在⾃⼰的电脑上。⽆法保证对于冲突问题可以正确地⼀次性解决掉,因为在实际的项⽬中,代码冲突不只⼀两⾏那么简单, 有可能⼏⼗上百⾏,甚⾄更多,解决的过程中难免⼿误出错,导致错误的代码被合并到 master 上。

2024-10-10 08:00:00 1136

原创 MySQL - 基础三

事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一 个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的;事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。

2024-04-05 14:34:03 1213

原创 MySQL - 基础二

CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)语法:案例:由于 主键 或者 唯一键 对应的值已经存在而导致插入失败可以选择性的进行同步更新操作语法:语法:案例:语法:比较运算符:逻辑运算符:案例:语法:注意:没有 ORDER BY 子句的查询,返回的顺序

2024-04-04 16:36:00 1352

原创 MySQL - 基础一

mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径示例:将mytest库备份到文件(退出连接)这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中;

2024-04-03 17:36:55 731

原创 高级 IO

阻塞IO是最常见的IO模型;非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这个过程称为轮询. 这对CPU来说是较大的浪费, 一 般只有特定场景下才使用;小结。

2024-03-25 20:40:45 789 1

原创 网络基础(三)

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称;域名使用 . 连接com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等;baidu: 二级域名, 公司名;www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格 式, 来表示主机支持的协议;数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据;以太网是一种技术标准;

2024-03-25 18:32:12 1116

原创 网络基础(二)

程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层;

2024-03-21 23:44:22 724

原创 网络编程 - 套接字

在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址;思考: 我们光有IP地址就可以完成通信了嘛?想象一下发qq消息的例子, 有了IP地址能够把消息发送到对方的机器上, 但是还需要有一个其他的标识来区分出, 这个数据要给哪个程序进行解析;

2024-03-18 20:36:21 1099

原创 网络基础(一)初识

1. 独立模式: 计算机之间相互独立;2. 网络互联: 多台计算机连接在一起,完成数据共享;3. 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;4. 广域网WAN: 将远隔千里的计算机都连在一起;所谓 "局域网" 和 "广域网" 只是一个相对的概念;比如,覆盖我国的广域网, 也可以看做一个比较大的局域网;

2024-03-18 15:25:15 1060

空空如也

空空如也

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

TA关注的人

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