自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis 配置说明汇总

总体配置配置名 含义 默认值 可选值 可否支持config set 配置热生效 daemonize 是否是守护进程 no yes|no 不可以 port 端口号 6379 整数 不可以 loglevel 日志级别 notice debug|verbose|notice|waring 可以...

2019-07-14 10:20:35 213

原创 常用的影响redis的操作系统配置详解

1. overcommit_memory有时候我们在启动redis服务器的时候会看到WARNING overcommit_memory is set to 0! Background save may fail under low memory这样的提示,在修改前我们先了解下什么是overcommit, linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多的程序,因为...

2019-07-07 15:42:52 340

原创 redis 缓存

缓存的收益和成本收益:加速读写:因为缓存通常都是全内存的,而存储层通常读写性能不够强悍,通过缓存的使用可以有效的加速读写,优化用户体验 降低后段负载:帮助后端减少访问量和复杂计算,在很大程度降低了后端的负载成本:数据不一致性: 缓存层和存储层的数据存在着一定时间窗口的不一致性,时间窗口跟更新策略有关 代码维护成本:加入缓存后,需要同时处理缓存层和存储层的逻辑,增大了开发者维护代码...

2019-07-07 14:57:53 218

原创 golang 实现arrayColumn 将结构数组中结构内的某个字段作为map的key

func arrayColumn(array interface{},key string)(result map[string]interface{},err error){ result = make(map[string]interface{}) t := reflect.TypeOf(array) v := reflect.ValueOf(array) if t.Kind() !...

2019-07-06 16:34:18 3543

原创 redis cluster

redis集群的几种实现方式客户端分片,如redis的java客户端jedis使用一致性hash,优点是分区逻辑可控,缺点是需要自己处理数据路由,高可用,故障转移等问题 代理方案,如codis,优点是简化客户端分布式逻辑和升级维护里边,缺点是加重架构部署复杂度和性能消耗 redis cluster 优点 redis官方支持的集群方案,有监控,高性能,缺点 数据迁移需要人工干涉,只能使用0号...

2019-06-30 18:17:27 170

原创 redis 优化内存消耗

查看内存指标的方法info memory used_memory redis分配器分配的内容总量 used_memory_human 可读的格式返回used_memory used_memory_peak 内存使用的最大值,既峰值 used_memory_peak_human 可读的格式返回used_memory_peak used_memory_rs...

2019-06-23 19:59:47 151

原创 redis 哨兵

哨兵的作用 在redis分布式中,当主节点出现故障时,redis sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现高可用高可用的原理 每个sentinel节点会对数据节点和其他sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他sentinel节点进行“协商”,当大多数sentinel节点都认为主节点不...

2019-06-23 09:51:55 208

原创 golang 从零实现一个中间件(middleware)

实现中间件的背景先看如下代码package mainfunc hello(wr http.ResponseWriter, r *http.Request) { wr.Write([]byte("hello"))}func main() { http.HandleFunc("/", hello) err := http.ListenAndServe(":8...

2019-06-10 21:57:23 5979

原创 redis 持久化

作用持久化功能可以有效地避免因进程推出造成的数据丢失问题,当下次重启时利用之前持久化的文件既可实现数据恢复持久化的方式RDB持久化 AOF持久化RDB持久化持久化方式 RDB持久化是把当前进程数据生成快照保存到磁盘的过程触发机制客户端执行save命令 使用save配置,例如save m n在m秒内数据集存在n次修改 从节点执行全量复制操作,主节点自动执行bg...

2019-06-09 21:37:50 97

原创 mac 设置终端快捷命令

背景 我们在平时的开发过程中,经常有要连接到redis服务端或者cd到工作目录的操作,如果每次都手打,不仅长还有可能忘记比如redis服务端的密码等内容,mac下提供了一种方法可以将你的一个shell命令定义一个简短的别名,就不需要每次全手打了。配置快捷键比如我们有一个连接redis服务器的命令redis-cli -h xxx -p xxx -a "xxx"1. 打开 ~/....

2019-06-06 14:40:25 5367 1

转载 Mac 终端利器配置(Mac OSX + iTerm2 + Zsh + Oh-My-Zsh)

配置步骤地址https://blog.csdn.net/qianghaohao/article/details/79440961powerline配置地址https://blog.csdn.net/huihut/article/details/61418136

2019-06-06 13:36:02 457

原创 golang base64解码碰到的坑

背景 在一次调用三方API的时候,为了数据安全和三方API的请求和返回信息都用了rsa加密,由于rsa算法生成的内容是二进制的,所以需要用base64编码将二进制数据转化成64个可打印字符进行通信或者存储。在获取到三方的base64编码的返回信息后,解码碰到了各种问题,如下是日志里打印的三方的一个base64编码后的字符串Cf1WA2nBMo3H9G2UPhlLBBVBsMDl4...

2019-06-06 10:14:17 26380 9

原创 redis 特殊命令的用途

慢查询1.慢查询的作用:通过慢查询分析,可以找到有问题的命令进行优化2.redis客户端执行一条命令包含发送命令 命令排队 命令执行 返回结果四部分,慢查询只统计步骤三(命令执行)的时间2.慢查询中有两个重要参数slow-log-slower-thanslow-log-slower-than预设阀值,单位是微妙slowlog-max-lenslowlog-max...

2019-06-02 22:59:31 207

原创 redis 部分命令深入详解

keys* 命令的弊端该命令的作用: 将所有的键输出。由于redis是单线程运行,因此线上redis的键值过多时,要谨用该命令,会造成服务器阻塞,如果想在线上遍历所有的键值,最好用scan命令del和unlink命令的区别del和unlink命令的作用都是删除key不同的是del是阻塞操作,如果删除的key过多的话,可能阻塞时间会很长,unlink操作相比del会产生阻塞,该命令会...

2019-05-26 20:11:09 197

原创 golang bufio包Reader类型方法测试例子

创建一个bufio.Reader类型的方法func NewReader(rd io.Reader) *ReaderRead声明func (b *Reader) Read(p []byte) (n int, err error)作用Read读取数据写入p。本方法返回写入p的字节数。本方法一次调用最多会调用下层Reader接口一次Read方法,因此返回值n可能小于len(p...

2019-05-20 14:29:31 5014

原创 redis-cli客户端的命令集

命令集介绍-r 命令执行次数redis-cli -r 3 ping-i 如果设置了-r命令执行次数 -i可以设置执行间隔redis-cli -r 5 -i 1 ping (每隔一秒执行一次Ping命令,一共执行5次)-h 有两种意义,如果后面没跟任何参数表示帮助文档,后面有参数表示是设置一个域名redis-cli -hredis-cli -h 127.0.0.1...

2019-05-19 22:04:58 436

原创 golang 从零实现一个redis客户端(三) 实现set命令

回顾 上一节我们构建了一个redis连接池,最终通过如下的方式发送命令func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", }) client.SendCommand("SET hello world") 发送命令的方式是通过Sen...

2019-05-19 17:47:34 5229

原创 golang 从零开始实现一个redis客户端(二)构建连接池

回顾 上一篇博客我们构建了一个简单的同步执行的能发送命令到redis服务器的例子,这次我们尝试构建一个连接池,可以让GO并发执行redis命令最终的目录结构其中 redis.go是供外部调用的主文件,options.go是可配置的相关参数,internal/pool下是跟连接池相关的最终想要实现成的结果package mainimport ( "github....

2019-05-16 23:36:08 1053

原创 golang 使用time包的Timer类型设置定时事件

作用Timer类型代表单次时间事件。当Timer到期时,当时的时间会被发送给C信道一个简单实现定时事件的例子func main(){ t1 := time.NewTimer( 2 * time.Second) t2 := time.NewTimer( 3 * time.Second) startTime := time.Now() isTimeOut := false...

2019-05-15 21:23:03 1571

原创 golang select的用法实例

select语法的作用用来监听和channel有关的IO操作,语法与switch类似,不同的是,这里的每个case语句都是和channel相关的操作注意的地方select语句没有default情况下会一直阻塞,直到有发送或者接受操作准备就绪 select语句可以增加阻塞超时操作 如果有多个channel操作准备就绪,selelct会随机地选取一个执行 break语法可以提前终止一...

2019-05-15 15:25:50 569

原创 golang channel造成死锁(all goroutines are asleep - deadlock!)的几种错误写法

造成死锁的原因当Go协程给一个信道发送数据时,正常来说会有其他Go协程来接受数据,如果没有的话,程序就会在运行时触发panic,形成死锁,同理,当又Go协程等着从一个信道接受数据时,我们期望其他的Go协程会向该信道写入数据,要不然程序就会触发panic 在未初始化的信道上发送或者接受数据造成死锁的错误例子读写不完整在主线程会造成触发panic,在协程内会造成永久堵塞 ...

2019-05-15 14:13:57 2542

原创 golang 从零实现一个redis客户端(一)最简单的redis客户端

目的通过搭建一个高可用的redis客户端来学习redis,go语言,以及go一些设计模式参考资料go-redis源码redis-3.0源码《redis设计与实现》学习思路循环渐进,从最简单的一步步迭代一个最简单的能跑通的redis客户端例子package mainimport ( "fmt" "net" ...

2019-05-07 21:59:43 1756

原创 golang errors包

包作用实现了创建error类型错误值的函数error类型的实现实际上error类型是一个底层接口,type error interface { Error() string}需要注意是,fmt包中涉及格式输出的,在输出一个error类型值的内容的时候,就是调用Error()方法,输出Error方法的返回值创建error错误值的方式一种是通过errors包的N...

2019-05-07 20:41:06 367

原创 golang path包Match方法作用及实例

函数声明func Match(pattern, name string) (matched bool, err error)函数作用如果name匹配shell文件名模式匹配字符串,Match函数返回真(注意:Match要求匹配整个name字符串,不是它的一部分。如果pattern语法错误时,会返回"syntax error in pattern"的错误)可用的匹配字符如下:...

2019-04-29 17:26:41 4242

原创 golang sort包Search方法实例

函数声明func Search(n int, f func(int) bool) int函数作用Search函数采用二分法搜索找到[0, n)区间内最小的满足f(i)==true的值i。实现逻辑是,Search函数希望f在输入位于区间[0, n)的前面某部分(可以为空)时返回假,而在输入位于剩余至结尾的部分(可以为空)时返回真;Search函数会返回满足f(i)==true的最小值i...

2019-04-23 10:43:40 7590 4

原创 golang strings包NewReader方法

函数作用NewReader创建一个从s读取数据的Readertype Reader struct { s string //对应的字符串 i int64 // 当前读取到的位置 prevRune int }Len,Size,Read方法Len作用: 返回未读的字符串长度Size的作用:返回字符串的长度read的作用: 读取字符串信...

2019-04-21 19:16:29 21304

原创 golang strings包NewReplacer方法

相关方法的声明func NewReplacer(oldnew ...string) *Replacerfunc (r *Replacer) Replace(s string) stringfunc (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)方法的作用NewReplacer()使用提供...

2019-04-21 17:21:29 4159

原创 golang strings包(二)

func ContainsAny(s, chars string) bool判断字符串s是否包含字符串chars中的任一字符。(通过例子可以看到空字符不属于任何字符串)fmt.Println(strings.ContainsAny("team", "i")) //falsefmt.Println(strings.ContainsAny("failure", "u &...

2019-04-18 22:36:21 116

原创 golang fmt包scan相关函数

fmt包中跟scan相关的函数总共有9个,最基础的Fscanf函数Fscanf函数的声明是func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)作用:Fscanf从r(即实现io.Reader接口的类型)扫描文本,根据format参数指定的格式将成功读取的空白分隔的值保存进成功传递给...

2019-04-18 19:46:36 1554

原创 golang strings包(一)

func EqualFold(s, t string) bool判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。 fmt.Println(strings.EqualFold("Go", "go")) // true fmt.Println(strings.EqualFold("go", "go")) // tr...

2019-04-17 23:54:01 274

原创 golang fmt包格式化verb错误处理

使用*printf函数的过程中,难免会有一些使用不当导致的错误,大致有如下类型:1.错误的类型 例如:fmt.Printf("%d\n","string")2.使用了未知的verb 例如:fmt.Printf("%z\n","string")3.太多参数 例如::fmt.Printf("hello","world")4.太少参数 例如:fmt.Printf("hello %s\n...

2019-04-17 12:41:02 2768

原创 golang fmt包中*printf函数显式指定参数索引

在Printf、Sprintf、Fprintf三个函数中,默认的行为是对每一个格式化verb依次对应调用成功传递进来的参数。如果需要显式指定格式化那个参数,可以在格式化verb前增加[n] (n表示第n个参数,索引是从1开始) 例如( %[2]d )如果需要指定浮点数的宽度和精度可以写成[n]*的格式,例如([n]*f)需要注意的是 在处理完方括号表达式[n]后,默认 后面的格式化v...

2019-04-17 11:32:20 647

原创 golang fmt包Stringer接口测试实例

Stringer接口结构如下:type Stringer interface { String() string}作用:实现了Stringer接口的类型(即有String方法),定义了该类型值的原始显示。当采用任何接受字符的verb(%v %s %q %x %X)动作格式化一个操作数时,或者被不使用格式字符串如Print函数打印操作数时,会调用String方法来生成输出的文...

2019-04-17 10:41:55 530

原创 golang fmt包GoStringer接口测试实例

GoStringer接口的结构声明如下:type GoStringer interface { GoString() string}作用:实现了GoStringer接口的类型(即有GoString方法),定义了该类型值的go语法表示。当采用verb %#v格式化一个操作数时,会调用GoString方法来生成输出的文本。package mainimpo...

2019-04-16 23:38:38 421

原创 golang fmt包 Print、Println函数实例

package mainimport ( "fmt")/*func Print(a ...interface{}) (n int, err error)Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格。返回写入的字节数和遇到的任何错误。func Println(a ...interface{})与P...

2019-04-15 22:46:32 5676

原创 golang fmt包Printf函数测试实例

package mainimport ( "fmt")//整数func intPrintf() { var a int = 162 fmt.Println("----------") fmt.Println("整数类型") // %b 表示为二进制 fmt.Printf("表示为二进制%b...

2019-04-15 22:44:52 872

转载 linux 中fork函数详解

一、fork入门知识     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进

2017-03-06 22:52:34 224

转载 cenos6.5安装与配置mysql

一、mysql简介说到数据库,我们大多想到的是关系型数据库,比如mysql、oracle、sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱不得不首先推荐的是mysql数据库了,而且Mysql数据库的第一个版本就是发行在Linux系统上的。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Orac

2017-02-08 21:39:15 1700

原创 nginx配置https

生成证书可以通过以下步骤生成一个简单的证书:首先,进入你想创建证书和私钥的目录,例如:$ cd /usr/local/nginx/conf创建服务器私钥,命令会让你输入一个口令:$ openssl genrsa -des3 -out server.key 1024创建签名请求的证书(CSR):$ openssl req -new

2016-12-14 19:56:15 349

原创 源码安装lnmp redis jenkins memcached

1、 因为使用源码安装nginx 需要gcc编译器,所以需要先用which gcc 看一下cenos上有没有。如果没有,将文件夹gccrpm下的文件拷贝到服务器上,按下列顺序执行命令Rpm包下载链接:http://vault.centos.org/6.5/os/x86_64/Packages/    rpm -Uvh kernel-headers-2.6.32-431.el6.x8

2016-09-07 16:39:55 366

空空如也

空空如也

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

TA关注的人

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