自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

可乐不解渴

与其互为人间,不如自成宇宙。

  • 博客(72)
  • 收藏
  • 关注

原创 Docker基础-cgroup

cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一 系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。简单说, cgroups 可以限制、记录任务组所使用的物理资源。本质上来说, cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。

2023-09-13 09:35:23 815

原创 Docker基础-namespace

Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前namespace 里的进程,对其他 namespace 中的进程没有影响。出错是因为如果不建新进程,新的 namespace 会用执行 unshare 命令的进程 的 PID 作为新的空间的父进程,而这个 unshare 进程并不在新的 namespace 中,所以会报个错 Cannot allocate memory。

2023-09-12 00:33:12 325

原创 GIT使用

在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件名填进去,Git 就会⾃动忽略这些⽂件了。这个版本库⾥⾯的所有⽂件都可以被 Git 管理起来,每个⽂件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。注意 git commit 后⾯的 -m 选项,要跟上描述本次提交的 message,由⽤⼾⾃⼰完成,这部分内容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们⼈看的。这样的好处是,从分⽀历史上就可以看出分⽀信息。

2023-09-11 09:15:47 335

原创 14.Redis 主从复制

单点问题.单个 redis 节点, 可⽤性不⾼。单个 redis 节点, 性能有限。主从复制的特点:Redis 通过复制功能实现主节点的多个副本。主节点⽤来写, 从节点⽤来读. 这样做可以降低主节点的访问压⼒。复制⽀持多种拓扑结构,可以在适当的场景选择合适的拓扑结构。复制分为全量复制, 部分复制和实时复制。主从节点之间通过⼼跳机制保证主从节点通信正常和数据⼀致性。主从复制配置的过程:主节点配置不需要改动。

2023-09-05 14:13:31 591

原创 13.Redis 事务

假设此时有一个 key,value 为 111,此时有两个客户端,客户端1先开启一个事务,并将key的value设置为222,此时客户端2不开启事务直接set key 333,此时客户端1执行exec命令,让其执行事务,此时就容易引起歧义,是到底key的值是222还是333呢。开启事务的时候,此时客户端输入的命令,就会发给服务器并且进入这个队列中(而不是立即执行)。都是把⼀系列操作绑定成⼀组。作用:在执⾏事务的时候, 如果某个事务中修改的值, 被别的客户端修改了, 此时就容易出现数据不⼀致的问题。

2023-09-04 03:01:35 495

原创 12.redis 持久化

Redis 提供了两种持久化⽅案:RDB 和 AOF。RDB 视为内存的快照,产⽣的内容更为紧凑,占用空间较⼩,恢复时速度更快。但产⽣ RDB 的开销较⼤,不适合进⾏实时持久化,⼀般⽤于冷备和主从复制。AOF 视为对修改命令保存,在恢复时需要重放命令。并且有重写机制来定期压缩 AOF ⽂件。RDB 和 AOF 都使⽤ fork 创建⼦进程,利⽤ Linux ⼦进程拥有⽗进程内存快照的特点进⾏持久化,尽可能不影响主进程继续处理后续命令。

2023-09-03 21:17:39 395

原创 访问 GitHub 方法

访问 GitHub 方法

2023-09-02 14:39:31 5289

原创 11.Redis数据库管理命令

redis 中的 database 是现成的,咱们用户不能创建新的数据库,也不能删除已有的数据库~它们之间的区别在于 flushdb 只清除当前数据库,flushall 会清楚所有数据库。默认 redis 给我们提供了 16 个数据库,名字为 数字0 到数字15。flushdb / flushall 命令⽤于清除数据库。这16个数据库中的数据是隔离的。默认我们是在0号数据中。作用:获取当前数据库中key的数量。作用:用来切换数据库。

2023-09-01 17:55:41 299

原创 10.Redis 渐进式遍历

渐进性遍历 scan 虽然解决了阻塞的问题,但如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复遍历或者遗漏,这点务必在实际开发中考虑。不是一个命令,把所有的 key 都拿到,而是每执行一次命令,只获取到其中的一部分,这样的话就能保证当前这一次操作不会太卡。keys 命令一次性的把整个redis中所有的key都获取到,keys *但这个操作比较危险,可能会一下子得到太多的key,阻塞 redis 服务器。通过渐进式遍历,就可以做到,既可以获取到所有的 key,同时又不会卡死服务器。

2023-09-01 17:52:42 1187

原创 9.Redis-zset

这里的zhangsan的score(65),是按照 key里的zhangsan先乘以自己的权重值 2, 加上 key2 对应的权重值3乘以key2 zhangsan的score,即 2 * 10+ 3 * 15 = 65。作用:返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。作用:用于按照元素的分数范围来获取元素,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。作用:返回指定元素的排名,降序,这里的排名指的就是下标。

2023-09-01 02:35:16 653

原创 8.Redis-set

命令时间复杂度O(k),k是元素个数O(k),k是元素个数scard keyO(1)O(1)O(n),n 是 countO(n),n 是 countO(k), k 是元素个数O(m * k)O(k),k 是多个集合的元素个数总和O(k),k 是多个集合的元素个数总和。

2023-08-31 16:07:02 726

原创 7.Redis-list

ps:本来是想弄成表格的,但是不会 markdown 这种将某几行的某一列合并成一个单元格这种语法,然后只能以图片的方式展现了,希望有会的人再评论区教教我,thanks~

2023-08-30 18:33:56 444

原创 6.Redis-hash

哈希类型中的映射关系通常称为field-value,⽤于区分 Redis 整体的键值对(key-value),注意这⾥的value是指field对应的值,不是键(key)对应的值,请注意 value 在不同上下⽂的作⽤。

2023-08-29 15:34:09 411

原创 5.Redis-string

字符串类型是 Redis 最基础的数据类型,关于字符串需要特别注意:1.⾸先Redis中所有 key 的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如 list 和 set 的元素类型是字符串类型。2.其次,字符串类型包含⼀般格式的字符串或者类似JSON、XML格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图片、音频、视频等。不过⼀个字符串的最大值不能超过512MB,一般不建议存储较大的图片、音频、视频等。

2023-08-29 01:30:32 514 1

原创 4.Redis数据类型的编码方式

redis 承诺,现在当前有一个 hash 表,你可以进行 查询,插入,删除操作都保证时间复杂度为O(1),但是这个背后的实现不一定就是一格标准的hash表,可能在特定场景下,使用别的数据结构实现,但是仍然保证时间复杂度符合要求。type 命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合),但这些只是 Redis 对外的数据结构。其中内部的具体实现的数据结构(编码方式不同)还有变数。

2023-08-26 23:25:26 163

原创 3.Redis 单线程模型

redis 只使用一个线程来处理所有的命令请求,并不是说一个 redis 服务器进程内部真的就只有一个线程,其实也有多个线程,多个线程是再处理网络 IO。那么在多线程中,针对类似于这样的场景两个线程尝试同时对一个 变量 进行自增表面上看是自增两次,实际上可能只只增了一次。幸运的是,并不会发生这种问题,redis 服务器实际上是单线程模型,保证了当前收到的这多个请求是串行执行的!此时当前这个两个redis客户端,也相当于“并发”的发起了上述的请求。此时就意味着是否服务器这边也会存在类似的线程安全问题吗?

2023-08-26 17:05:43 924

原创 2.Redis 通用命令

首先把时间划分程很多小段,假设每个单元格是100ms的间隔,当有新任务进来时,先找到要存储的单元格位置并存入,如果发现设置的时间超出对应时间轮一轮的范围只需要多旋转几轮直到找到即可,并且当每过100ms时,此时就需要检查当前格子上的每一个任务,并尝试看是否能执行当前任务。另外再扫描线程检查队首元素过期时间的时候不能太频繁,此时做法就是可以根据当前时刻和队首元素的过期时间,让扫描线程进行等待,当时间到了,系统在去唤醒这个线程,此时扫描线程不需要高频扫描队首元素,把cpu的开销可以降低下来。

2023-08-26 15:42:37 583

原创 1.Redis 5 环境搭建

隐藏的太深了,不方便使用,可以通过软连接的方式把需要用到的关键内容设置到重用的目录中。在根据pid进行kill即可,因为此时redis被我们设置成了守护进程在配置文件中。可以通过ps或者netstat查询redis服务器的pid。进入刚刚链接好的目录下,用root用户使用vim打开。为了我们能在 Centos7中下载到 Redis5。由于在centos7默认安装的目录为。5.2 再在配置文件中,设置日志目录。之后弹出来的选项一直输入y即可。文件,然后要设置以下参数。首先要安装额外的软件源。

2023-08-21 15:17:14 331

原创 特殊类设计

特殊类

2022-03-31 20:12:43 734

原创 位图介绍与实现

位图

2022-03-30 14:18:54 943

原创 unordered_map、unordered_set模拟实现

unordered_map、unordered_set模拟实现

2022-02-17 13:31:38 480

原创 hash哈希

hash哈希哈希概念哈希冲突哈希函数哈希冲突解决闭散列开散列哈希表的闭散列实现哈希表闭散列结构哈希表的闭散列插入哈希表的闭散列查找哈希表的闭散列删除哈希表的开散列实现哈希表的开散列结构哈希表的开散列插入哈希表的开散列查找哈希表的开散列删除人间四月芳菲尽,山寺桃花始盛开。哈希概念顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数,因此顺序结构中查找的时间复杂度为O (N) ,AVL树与红黑树中查找的时

2022-02-16 10:09:12 522

原创 C++map与set模拟实现

C++map与set模拟实现

2022-01-20 00:01:32 935 3

原创 红黑树介绍与实现

2022-01-15 02:23:13 515 1

原创 AVL树介绍与实现

AVL树

2021-12-06 00:16:49 1448 2

原创 linux进程信号

linux进程信号

2021-11-30 11:08:58 1450 2

原创 C++map与set的介绍与使用

这里写自定义目录标题

2021-11-20 20:10:30 805

原创 linux进程间通信

这里写自定义目录标题

2021-11-09 13:28:29 643 1

原创 linux动静态库

这里写自定义目录标题

2021-11-02 15:43:12 379

原创 linux基础IO

这里写自定义目录标题

2021-10-31 21:17:16 307 1

原创 C++三大特性---多态

这里写自定义目录标题

2021-10-25 23:16:12 239

原创 linux进程控制

这里写自定义目录标题

2021-10-03 18:26:00 176 1

原创 C++三大特性---继承

这里写自定义目录标题

2021-10-01 14:01:19 217 1

原创 linux进程概念

这里写自定义目录标题

2021-09-26 07:50:03 561

原创 二叉搜索树介绍与实现

二叉搜索树

2021-09-16 17:41:02 308

原创 模式匹配----KMP算法

文章目录

2021-08-31 12:24:36 209 2

原创 C++priority_queue模拟实现

priority_queue模拟实现

2021-08-28 18:29:36 226 1

原创 C++stack与queue模拟实现

愿煦风和日永远卫护着可爱的你。stack与queue模拟实现stackqueue在stl中,stack(栈)与queue(队列)都是容器适配器。什么是容器适配器呢?适配器(adaptor)是标准库中通用的概念,包括容器适配器、迭代器适配器和函数适配器。本质上,适配器是使一事物的行为类似于另一事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。简单来说其实就是利用现有的容器来适配出来的新容器。stack在标准库中,stack默认使用的是deque容器来进

2021-08-28 10:02:57 210 1

原创 模式匹配----BF算法

每一个不曾起舞的日子,都是对生命的辜负。前言给定两个字符串S=“s1、s2、…、sn”和T=“t1、t2、…、tm”。在主串中S寻找子串T的过程称为模式匹配(pattern matching),T称为模式(pattern)。如果匹配成功,返回T在S中的位置;如果匹配失败,返回0。模式匹配常用于文本处理、杀毒软件、操作系统、数据库系统以及搜索引擎(比如:百度),模式匹配是使用很频繁的操作。BF概念BF算法的基本思想就是暴力求解,即从主串S的第一个字符开始和模式串T的第一个字符进行比较。如果相等,则

2021-08-24 20:06:53 825 2

原创 队列的介绍和实现(C语言实现)

这里写自定义目录标题

2021-08-23 13:11:09 140

空空如也

空空如也

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

TA关注的人

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