自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

快乐划水程序猿的专栏

记录技术的成长

  • 博客(301)
  • 资源 (8)
  • 收藏
  • 关注

原创 redis哨兵系列1

redis哨兵知识

2022-11-18 22:44:32 1404 1

原创 《go程序语言设计》引言

go学习笔记

2022-11-18 22:42:06 569

原创 redis集群系列四

redis集群运维tips

2022-06-30 23:52:21 351

原创 redis集群系列三

redis集群的故障转移及恢复

2022-06-26 21:57:15 479

原创 redis集群系列二

redis集群

2022-06-26 21:56:02 3788

原创 redis集群系列一

redis集群redis集群模式是分布式存储的一个case。数据分布分布式数据库要解决将一堆数据按照分区规则映射到不同节点上。常见的分区规则有哈希分区和顺序分区。分区方式特点产品哈希分区离散度好;数据分布与业务无关redis cluster、cassandra顺序分区离散度容易倾斜;数据分布与业务有关;可以顺序访问HBase、Hypertable哈希分区redis集群使用的是哈希分区,常见的哈希分区有以下几种:节点取余hash(key)/N, 但是

2022-05-14 19:04:10 1568

原创 LRU go实现

思路用列表实现,有head和tail为什么需要tail?为什么node节点需要key?当get值的时候,用map查找找不到返回-1能找到将node调整到表头当put值的时候如果key已经存在则需要更新val,同时将node调整到表头如果key不存在则新建node,将其调整到表头代码package mainimport "fmt"type LRUCache struct { cap int num int head *LRUMem

2022-05-05 20:36:22 354

原创 operator-sdk升级

operator sdk v0.x和v1.x的区别operator sdk和kubebuilder整合后(以kubebuilder为主),operator sdk发布了v1.x版本,operator sdk的项目layout、scaffold、dependency、 usage、code等发生了变化底层相似:under the hood using controller-runtime、controller-tools to adding a manager, api scheme and creat

2022-04-24 23:14:42 331

原创 redis内存篇

Redis归属随着计算硬件的价格越来越便宜,人们对性能的要求越来越高,很多用户会根据自己的业务场景选择读写速度很快的内存数据库,呀比如大名鼎鼎的redis数据库,其属于kv型的NOSQL数据库。这里小编可以简单介绍下数据库。数据库可以简单分为关系型数据库和非关系型数据库。关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织,常见的Oracle、Mysql、PostgreSQL、MariaDB、SQLite、SQL Server等,读写速度依赖于磁盘I/O。非关系型数据库严格上

2022-04-24 22:06:30 753

原创 redis命令系列一

redis常用命令

2022-01-24 00:03:05 1055

原创 《分析模式》第0-2章 责任

时隔多年终于更新,学习总结分享知识总是快乐的❤0.0 译者序作者Matrin Fowler 软件设计大师,曾在thoughtworks(全球性软件及咨询公司)任职过设计模式真实问题映射为分析模型,分析模型映射为设计模型,再映射为代码,编译构建,形成系统练习方式用熟悉的语言抠一遍例子模型图画成UML图,实现完整的模块图有点意思的类比分析模型分为模型的建立(type)和模型的实现(class)1.1 概念模型理解和简化问题的模型针对问题设置概念模型提供功能和开发维护成本之前

2021-08-17 09:17:38 251 1

原创 故宫学系列之紫禁城:从皇宫到博物院

来自大学《故宫学》,课堂笔记哇,习惯的戳进来瞅瞅~慈禧太后:48年在政坛,当下负面评价比较多(康有为上书,里面有戊戌变法等,可能康有为编故事,还需要继续求证),大家以为戊戌变法之后,光绪被囚禁了,实际上光绪还在管政,慈禧太后也在摄政,但是有摄政范围,更多对自己定位是家主 光绪的皇后(隆裕皇后),光绪殡天了,成为了皇太后 1912年2月12号,慈禧太后主动交出了政权。中国历史上的改朝换代,都是通过武装手段。清朝到中华民国的过渡,有辛亥革命(武昌起义),革命军的力量比较弱,没法通过武装手段打败清王朝

2021-03-07 20:48:59 322

原创 《redis设计与实现》第三部分 (第16章 哨兵)

第三部分 多机数据库的实现16.0 第16章 Sentinel哨兵系统可以监视所有主服务器下,以及主服务器下的所有从服务器。如果被监视的主服务器下线,哨兵系统可以讲下线的从服务器升级成新的主服务器16.1 启动并初始化Sentinel16.1.1 初始化服务器sentinel本质是运行一个特殊模式下的Redis服务器,并不使用数据库,所以初始化sentinel不需要载入RDB和AOF可能会用到的主要功能复制命令SLAVEOF:Sentinel内部使用,客户端不可以使用发布与订阅命令:SU

2020-10-28 22:04:28 166

原创 《redis设计与实现》第三部分 (第15章 复制)

第三部分 多机数据库的实现15.0 第15章 复制用户可以通过执行slaveof选项,让一个服务器去复制另一个服务器,被复制的服务器为主服务器,对主服务器进行复制的服务器称之为从服务器。主从服务器的数据库保存相同的数据,概念上称“数据库状态一致”服务器127.0.0.1:12345成为127.0.0.1:6379的从服务器,之后在6379主服务器设置键值,在12345服务器上也可以获取该键值。如果在主服务器上删除了键值,主从服务器最后也会删除键值// for example127.0.0.1:

2020-10-27 15:23:28 187

原创 《redis设计与实现》第四部分 (第24章 监视器)

24.0 监视器通过客户端执行MONITOR,客户端可以把自己变成一个监视器,实时地接收并打印出服务器当前处理的命令请求信息流程客户端向服务器发送一条命令请求,服务器处理这条命令请求,还会将这个命令请求信息发送给所有的监视器24.1 成为监视器某个客户端向服务器发送MONITOR命令,这个客户端的REDIS_MONITOR标志会被打开,客户端会被加入到链表的表尾//code0 server.cvoid monitorCommand(client *c) { /* igno

2020-10-26 19:43:27 135

原创 《redis设计与实现》第四部分 (第23章 慢查询日志)

23.0 慢查询日志主要的功能:记录执行时间超过给定时长的命令请求,可以用这个功能产生的日志来监视和优化查询速度两个选项:时间和最多保存的条目slowlog-log-slower-than 执行时间超过多少微秒的命令记录到日志slowlog-max-len指定服务器最多保存多少条查询日志(先进先出,如果日志条目满了,最早的一条会被删除)example one127.0.0.1:6379> config set slowlog-max-len 5OK127.0.0.1:6379

2020-10-26 19:42:44 137

原创 《redis设计与实现》第四部分 (第22章 二进制位数组)

感兴趣的是variable-precision SWAR算法,因为看书进度问题没研究透彻,未完待研究!22.0 二进制位数组redis提供了四个命令处理二进制数位组:SETBIT、GETBIT、BITCOUNT、BITOP四个命令处理二进制位数组SETBIT命令为位数组指定偏移量上的二进制位设置值,位数组的偏移量从0开始计数,而二进制位的值可能是0或者1SETBIT bit 0 1SETBIT bit 3 1GETBIT获取位数组指定偏移量伤的二进制位GETBIT bit 0B

2020-10-25 23:25:17 144

原创 《redis设计与实现》第四部分 (第21章 排序)

本章节主要介绍SORT命令的实现原理,包括ASC、DESC、ALPHA、LIMIT、STORE、BY、GET在内的所有SORT命令选项的实现原理21.1 SORT cmpobj: 排序带有BY选项的字符串值时使用比如要排序numbers创建等长的数组;数组每一项都是redisSortObject结构将数组numbers的每一项转换成double类型的浮点数存储在score中;根据score排序;最后返回排好序的列表(redisSortObject结构中的obj变量返回给客户端)//

2020-10-23 23:00:45 136

原创 《redis设计与实现》第四部分 (第20章 Lua脚本)

20 Lua脚本Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,设计的目的是为了嵌入应用程序中,为应用程序提供灵活的扩展和定制功能。EVAL命令可以直接对输入的脚本进行求值EVALSHA命令则可以根据脚本的SHA1校验和来对脚本进行求值,这个命令要求校验和对应的脚本至少被EVAL执行过一次20.1 Redis服务器初始化Lua环境创建并修改Lus环境的整个过程:创建一个基础的Lua环境载入多个函数库到Lua环境中,Lua可以使用函数库进行数据操作创建全局表格redi

2020-10-23 20:55:25 201

原创 《redis设计与实现》第四部分 (第19章 事务)

19 事务Redis通过MULTI、EXEC、WATCH等命令来实现事务功能。基本概念:事务提供了一种将多个命令请求打包,然后一次性按顺序执行多个命令的机制,在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后再去处理其他客户端的命令请求。执行过程:事务首先以MULTI命令为开始,接着将多个命令放入事务当中,最后由EXEC命令将事务提交给服务器执行19.1 事务的实现经历三个阶段:事务开始、命令入队、事务执行19.1.1 事务开始M

2020-10-23 12:40:26 179

原创 《redis设计与实现》第四部分 (第18章 发布与订阅)

18 发布与订阅主要命令PUBLISH、SUBSCRIBE、PSUBSCRIBE等订阅频道:执行SUBSCRIBE,客户端可以订阅一个或多个频道,从而成为频道的订阅者有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息订阅模式执行PSUBSCRIBE,客户端可以订阅一个或者多个模式(类似于正则表达式),从而成为模式的订阅者有其他客户端向某个频道发消息时,消息不仅回传给频道的订阅者,还会发送给与频道匹配的模式的订阅者举例说明A订阅了频道news.itB订阅了频

2020-10-22 23:25:46 105

原创 《redis设计与实现》第二部分 (第14章 服务器)

14 服务器参考大佬代码:https://www.cnblogs.com/dpains/p/7640528.html14.1 命令请求执行的过程14.1.1 发送命令请求用户在客户端输入命令请求,客户端会将这个命令请求转换成协议格式,然后通过连接到服务器的套接字,将协议格式的命令请求发送给服务器14.1.2 读取命令请求客户端与服务器之间的连接套接字因为客户端的写入而变得可读,服务器将调用命令请求处理器来执行一下操作读取套接字协议格式的命令请求,并将其保存到客户端状态的输入缓冲区中对

2020-10-22 20:49:16 225

原创 《redis设计与实现》第二部分 (第13章 客户端)

13.0 客户端每个与服务器连接的客户端,服务器都为这些客户端建立了相应的Client,这个结构保存了客户端当前的状态信息,以及执行相关功能时所需要用到的数据结构,其中包括:客户端的套接字描述符客户端的名字客户端的标志值指向客户端正在使用的数据库的指针以及该数据库的号码客户端当前要执行的命令、命令参数、命令参数的个数以及指向命令实现函数的指针客户端的输入缓冲区和输出缓冲区客户端的复制状态信息,以及进行复制所需的数据结构客户端执行BRPOP、BLPOP等列表阻塞命令时使用的数据结构客户

2020-10-21 15:39:26 206 3

原创 《redis设计与实现》第二部分 (第12章:事件)

12.0 第12章 事件分类文件事件:服务器通过套接字和客户端(或者其他服务器连接),文件事件是服务器对套接字操作的抽象时间事件:redis服务器中的一些操作serverCron需要在给定的时间点执行,时间事件就是服务器对这类定时操作的抽象12.1 文件事件基于Redis模式开发了网络事件处理器文件事件处理器使用I/O多路复用来监听多个套接字,根据套接字目前执行的任务来为套接字关联不同的事件处理器套接字准备好执行连接应答accept、读取read、写入write、关闭close,

2020-10-20 12:53:39 195 5

原创 Leetcode C++《热题 Hot 100-70》23.合并K个升序链表

1.题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https

2020-10-14 12:22:49 200 2

原创 《redis设计与实现》 第二部分(第9-11章):单机数据库的实现

9.0 第9章 数据库9.1 服务器中的数据库redis服务器将所有的数据库都保存在服务器状态的db数组中,db数组的每一个元素的数据结构是redisDb初始化服务器时,会根据服务器状态的dbnum属性来决定数据库的数量。默认情况下,该选项的值为16,Redis默认会创建16个数据库//code0: server.h/* Configuration */ int verbosity; /* Loglevel in redis.conf */ i

2020-10-13 20:11:34 227 2

原创 《redis设计与实现》 第一部分:数据结构与对象 || 读书笔记

不得不夸赞redis的轻量级,以及代码透明度。可以通过这本书《Redis设计与实现》看原理,对照着官网上的src看code,理解更深刻!!!可能还需要看几遍,一遍看过去也不能全部记住,重复是硬道理!!!0. 前言特性:redis内置集合数据类型,支持对集合执行交集、并集、差集等一部分命令只能对特定数据类型执行(append只能对字符串,hset只能对哈希表),还有一部分命令可以对全部的数据类型执行(del、type以及expire)1. 引言单机功能:第一部分、第二部分、第四部分

2020-10-11 18:37:06 168 2

原创 operator最佳实践

https://www.openshift.com/blog/kubernetes-operators-best-practices代码看起来都是似懂非懂的,有个印象和概念吧,里面说到了谓词【funny】introductionactionsconnect the master api and watch for eventsevent occurs, operator reacts and performs a specific action[master api or other syst

2020-10-09 19:32:41 187

原创 水平触发和边缘触发对比

http://venkateshabbarapu.blogspot.com/2013/03/edge-triggered-vs-level-triggered.html水平触发和边缘触发的区别水平触发:只有高电平或低电平才触发通知,只有在这两种状态才能得到通知如果是低电平触发,需要a pullup resistor to pull the line highthe interrupt handler has to poll each of the devices which are sharin

2020-09-29 17:01:34 696 3

原创 实现operator常见的四种方式

有点囫囵吞枣的意思,找时间写一个简单的operator就能上手了官方链接:https://kubernetes.io/docs/concepts/extend-kubernetes/operator/#what-s-next四种方式KUDO相关链接:https://kudo.dev/基本概念KUDO is a toolkit that makes it easy to build Kubernetes Operators, in most cases just using YAML.It

2020-09-28 16:33:43 815

原创 cloudark关于operator model的资料

感觉比较全面,涉及到很多k8s的基本概念,可以深入看也可以粗略有个印象资料来源:https://github.com/cloud-ark/kubeplus/blob/master/Guidelines.md这家公司:https://cloudark.io/operator-maturity-model相关知识kubernetes extensions一般指的是operators:扩展k8s的资源集以及增加一些具体应用的自动化工作流比如数据库、key-value store、api网关等企业

2020-09-28 16:02:33 173

原创 [Kick Start 2020] Round F 1. ATM Queue

好题目,为自己的蜜汁自信感到羞愧,这个题目陷入了自己写cmp错误发现不了的大坑[Kick Start 2020] Round F 1.ATM Queue1. 题目ProblemThere are N people numbered from 1 to N, standing in a queue to withdraw money from an ATM. The queue is formed in ascending order of their number. The person numbe

2020-09-27 14:59:04 202 3

原创 openshift文档中的operator介绍

redhat的openshift云开发平台文档学习推荐的文档版本已经不支持了https://docs.openshift.com/container-platform/4.1/applications/operators/olm-what-operators-are.html#olm-maturity-model_olm-what-operators-are最新的版本是4,看4的文档https://docs.openshift.com/container-platform/4.5/operators

2020-09-25 17:22:13 1064 2

原创 开源软件的盈利方式

https://dzone.com/articles/5-ways-open-source-software-companies-make-money概念一家开源公司,提供了大部分开源软件,并且大部分用户不会为产品付费了解下部分的开源软件公司redhat【开源Linux】:2018年被ibm收购cloudera/Hortonworks(2018年两家公司合并)【开源Hadoop】MuleSoft【开源SOA中间件和相关产品】:2018年6月份被salesforce收购Automattic

2020-09-25 15:42:11 816 2

原创 operator系列文章:一、诞生的故事

https://coreos.com/blog/introducing-operators.htmlconceptsAn Operator is an application-specific controller that extends the Kubernetes API to create, configure, and manage instances of complex stateful applications on behalf of a Kubernetes user.It bu

2020-09-23 16:39:09 151 2

原创 operator系列文章:二、基本概念

看了自己列的9月份的计划,还差不少,不能如此佛系,加油哇!https://kubernetes.io/docs/concepts/extend-kubernetes/operator/感觉自己翻译不好的,我会贴上英文,自行理解custom resourcesk8s api的扩展包在k8s集群中增加一个custom resource,使用它作为一个独立的服务operatorThe Operator pattern aims to capture the key aim of a human

2020-09-23 16:35:59 217 2

原创 Go语言学习Part5-并发

刨坑很深的我,脚踏实地可能会仰望天空,终于go学了基本的了Go程Go程:Go运行时管理的轻量级线程go f(x, y, z):f, x, y 和 z 的求值发生在当前的 Go 程中,而 f 的执行发生在新的 Go 程中//case1package mainimport ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { fmt.Println(s) time.Sleep(100 * time.M

2020-09-04 14:24:57 147 2

原创 Leetcode C++ 《第204场周赛》

前几天再看go语法的时候,发现自己忘记的差不多了,用go刷题的难度又增加了,想学什么还是一鼓作气比较好啦!这个月的周赛竟然都搞上了,每轮至少2个题目,还算不错hh,虽然因为各种原因没有按时间进行竞赛code~today is also a beautiful day~1.题目11.1问题给你一个正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式。模式 是由一个或多个值组成的子数组(连续的子序列),连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。如果数组中存在

2020-08-30 17:10:37 143

原创 Go语言学习Part4-2

类型断言接口赋值之后,保存了数据类型访问接口底层的具体值,通过类型断言, case1类型断言返回两个值,底层值和断言是否成功element.(type)语法不能在switch外的任何逻辑里面使用,如果你要在switch外面判断一个类型就使用comma-ok//case1package mainimport "fmt"func main() { var i interface{} = 0.45 // fmt.Println(i.(type)) //报错(panic

2020-08-26 10:56:24 196

原创 云原生 第十四章 Kubernetes Service

服务发现的意义pod 生命周期是短暂的。在 pod 的生命周期过程中,比如它创建或销毁,它的 IP 地址都会发生变化pod 组需要提供一个统一的访问入口service的YAML文件metadata:配置元信息spec.selector:Pod选择器spec.ports:协议和端口targetPort是pod的端口port是service虚拟IP对应的端口service命令创建:apply/create查看:describe,可以看到虚拟ip和endpoints地址集

2020-08-25 15:08:08 202 2

计算机组成--结构化方法第五版

了解计算机的硬件组成,运行原理,核心技术,系统结构。掌握单CPU计算机的完整硬件组成:基本的工作原理,内部运行机制,完整的系统概念。

2014-01-04

ESFramework网络链接库

ESFramework 虽然功能强大丰富,但是使用非常简单,因为其采用了优秀的架构设计和实现,将复杂性都屏蔽在了框架的内部,暴露给使用者的都是简单易用、清晰明确的API。而且,ESFramework还提供了Rapid引擎给使用者进行快速开发,从未接触过ESFramework的人,也可以在1-2个小时之内便上手使用Rapid引擎开发分布式通信系统。

2013-09-08

双人共战数独游戏

用java写的数独游戏,支持二人共同完成数独的游戏!有可执行文件可以直接运行测试结果。

2013-09-08

ps2键盘vhdl代码

ps2键盘信号处理收集,使用QuatuasII 8.0写的代码!实用性是很高的!!

2013-06-07

Qt五子棋代码

网络五子棋的实现:实现基本界面,和以下两个功能 1、传输棋子数据(Socket) 2、同步棋盘(Socket + 数据链表)

2013-06-01

python语法介绍

python,简单易学,功能强大的编程语言 高效率的高层数据结构 简单而有效地实现面向对象编程 语法简洁,支持动态输入 跨平台的理想的脚本语言 适用于快速的应用程序开发。

2013-05-13

DjangoBook2.0中文版_254709384

本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架。 使用Django,使你能够以最小的代价构建和维护高质量的Web应用。

2013-05-13

c++面向对象基础知识

文档介绍以C++语法知识为主,但请大家注意:编译不出错误,并不等于是合理的设计。这些语法知识,均是C++语言中最基础和常见的语法知识。在介绍语法规则时,通常使用示例形式来说明语法要求。限于形式与篇幅,难以保证涉及所有的细节。尽管如此,本文档中的示例可以作为大家使用相应语法知识编写程序时的用法样例和参照。文档中错误或不当之处,请大家见谅。

2013-01-27

空空如也

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

TA关注的人

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