go

数据库怎么选择?| 文末送书

不问归期 提交于 2020-10-02 22:15:44
武培轩 推荐搜索 MySQLRedisElasticsearchJavaSpring Boot数据结构 所有数据库管理系统的主要工作都是「可靠地存储数据」并使其对用户可用。我们使用数据库作为数据的主要来源,帮助我们在应用程序的不同部分之间共享数据。我们使用数据库,而不是在每次创建新应用程序时寻找存储和检索信息的方法,也不是每次都去发明一种组织数据的新方法。这样一来,我们就可以专注于应用程序逻辑而不是基础设施。 数据库是模块化的系统,由多个部分组成:接受请求的传输层、决定以最高效方式运行查询的查询处理器、执行操作的执行引擎以及存储引擎。 存储引擎(或数据库引擎)是数据库的一个软件组件,它负责在内存和磁盘上存储、检索和管理数据,而设计它的目的是长久保存每个节点的数据[REED78]。数据库可以响应复杂的查询,存储引擎则会更细粒度地看待数据并提供一组简单的数据操作API,允许用户创建、更新、删除和检索数据记录。从某个角度来看,数据库是构建在存储引擎之上的应用程序,它提供了表结构(schema)、查询语言、索引、事务和许多其他有用的特性。 为了获得灵活性,键和值都可以是没有预设格式的任意字节序列。它们的排序和表示语义是在更高级别的子系统中定义的。例如,你可以在一个表中使用int32(32位整数)作为键,而在另一个表中使用ascii(ASCII字符串);从存储引擎的角度来看

[系列] Go

我与影子孤独终老i 提交于 2020-10-02 21:57:13
1.问题现象描述 使用 json.Unmarshal() ,反序列化时,出现了科学计数法,参考代码如下: jsonStr := `{"number":1234567}` result := make(map[string]interface{}) err := json.Unmarshal([]byte(jsonStr), &result) if err != nil { fmt.Println(err) } fmt.Println(result) // 输出 // map[number:1.234567e+06] 这个问题不是必现,只有当数字的位数大于 6 位时,才会变成了科学计数法。 2.问题影响描述 当数据结构未知,使用 map[string]interface{} 来接收反序列化结果时,如果数字的位数大于 6 位,都会变成科学计数法,用到的地方都会受到影响。 3.引起问题的原因 从 encoding/json 可以找到答案,看一下这段注释: // To unmarshal JSON into an interface value, // Unmarshal stores one of these in the interface value: // // bool, for JSON booleans // float64, for JSON numbers //

kubespray 1.14.3集群证书过期renew后kubelet启动失败

末鹿安然 提交于 2020-10-02 20:45:26
Aug 26 09:43:44 k8s-testn2 systemd[1]: kubelet.service failed. Aug 26 09:43:54 k8s-testn2 systemd[1]: kubelet.service holdoff time over, scheduling restart. Aug 26 09:43:54 k8s-testn2 systemd[1]: Stopped Kubernetes Kubelet Server. Aug 26 09:43:54 k8s-testn2 systemd[1]: Starting Kubernetes Kubelet Server... Aug 26 09:43:54 k8s-testn2 systemd[1]: Started Kubernetes Kubelet Server. Aug 26 09:43:54 k8s-testn2 kubelet[18749]: I0826 09:43:54.371222 18749 server.go:417] Version: v1.18.4 Aug 26 09:43:54 k8s-testn2 kubelet[18749]: I0826 09:43:54.371721 18749 plugins.go:100] No cloud provider specified.

Prometheus监控PHP-FPM

可紊 提交于 2020-10-02 20:34:25
一、概述 启用php-fpm状态功能 php-fpm 和 nginx 一样内建了一个状态页,对于想了解php-fpm的状态以及监控php-fpm非常有帮助。为了后续的Prometheus监控,我们需要先了解php-fpm状态页是怎么回事。 在上一篇文章中,已经开启了php-fpm状态,链接 如下: https://www.cnblogs.com/xiao987334176/p/12918413.html pm.status_path = /fpm_status nginx配置 上篇文章中,也对nginx默认主机添加了配置 location ~ ^/(fpm_status| health)$ { fastcgi_pass 192.168 . 31.34 : 9000 ; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } 访问php-fpm状态页面 http://192.168.31.34/fpm_status 效果如下: php-fpm status详解 pool-fpm 池子名称,大多数为www process manager – 进程管理方式,值:static, dynamic or ondemand. dynamic start time –

golang | Go语言入门教程——结构体初始化与继承

人盡茶涼 提交于 2020-10-02 19:57:37
本文始发于个人公众号: TechFlow ,原创不易,求个关注 今天是 golang专题 第10篇文章,我们继续来看golang当中的面向对象部分。 在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么给结构体定义函数,还有函数接收者的使用。今天我们来学习一下结构体本身的一些使用方法。 初始化 在golang当中 结构体初始化的方法有四种 。 new关键字 我们可以通过new关键字来创建一个结构体的实例,这种方法和其他语言比较类似,这样会得到一个 空结构体指针 ,当中 所有的字段全部填充它类型对应的零值 。比如int就对应0,float对应0.0,如果是其他结构体则对应nil。 type Point struct { x int y int } func main () { var p *Point = new (Point) fmt.Print(p) } 从这段代码当中我们可以看到,new函数 返回的是一个结构体指针 ,而不是结构体的值。一般我们很少用new关键字,而是直接通过结构体加花括号的方式来初始化。 结构体名称 相比于使用new关键字,我们更常用的是 通过结构体名称加上花括号 的方式来进行初始化。 如果我们不再花括号当中填写参数的话,那么同样会得到一个填充了零值的结构体。结构体当中的所有属性都会被赋予这个类型对应的零值。 type Point struct { x

[Go] assignment count mismatch 1 = 2

五迷三道 提交于 2020-10-02 16:03:33
这个错误的的意思是赋值变量的数目不匹配。 举例: result := json.Marshal(List) 由于没有给返回值中的 error 正确赋值,就会报 assignment count mismatch 1 = 2 正确写法: result, _ := json.Marshal(List) Link: https://www.cnblogs.com/farwish/p/13046595.html 来源: oschina 链接: https://my.oschina.net/u/4340499/blog/4300367

Ubuntu16.04下配置VScode的C/C++开发环境

一曲冷凌霜 提交于 2020-10-02 11:41:16
博客转载: https://blog.csdn.net/weixin_43374723/article/details/84064644 Visual studio code是微软发布的一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。 1. Vscode安装 第一种方式是从VScode官网下载.deb文件,然后双击该文件会打开软件中心进行安装。 第二种方式是通过Terminal进行安装,首先输入下面三条语句安装 umake : sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make sudo apt-get update sudo apt-get install ubuntu-make 然后通过umake来安装VScode: umake web visual-studio-code 2. Vscode环境配置 2.1 安装c/c++插件 首先通过左边栏的Extension栏目安装C++插件,操作如下图: 2.2 建立工程 由于VScode是以文件夹的形式管理工程的,因此我们首先新建一个文件夹,我这里取名叫 hello 。 然后通过VScode打开此文件夹: 新建main.cpp文件并输入程序: 2.3 更改配置文件(launch.json)

Go实现API并发请求的案例

生来就可爱ヽ(ⅴ<●) 提交于 2020-10-02 08:43:35
场景: 有 N 个并发请求来访问Api1时 ,如果数据库或者web服务器没有对请求做限制,那么所有请求都会访问一次数据库,很可能造成数据库压力比较大,而且 HTTP访问也比较耗时。 实现: 有 N 个并发请求来访问Api1时, 只有一个请求可以访问到数据库,其他请求共享一个请求的结果。 安排: 1. 定义一个请求组,来存储所有的请求 type RequestGroup struct { mu sync.Mutex m map[string]*Result // 请求类型=>请求结果 } 我们使用使用Result类型来存储请求结果,mu 对请求的管理。(此处如果不清楚如何使用,后续详细讲解) 2. 定义一个请求结果的类型 type Result struct { wg sync.WaitGroup val interface{} err error } 好了,那么我们如何处理并发时来的请求呢? 所有请求的结果该如何处理呢? 首先,我们应该在有请求时,开始拦截验证是否同时有相同的请求访问,如果有,阻塞,直到第一个访问数据库的请求结束,所有请求获取到结果后结束。 代码演示: func (g *RequestGroup ) Do (key string, getDataFunc func()(interface{}, error)) (interface{}, error) { g.mu

go

谁说胖子不能爱 提交于 2020-10-02 04:05:00
在win10本机上装了一个Ubuntu系统,版本信息如下: root@N-20HEPF15JN1Q:/home/ubuntu/go# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal Go 语言在性能上更接近于 Java 语言,虽然在某些测试用例上不如经过多年优化的 Java 语言,但毕竟 Java 语言已经经历了多年的积累和优化。 为什么你应该学习Go语言?https://www.liwenzhou.com/posts/Go/about_golang/ 刚好可以在本机的ubuntu上试试安装一下go的环境,运行个Hello World 。 1、下载go的安装包,以linux安装为例: https://golang.google.cn/dl/go1.15.1.linux-amd64.tar.gz 2、将下载好的安装包解压到/usr/local/下 tar -zxvf go1.15.1.linux-amd64.tar.gz -C /usr/local # 解压 3、配置go的环境变量;当然不添加也可以,只不过每次运行要使用绝对路径/usr/local/go/bin/go