自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis中epoll模型-IO多路复用详情解析

阅读完redis中的网络模型源码,该文章会基于源码是如何去实现的角度,去介绍epoll模型、事件处理。以及基于此,自己实现的多人聊天终端系统,并附带源码。1、epoll模型介绍epoll 是Linux内核为处理大量并发网络连接而提出的解决方案,能显著提升系统CPU利用率。epoll使用非常简单,总共只有3个API :epoll_create函数创建一个epoll专用的文件描述符,用于后续epoll相关API调用;epoll_ctl函数向epoll注册、修改或删除需要监控的事件;epoll_wai

2020-11-15 21:49:31 12

原创 redis源码阅读笔记-集群

1、clusterProcessPacket函数解析(先对MEET、PING、PONG这几个回复处理做分析)

2020-09-24 23:18:01 25

原创 超级实用的go语言学习教程

哈哈哈,转发于此

2020-11-27 12:48:28 5

原创 redis6.0 多线程简介

1、简单介绍redis 的瓶颈并不在 CPU,而在内存和网络。Redis 6 中的多线程 主要在处理 网络 I/O 方面,对网络事件进行监听,分发给 work thread 进行处理,处理完以后将主动权交还给 主线程,进行 执行操作,当然后续还会有,执行后依然交由 work thread 进行响应数据的 socket write 操作。2、单线程网络处理模型当监听到某一时刻,端口接收到数据时,根据事件模型,进行不同的处理。对于所有的客户端的请求,根据就绪队列的顺序,进行串行化处理,处理完fd1,再处

2020-11-21 17:52:51 7

原创 libevent使用教程

本文转载于此1、简介基本的socket变成是阻塞/同步的,每个操作除非已经完成,出错,或者超时才会返回,这样对于每一个请求,要使用一个线程或者单独的进程去处理,系统资源没有办法支撑大量的请求。posix定义了可以使用异步的select系统调用,但是因为它采用了轮询的方式来判断某个fd是否变成active,效率不高。于是各系统就分别提出了基于异步的系统调用,例如Linux的epoll,由于在内核层面做了支持,所以可以用O(1)的效率查找到active的fd。基本上,libevent就是对这些高效IO的封装

2020-11-19 20:12:44 7

原创 redis数据结构-动态字符串

1、内存对齐1.1 对齐原因CPU和总线是64位的,所以CPU每次可以从内存里面拿出8个字节,而这8个字节是对齐的,也就是说只能是0-7,8-15, 16-23这样的,不能从中间拿。这个时候你要读一个double,如果double的地址可以被8整除,那你就只需要跟内存要一次数据。如果不能整除,那你就得跟内存要2次数据。1.2 对齐规则结构体变量的起始地址能够被其最宽的成员大小整除结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节结构体总体大小能够被最宽的

2020-11-07 11:26:51 9

原创 redis数据结构-字典

1、字典数据结构1.1 哈希表数据结构typedef struct dictht { //哈希表 dictEntry **table; //存放一个数组的地址,数组存放着哈希表节点dictEntry的地址。 unsigned long size; //哈希表table的大小 unsigned long sizemask; //用于将哈希值映射到table的位置索引。它的值总是等于(size-1)。 unsigned long used; //记录哈希表已有的节点(键值对

2020-11-05 21:19:43 48

原创 innodb存储引擎常见参数总结

1、参数可以以show variables like形式去查看一、innodb_version innodb 版本号innodb_read_io_threads/innodb_write_io_threads 读写IO线程数innodb_purge_threads purge线程数innodb_buffer_pool_size 缓冲池内存大小innodb_buffer_pool_instances 缓冲池实例个数innodb_old_blocks_pct LRU的midpoint位置,ol

2020-10-31 10:27:16 15

原创 innodb存储引擎体系架构

1、innodb体系架构innodb存储引擎有很多个内存块,可以认为这些内存块组成一个大的内存池包含很多个后台线程,主要为Master Thread、IO Thread、Purge Thread、Page Cleaner Thread1.1 后台线程主要工作内容:刷新内存池中的数据,保证缓冲池中缓存的数据最新将已修改数据文件刷新到磁盘文件保证数据库异常时InnoDB能恢复到正常运行状态Master Thread: 主要负责合并插入缓冲、将日志缓冲刷新到磁盘、UNDO页的回收I

2020-10-28 20:46:49 8

原创 带你玩转pandas和numpy

1. 初始化import pandas as pddata = pd.DataFrame({"name":["lx","cl","zgq"],"age":[18,20,21],"id":[2122,2133,2144]})data2. 基本属性data.columns #查看列名data.index #查看行索引data.dtypes #查看各列数据类型data.shape #查看维度data[data.columns[1:]] #获取第1~n列数据data.i

2020-10-26 21:15:11 35

转载 mysql索引

Mysql索引 索引介绍 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中...

2020-10-26 09:15:51 13

原创 innodb锁问题

1、锁类型innodb存储引擎实现了如下两种标准的行级锁:共享锁(S LocK):允许事务读一行数据排他锁(X Lock) : 允许事务删除或更新一行数据如果一个事务T1获得了行r的共享锁,那么另外的事务T2可以立即获得行r的共享锁,因为锁读取并没有改变行r的数据。但如果T3想获取r的排他锁,则必须等待事务T1、T2释放行r上的共享锁2、加锁语句select … for update,对读取的行记录加一个X锁select … lock in share mode,对读取的行记录加一个

2020-10-18 10:48:29 15

原创 gevent、asyncio协程操作

网络单请求处理:coConsume = coroutine.create( function (filter, producer) while true do local stutas, msg = coroutine.resume(filter, producer) print('receive msg : ', msg) end end)coFilter = coroutine.create( function (producer) while true do

2020-09-28 10:45:06 56

转载 redis集群搭建介绍

本文转载自:https://blog.csdn.net/men_wen/article/details/72853078 1. Redis Cluster介绍Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。1.1.

2020-09-17 22:49:20 12

原创 redis集群中的纪元(epoch)

该文章转载来源: https://zhuanlan.zhihu.com/p/44658603纪元(epoch)Redis Cluster 使用了类似于 Raft 算法 term(任期)的概念称为 epoch(纪元),用来给事件增加版本号。Redis 集群中的纪元主要是两种:currentEpoch 和 configEpoch。1、currentEpoch这是一个集群状态相关的概念,可以当做记录集群状态变更的递增版本号。每个集群节点,都会通过 server.cluster->currentE.

2020-09-13 10:54:27 17

原创 mysql安装、启动、卸载

1、安装mysqlsudo apt-get install mysql-server //服务端sudo apt-get install mysql-client //客户端sudo apt-get install libmysqlclient-dev //程序编译时链接的库检查安装是否成功,mysql启动端口3306处于监听状态sudo netstat -tap | grep mysql登录mysql -u root -p #或者mysql

2020-09-07 12:48:05 28

原创 lucky

import sysimport random# argv[1]: 1:double 2:big# argv[2]: how muchdef main(argv): ttype = int(argv[1]) - 1 nums = int(argv[2]) listlucky = [[6,1,33,16],[5,2,35,12]] for i in range(nums): numlist = [[],[]] for j in range(2):

2020-09-03 20:32:45 47

原创 CRC16算法构建

1、redis字节表生成 #include <stdio.h>#include <stdint.h> int main() { uint32_t num = 1L << 16 | 1L << 12 | 1L << 5 | 1; // 生成式h(x) printf("%x\n", num); uint8_t c = 0; // 一个字节值得所有情况 uint8_t tc = 0; // c得副本 ui

2020-08-19 18:23:21 41

原创 tcp/ip协议与socket介绍

1、tcp/ip四层协议模型2、curl 命令当用户执行curl命令时,执行了建立连接->发送数据->关闭连接这几个过程。2.1 应用层用户运行执行curl命令2.2 传输控制层,建立连接主要有TCP和UDP协议TCP协议:面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。UDP协议:是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个I

2020-07-29 22:21:13 35

原创 redis源码阅读笔记-哨兵原理

哨兵小知识Sentinel哨兵是redis官方提供的高可用方案,可以用它来监控多个Redis服务实例的运行情况。Redis Sentinel是一个运行在特殊模式下的Redis服务器。Redis Sentinel是在多个Sentinel进程环境下互相协作工作的。Sentinel系统有三个主要任务:监控:Sentinel不断的检查主服务和从服务器是否按照预期正常工作。提醒:被监控的Redis出现问题时,Sentinel会通知管理员或其他应用程序。自动故障转移:监控的主Redis不能正常工作,S

2020-07-23 21:52:08 43

原创 哨兵机制-配置文件sentinel.conf详细说明

# Example sentinel.conf # 哨兵sentinel实例运行的端口 默认26379port 26379 # 哨兵sentinel的工作目录dir /tmp # 哨兵sentinel监控的redis主节点的 ip port # master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了# senti

2020-07-20 08:41:14 145

原创 redis源码阅读笔记-主从复制

1、从节点B-client 终端发起slaveof 192.168.1.1 6379命令2、节点B-server对slaveof命令响应操作,对节点B进行初始化设置,清空所有之前可能已主从复制占用的空间。slaveofCommand。节点B的状态就以下三种情况讨论:状态1:B节点是个单机节点,未与其他节点建立主从关系状态2:B节点已建立/正在建立主从关系,B是主节点状态3:B节点已建立/正在建立主从关系,B是从节点replicationSetMaster,初始化B-server节点。设置

2020-07-08 19:30:19 87

原创 set命令之redis内部存储方式

1、set key value xx/px time/time_ms (生存时间) t_string中: 上述参数都是robj对象,在这层之上把数据存在内存上 执行上述命令,无非是将这key_obj、value_obj、expire_obj三个对象信息存储在内存当中 (value_obj存储在哈希节点v->val中,指向值对象,expire_obj存储在v->u64,指向整型值) (1)对value_obj进行最优的编码(tryObjectEncoding)...

2020-05-19 22:21:57 65

原创 基于django实现微信发、收信息

网页版微信,无非是扫取微信二维码,授权登录后,可以从服务端获取到个人微信相关的所有信息,包含好友列表,公众号等等,根据这些即可实现好友一对一的数据发送。微信的登录、个人信息的获取、消息的发、收都是基于http请求实现的。一、获取微信扫描二维码 网页上的二维码,无疑就是一个<img>标签,只要获取到属性“src”地址即可。 一般的二维码请求地址为ht...

2019-07-08 13:12:46 443

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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