- 博客(15)
- 资源 (8)
- 收藏
- 关注
原创 Redis之Cluster(集群)
上文书说到了sentinel,本次来介绍下cluster,这是个分布式的方案,通过分片(sharding)来共享数据,并且支持故障转移,放在当前是流弊的。节点: 通常是指一台服务器,也有可能一台机器上部署多个redis,就叫多个节点或多个实例。多个节点如:127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002,三个节点要相互通信可以线登陆到7000上,通过cluster meet 127.0.0.1:7001 来进行握手,加入到大家庭中。在握手的过程中,...
2020-05-23 13:44:33 194
原创 Redis之sentinel
sentinel是redis 高可用的一种架构,主要是由多个sentinel组成监视系统,可以监视多个主从服务器,在他们下线的时候 进行自动切换升级。sentinel启动的时候和启动主从并无特别大的区别sentinel 每隔10秒向主服务器发送心跳,通过命令监视返回主服务器的INFO信息,主要由两个作用:1、监控master是否存活2、解析返回的INFO信息,并且把其中有关slave的信息存到sentinel的字典中。当sentinel发现主服务器中有新的从服务器的时候,会为这个
2020-05-23 10:26:58 492
原创 go为什么快
参考文献:https://studygolang.com/articles/26879?fr=sidebargo快的主要原因:1、上下文切换代价小: Goroutine 上下文切换只涉及到三个寄存器(PC / SP / DX)的值修改; 而对比线程的上下文切换则需要涉及模式切换(从用户态切换到内核态)、以及 16 个寄存器、PC、SP…等寄存器的刷新;因为在核心上交换线程会花费很多时间。上下文切换的延迟取决于不同的因素,大概在在 50 到 100 纳秒之间。考虑到硬件平均在每个核心上每...
2020-05-23 09:08:50 359
原创 getimagesize引发线上问题之我所思
写篇博文平复下我的心情。在我的经验里,总认为php代码写的再烂也不会烂到那,今天社区的上线颠覆了我的想法。事情是这样的。社区二期上线后,服务器负载突然增高,接口频繁报错,在上线之前,对代码块的语义做了再三的核对。并没发现异常。打开日志查看。不停的去进行请求网站的图片,以为有人在刷接口(现在想想真傻,很明摆是自己刷),联合运维查了半下午。最终进行代码回滚。居然好了(真是打脸,我一直反对回滚,认为代码没有问题)。接着对比代码,以为是配置的问题,发现配置也没问题。最终在比较代码的时候发现有个循环从文章里把图片
2020-05-19 23:34:39 438
原创 Redis之复制
所谓的复制就是从一台机器复制到另外一台机器上,大部分都是我们经常听到到主从同步。或者从从同步。同步到命令 slaveof 127.0.0.1复制分为同步和命令传播【旧版复制】当从服务器向主服务器发送slaveof命令的时候主要是通过sync命令来完成的,以下介绍sync的执行步骤:1、从服务器向主服务器发送sync命令2、主服务器接收到sync命令后,会启动一个bgsave命令在后台生成一个rdb文件,并开辟一块缓冲区存储生成文件的过程中执行的命令3、当主服务器生成rdb后,会推
2020-05-16 16:38:09 515
原创 Redis之AOF持久化
在实际中aof因为是不停的存命令,会导致aof文件体积急剧膨胀。为了解决这个问题。提供了一个rewrite功能,通过该功能,redis可以创建一个新的aof文件,替代现有的aof,新旧保存的相同。但新的里面不会包涵aof这些冗余的命令。所以体积要小这种重写,会导致文件不一致,为了避免这个问题。在开始重写的时候会创建一个缓冲期,把重写期间的命令全部放到缓冲区里,同时给aof 和重写aof都发命令...
2020-05-16 13:31:27 169
原创 Redis之rdb持久化
redis的数据都放在内存当中,如果服务器退出。数据就不见了,为了解决这种问题提供了rdb和aofrdb是一个被压缩过都二进制文件,在服务器启动都时候,通过redis.conf里都配置自动加载启动。生成rdb文件的命令有save和bgsave. save命令会直接阻塞服务器进程,直到rdb生成完成为止,期间任何请求都会被拒绝。相比较bgsave则是生出另外一个子进程,在后台负责rdb生成,不会影响任何请求。save、bgsave、bgrewriteaof三个命令不能同时使用。避免大量的磁盘.
2020-05-16 12:54:38 124
原创 Redis之数据库
redis的数据库的num是通过配置来设置的。其实是在内存中开辟来num个长度的内存地址,所谓的切换,select 0 到select 1,其实就是把地址指针从0指到了1.我们在存如set key value 的时候,会把key 存到一个专用的键字典中,value存到了另外一个字典里。设置过期时间可以使用秒expire或者毫秒pexire 不管那种最后都是毫秒存入。过期时间也会存到字典中。过期判定:先检查给定键是否存在于过期字典,如果在取键的过期时间,再去检查当前unix时间戳是否大
2020-05-13 21:36:29 219
原创 Redis之字典
Redis的字典使用哈希表做为底层实现,一个哈希表中有多个哈希节点。而每个哈希表节点保存了字典中的一个键值对。字典结构:typedef struct dict{ dictType *type; void *privdata; dictht ht[2]; //typedef struct dict{ dictType *type; void *privdata; dictht ht[2]; //哈希表 int rehashidx //扩容的时候
2020-05-12 20:39:19 506
原创 Redis之SDS
SDS:主要由free、len、buf三个组成,分别记录剩余的长度、当前字符串的长度和字符串。它是通过预分配和惰性空间释放来减少内存分配操作,预分配策略:每次存字符串的时候如果小于1m则分配与字符串相同的大小,额外加一个1位的\0结尾符,如果是2k长度字符串则问4k + 1大小的内存空间。如果超过1m,加入说30m,只会多给出来1m空间,外加\0,也就是30m+1m+1b惰性空间释放:指当某个值长度由大变小时,不会立即释放空间,而是会把剩余的空间size记录到free里,在下次使用时可以先判断是
2020-05-12 19:51:00 449
原创 win10中git密码认证失败
今天在使用git clone克隆项目的时候报如下错误:$ git clone XXXXXXCloning into 'XXXX'...fatal: Authentication failed for 'XXXXXX'在网上查找了一番,也使用如下命令进行了设置:git config --global user.namegit config --global user.email...
2020-05-06 13:18:22 751
原创 从无到有,我司CRM的演变史
来到现在这公司已经近5年,能拿得出手项目仅有CRM和消息网关。本篇文章主要讲CRM的演变史。一、孽缘。 15年12月21日来到公司,团队新组建,算我仅4人,最长到仅半年而已,当时公司购买了sugarcrm系统,创建模块确实很方便,但开发起来很困难,举个例子,当时的实施方做统计报表功能耗费了一个月的时间,丢过来的功能还无法使用。这让我们一时之间也无从下手,大家熟悉的框架也各不相...
2020-05-02 19:26:52 443
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人