本地缓存一、为什么要使用本地缓存提升性能,快速响应。 通常我们对于持久化数据都会放在数据库中,一般来说,我们都是直接访问数据库的,数据的性能瓶颈在于 1、网络连接 2、磁盘io,取决于sql 性能与数据量等等。 一般我们针对我们的应用程序会增加一层缓存,在选择缓存时,我们也会有很多选择、包括redis、memcache、这些都是作为进程独立部署的,可以用于分布式缓存。 如果从业务量出发,同时成本低
提到本地缓存大家都不陌生,只要是个有点经验的后台开发人员,都知道缓存的作用和弊端。本篇文章我们就来简单聊聊在 golang 做业务开发的过程中,本地缓存的一些可选的开源方案。分析它们的特点,以及内部的实现原理。 1.本地缓存需求分析首先来梳理一下业务开发过程中经常面临的本地缓存的一些需求。我们一般做缓存就是为了能提高系统的读写性能,缓存的命中率越高,也就意味着缓存的效果越好。其次本地缓存
简述:go-cache 是一个基于内存的、高速的,存储k-v格式的缓存工具。它适用于运行在单台机器上的应用程序,可以存储任何数据类型的值,并可以被多个goroutine安全地使用。 go-cache 不打算用作持久数据存储,但是可以将整个缓存数据保存到文件(或任何io.Reader/Writer)中,并且能快速从中指定数据源加载,快速恢复状态。 大家可以去看看go-cache的源码,提供了很多设置
启动命令我们先来个非后台运行的启动命令func init() { startCmd := &cobra.Command{ Use: "start", Short: "Start Gonne", Run: func(cmd *cobra.Command, args []string) { startHttp() }, } startCmd.Flags().BoolVarP(&daem
今天接到一个任务是将原来运行在mac的应用移植到linux,原因当然是因为客户那边当前是linux环境,也不想再采购mac电脑。 通常来说,这个工作并不难,因为我选用的服务器端技术是c或者golang,这两种技术具有很好的可移植性,而且大多是重新编译即可运行,所以接到任务的开始并没有把这个当一回事。 跟想象中的也差不多,搭建好linux测试服务器,在mac上把运行很久的应用重新交叉编译了一遍,部
文章目录1.背景1.1.项目介绍1.2.使用方法2.源码分析2.1.项目结构2.2.数据结构2.3.API代码流程1.Cache2.Add3.Value4.Delete5.Flush3.总结 1.背景1.1.项目介绍cache2go是一款由golang实现的本地缓存库,提供并发安全的读写操作,具有过期时间控制等特性。项目地址:https://github.com/muesli/cache2go1
在使用Golang开发时,有时候我们需要实现多进程的功能来提高程序的并发性能。通过多进程,可以让程序同时执行多个任务,更快地完成工作。本文将为刚入行的小白开发者介绍如何在Golang中实现多进程。首先,我们来看一下实现多进程的具体步骤: | 步骤 | 操作 | | ---- | --------------------- | | 1 | 创建多个gorou
最近一直用的golang,然后写pat1015德才论的时候出了问题,运行超时,不是说golang速度还可以吗。 于是从网上找了同样的c++做了一下比较,发现同样的数据(10万行,一行3个整数),c++几十毫秒就完成,golang要十几秒,这也差距太大了吧。输出运行时间后,发现是输入输出有问题。网上查了一圈,原来是标准的fmt包没有缓存,然后速度就很慢。 找了几个改进的方法。Scanner这个最快的
转载 2023-08-23 14:39:43
90阅读
目录1. Redis:1.1 简介:1.2 连接redis1.3 常用api:1.3 连接池:1.4 项目中使用: 1. Redis:1.1 简介:  garyburd/redigo 包是网上很多博文都在推荐使用的一个高Star的Redis连接包,项目已经迁移到了gomodule/redigo,同时包的获取也理所当然地改成了go get github.com/gomodule/redigo/re
转载 2023-08-21 14:16:43
101阅读
需求最近在弄一个游戏的gate网关转发服务器,服务器之间使用的是nats通讯,gate的作用是接收客户端发来的消息转发到对应的服务器上,并从nats上获取游戏服务器发送给客户端的消息并转发给客户端。前面接收还好处理,因为都是发布订阅模式的消息,收到消息直接向nats上扔就行了。但转发服务器来的消息就不一样了,从nats上取的速度远大于gate转发给客户端的速度,会有数据囤积在nats中。为了解决这
原创 23天前
39阅读
进程,线程,并行和并发一个应用程序是运行在机器上的一个进程进程是一个运行在自己内存地址空间里的独立执行体。一个进程由一个或多个操作系统线程组成,这些线程其实是共享同一个内存地址空间的一起工作的执行体。几乎所有’正式’的程序都是多线程的,以便让用户或计算机不必等待,或者能够同时服务多个请求(如 Web 服务器),或增加性能和吞吐量(例如,通过对不同的数据集并行执行代码)。一个并发程序可以在一个处理
 Golang调度器  先看看golang调度的由来。  一. 单进程时代不需要调度器     在早期操作系统是单进程的,一个进程拥有整个系统的所有资源,所以也不需要调度器。   但是单进程的操作系统也有明显的缺点:   1. 采用单一的执行流程,计算机只能一个任务一个任务处理。   2. 进程阻塞所造成CPU资源的浪费。那么如何充分利用资源,可以让多个进程同时并发的
文章目录GoLang之schedule 循环如何运转(12) GoLang之schedule 循环如何运转(12)上一节,我们讲完 main goroutine 以及普通 goroutine 的退出过程。main goroutine 退出后直接调用 exit(0) 使得整个进程退出,而普通 goroutine 退出后,则进行了一系列的调用,最终又切到 g0 栈,执行 schedule 函数。从前
文章目录GoLang之描述scheduler的初始化过程(7)1.初始调度器的相关参数2.调整 SP3.初始化 g0 栈4.主线程绑定 m05.初始化 m06.初始化 allp7.参考资料 GoLang之描述scheduler的初始化过程(7)1.初始调度器的相关参数上一节我们说完了 GPM 结构体,这一讲,我们来研究 Go sheduler 结构体,以及整个调度器的初始化过程。Go sched
Golang 是一个不错的语言,尤其是做一个缓存中间层是非常非常容易的。比较常见的场景就是我们在读一个很大很大的文件的时候,我们是做不到一次加载文件到内存的,Golang 可以做到一点一点的将文件读至末尾,慢慢处理完,相信很多语言也很容易做到这个,那如果在处理这个文件的时候项目的主语言是 Golang 而需要用到一些用 C 写好的模块那又该如何呢?如果让一个程序员只用 C 来实现处理一个大文件,那
package mainimport ( "fmt" "os" "os/exec" "strconv" "strings")func isProcessExist(appName string) (bool, string, int) { appary := make(map[string]int) cmd := exec.Command("cmd", "/C", "tasklist
转载 2019-10-11 09:58:00
1556阅读
2评论
转载豆瓣http://www.douban.com/note/484935836/
转载 精选 2015-02-16 11:01:33
1261阅读
Redis介绍Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。Redis支持的数据结构Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(set
一.前言Redis是一种高性能的Key-Value数据库1.Redis特性Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-sl
转载 2023-08-18 18:50:08
191阅读
当感觉mysql性能出现问题时,通常会先看下当前mysql的执行状态,使用 show processlist来查看,例如:其中state状态列信息非常重要,先看下各列含义,然后看下state常用状态各列的含义1、id一个标识,你要kill一个语句的时候使用,例如 mysql> kill 207;2、user显示当前用户,如果不是root,这个命令就只显示你权限范围内的sq
  • 1
  • 2
  • 3
  • 4
  • 5