Go语言中文网 为您找到相关结果 44

go语言七——连接redis

使用Redigo这个库 package main import ( "fmt" "redis" "time" "strconv" ) var ( server string = "192.168.1.105:6379" password string = "passwd" ) var pool *redis.Pool func test(i int) { c := pool.Get() defer c.Close() t:=strconv.Itoa(i) c.Do("SETEX","foo"+t,20,i) reply, err := redis.Int(c.Do("GET","foo"+t)) if err == nil { fmt.Print(reply) } else { fmt.Pr...阅读全文

博文 2014-10-04 19:26:26 ciaos

go,Buffer以及相关数据类型

## 主要内容 ## - 在go代码中经常见到bytes.Buffer类型数据 - bytes.Buffer这个数据跟 []byte之间有什么关系呢 - bytes.Buffer相关的数据类型之间转换 ---------- bytes.Buffer bytes是这个包的名字,bytes.Buffer则是一种缓存数据类型. type Buffer struct { buf []byte off int // read at &buf[off], write at &buf[len(buf)] runeBytes...阅读全文

golang bufio writer,reader 缓存规则

1、写缓存,如果一次write的长度大于buffer长度那么久发送当前缓冲区的内容并且发送要写入的内容,就是不在缓存了。如果发送的内容小于buffer长度,就按缓冲区满了发送缓冲区内容。 2、读缓存,读缓存就不用看了,他基本和外部应用没什么直接关系,他的大小一般默认就行...阅读全文

博文 2016-07-05 05:00:09 anjianliang

Go怎么操作h5的localStorage缓存

急求大神告诉,Go能不能操作h5的localStorage,如果能怎么清除localStorage缓存的数据,如果不能,该怎么办?在退出登录的时候清除localStorage缓存。下面是退出代码,怎加上清除localStorage func Logout(c *middleware.Context) { c.SetCookie(setting.CookieUserName, "", -1, setting.AppSubUrl+"/") c.SetCookie(setting.CookieRememberName, "", -1, setting.AppSubUrl+"/") c.Session.Destory(c) c.Redirect(setting.AppSub...阅读全文

基于 Go 的高效缓存BigCache

BigCache 是用于在 Go 中写入千兆字节数据的高效缓存。快速,并发,逐行扫描内存缓存,以保持大量条目,而不影响性能。 BigCache 在堆上保留条目,但为它们省略了 GC。 要实现对字节数组的操作,因此在大多数用例中将需要在高速缓存前面进行条目(de)序列化。 ![image](https://static.oschina.net/uploads/space/2017/1006/075023_0fTA_2903254.png) 简单初始化 自定义初始...阅读全文

golang HTTP cookie 登陆百度

``` package main //QQ29295842 欢迎大家技术交流 import ( "fmt" "io/ioutil" "net/http" "net/http/cookiejar" // "os" "net/url" "time" ) func main() { //Init jar j, _ := cookiejar.New(nil) // Create client client := &http.Client{Jar: j} // Create request req, err := http.NewRequest("GET", "http://zhanzhang.baidu.com", nil) // Fetch Request resp, err := client....阅读全文

博文 2017-09-01 01:21:20 long

Django中如何配置Database缓存?

  BACKEND:   django.core.cache.backends.db.DatabaseCache   LOCATION:   数据库表名   示例:   CACHES = {   'default': {   'BACKEND': 'django.core.cache.backends.db.DatabaseCache',   'LOCATION': 'my_cache_table',   }   }   Database缓存配置——创建缓存表   使用数据库缓存之前,需要创建缓存表:   python manage.py createcachetable   创建的表名为缓存配置中的LOCA...阅读全文

Go 实现的分布式内存缓存vegamcache

vegamcache是一个分布式内存缓存,使用golang的八卦协议构建。 在vegamcache中,网络调用不用于为每个Get获取数据。相反,数据将在背景中使用八卦在整个节点上进行复制。 只能在golang中使用 需要消耗大量的内存 分片缓存,而不是将其存储在单个哈希映射中 增加到期时间 小型垃圾收集器来删除过期的值 与其他缓存服务进行基准比...阅读全文

关于缓存你需要知道的

About Cache 作后端开发的同学,缓存是必备技能。这是你不需要花费太多的精力就能显著提升服务性能的灵丹妙药。前提是你得知道如何使用它,这样才能够最大限度发挥它的功效,并抑制其副作用。本文将介绍最如何正确的添加和更新缓存。 开始之前 这部分将介绍在开始加缓存之前我们必须要做的事情。这步非常重要,如果没弄好,很有可能加了缓存反而不如不加。 为什么要用缓存?对于一个服务其性能瓶颈往往都在DB,传统关系型存储尤甚。我们在创建表的时候,并不会未所有的字段创建索引,这意味着如果我们需要读取非缓存数据就要从磁盘拿数据。这个过程至少需要十几毫秒的时间。而缓存往往是基于内存的,这要比DB读数据快两个数量级。这是我们用缓存的根本原因原因。 那干脆把所有的数据扔到内存不就行了嘛!不行。内存这东西虽然很快,...阅读全文

博文 2017-08-08 03:58:55 福克斯纪

[Go小技巧] 实现常用的KV缓存(有序且并发安全)

type KV struct { count int keys []string hash map[string]interface{} lock sync.RWMutex } // 添加kv键值对 func (this *KV) Set(k string, v interface{}) { this.lock.Lock() if _, ok := this.hash[k]; !ok { this.keys = append(this.keys, k) sort.Strings(this.keys) this.count++ } this.hash[k] = v this.lock.Unlock() } // 获取数据长度 func (this *KV) Count() int { this...阅读全文

博文 2016-09-02 02:00:02 henrylee2cn

疑问 没有缓存的chan在发送阻塞的时候已经把值存进去了还是在读的时候存的

```go package main import ( "fmt" "time" ) func main() { var num = 10 var p = &num c := make(chan int) go func() { time.Sleep(time.Second) c <- *p //-----> 11 //c <- num //----->10 }() time.Sleep(2 * time.Second) num++ fmt.Println(<-c) fmt.Println(p) return } ``` 为什么 *p 和num的结果不一...阅读全文

Golang负载均衡服务器goproxy

goproxy是使用golang实现的一个基本的负载均衡服务器,支持缓存(使用redis);反向代理,目前支持6种模式: 1. 随机分发; 2. IP HASH两种模式; 3. 轮询(Round Robin)法; 4. 加权轮询(Weight Round Robin)法; 5. Power of Two Choices (P2C)算法; 6. 边界一致性哈希算法(Consistent Hashing with Bounded Loads)。 另外,对转发的请求有较大的控制度,可以控制代理特定的请求,屏蔽特定的请求,甚至可以重写特定的请求。 另外,有时候项目需要用到第三方的服务并对返回的数据进行自定义修改,调用第三方的API,利用proxy server可以很容易的控制第三方...阅读全文

Go 语言编写的 Markdown 在线显示服务markdownServer

markdownServer是使用go语言编写的markown在线显示服务,其实就是扫描固定文件目录,将目录下的markdown文件解析成html在线显示,唯一的特点就是通过读写锁和tryLock实现的缓存和并发优化。 项目核心功能(解析和tryLock)完全使用第三方包,缓存和锁机制是由本人实现 **功能特性** /update接口锁,保证同时只有一个groutine在更新fileList。 缓存,除非更新,已经解析过的文件会放在缓存中,无需重复解...阅读全文

开源项目 2018-05-14 11:30:01 网友

golang 基于mysql到内存map的缓存库

# 基于mysql到内存的缓存库 ## 背景 - 很多业务上需要读取db里面的数据详情,这些数据已经存在db,会修改但不会删除,程序为了加速访问需要缓存到内存,业务上也允许内存和db 不一致,设计一个通用的dbcache 由此而来 ## 最佳实践 ``` cache := NewCache(24*time.Hour, 10*time.Minute, 10, 10, "root:test@tcp(127.0.0.1:3306)/test?parseTime=True&loc=Local&multiStatements=true&charset=utf8") c := Cri{} cache.RegisterType("cri", &c) data, err := cache.Get("1", ...阅读全文

博文 2019-09-08 15:22:34 Bulesxz

数据库访问的缓存与最大连接数

今天查看我写的错误日志,里面报出了Too many connections这个错误。没见过啊,果断去问我大哥,他说是连接数的问题。我又去看之前已经上线的我的代码,才想起来数据库连接需要设置最大连接数的。当连接数超过范围之后,就是报这个错误。 我用的是xorm作为ORM工具,直接使用engine.SetMaxConns(dbMaxConns)就能设置最大连接数。 后来,又优化了一下缓存。一般ORM还是支持缓存机制的。如果缓存命中,就不会去数据库查找数据了,而是会直接返回。添加缓存需要增加缓存时间和最大缓存数。 cacher := xorm.NewLRUCacher2(xorm.NewMemoryStore(), time.Duration(interval)*time.Second, max)...阅读全文

博文 2017-02-09 12:24:58 Bryce

Go基础学习-goroutine

Go语言核心部分就一个关键字go package main import ( "fmt" "runtime" "time" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) c := make(chan int, 10) go func() { for i := 0; i < 20; i++ { c <- i fmt.Println("write", i) } close(c) }() for v := range c { fmt.Println("read", v) time.Sleep(1 * time.Second) } } make创建chanel的时候可以指定是否有缓存,有缓存的chanel在缓冲区被填满之前是不会阻塞的...阅读全文

博文 2015-12-21 19:00:15 blueln

图解kubernetes容器运行时状态缓存数据结构

缓存和发布订阅都是后端开发中常用的手段,其中缓存主要是用于可丢失数据的暂存,发布订阅主要是用于消息传递,今天给大家介绍一个k8s中带有发布订阅的缓存实现,其目标是给定一个时间,只关注该时间后续的事件,主要是用于近实时状态数据的获取 1. 业务背景 在k8s中的kubelet中支持不同的容器运行时,为了缓存容器运行时当前所有可见的Pod/Container就构造了一个Cache结构,当一个事件发生后,kubelet接收到事件后,此时需要获取当前Pod的状态,此时要获取的状态,就必须要求是在事件产生后的最新的状态,而不能是之前的状态, 2. 核心实现 2.1 数据与订阅记录 2.1.1 状态数据 状态数据主要是存储一个pod的状态数据 type data struct { // 存储Pod的状态...阅读全文

博文 2020-02-10 14:34:17 8小时_2020

Golang实现生产者和消费者

packagemainimport("fmt""sync")//实现一个生产者和消费者/*生产者产生数据添加到通道里面,消费者消费数据从通道里面不带缓存实现*/funcmain(){ch:=make(chanint)varwgsync.WaitGroupwg.Add(2)goproducers(&wg,ch)goconsumer(&wg,ch)wg.Wait()}//生产者funcproducers(wg*sync.WaitGroup,chchanint){fori:=0;i<10;i++{fmt.Println("send:",i)ch<-i}close(ch)wg.Done()}//消费者funcconsumer(wg*sync.WaitGroup,chchanint){forv:=ra...阅读全文

博文 2017-11-01 08:04:42 dncmn

golang实现LRU缓存淘汰算法

LRU缓存淘汰算法 LRU是最近最少使用策略的缩写,是根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 双向链表实现LRU 将Cache的所有位置都用双链表连接起来,当一个位置被访问(get/put)之后,通过调整链表的指向,将该位置调整到链表头的位置,新加入的Cache直接加到链表头中。 这样,在多次操作后,最近被访问(get/put)的,就会被向链表头方向移动,而没有访问的,向链表后方移动,链表尾则表示最近最少使用的Cache。 当达到缓存容量上限时,链表的最后位置就是最少被访问的Cache,我们只需要删除链表最后的Cache便可继续添加新的Cache。 代码实现 type Node struct { Key int Value i...阅读全文

博文 2018-12-26 17:34:45 caelansar

Golang并发:无阻塞通道读写

阻塞场景 无论是有缓存通道、无缓冲通道都存在阻塞的情况。 无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景: 1)通道中无数据,但执行读通道。 2)通道中无数据,向通道写数据,但无协程读取。 有缓存通道的特点是,有缓存时可以向通道中写入数据后直接返回,缓存中有数据时可以从通道中读到数据直接返回,这时有缓存通道是不会阻塞的,它阻塞场景是: 1)通道的缓存无数据,但执行读通道。 2)通道的缓存已经占满,向通道写数据,但无协程读。 使用default实现的无阻塞通道阻塞有一个缺陷:当通道不可读或写的时候,会即可返回。实际场景,更多的需求是,我们希望尝试读一会数据,或者尝试写一会数据,如果实在没法读写再返回,程序继续做其它的事情。 使用定时器替代default可以解决这个问题,给...阅读全文

博文 2018-12-29 14:34:45 bocsoft

【go学习】go build与go install的区别

golang 的go build、go install 命令都是可生成可实行文件,了解它们的小区别以选择适合自己的。go install 和 go build 在没有参数时运行,都会在当前目录下编译,如果当前目录是软件主程序(package main)go build 会生成可实行文件放在当前目录中go install 则会把它放到 $GOPATH/bin 中。go install 还会把导入的依赖包编译到 $GOPATH/pkg,并缓存,如果包未做更改,下次编译则直接使用缓存。 go build 命令加参数 -i 也能达到go install 的效果。如果当前目录是非主包,则go install 直接把编译结果安装到 $GOPATH/pkg。如果项目很大,每次编译都要花很长时间,则建议使用...阅读全文

博文 2019-04-19 20:31:02 smile_yangyue

nginx随笔

一、nginx配合memcache缓存资源 ![image.png](https://static.studygolang.com/181031/cc1384490b85f392ba5cda304f0d5684.png) 配置实例: upstream memcacheds { server 10.1.240.166:22222; } server { listen 8080; server_name nm.ttlsa.com; index index.html index.htm index.php; root /data/wwwroot/test.ttlsa.com/webroot; location /images/ { set $memcached_key $request_uri; ...阅读全文

博文 2018-10-31 15:47:40 lobo

请教pprof 内存 heap 和 threadcreate的疑问

浏览器打开 /debug/pprof/ ![QQ截图20170714103040.jpg](http://studygolang.qiniudn.com/170714/3aae3c803c96074705cf8d0d7ad183e0.jpg) 这个heap 显示的 4073 这个数值具体有什么意义,单位是什么,代表了什么? 点这个 heap 连接,进去之后 ![10.jpg](http://studygolang.qiniudn.com/170714/3d1b60e6d99e1858d1e5554b8a8bf836.jpg) 尝试把4073 和这里面的数值对上,没对上 这张图里面的数值 1: 57344 大概了解到 57344 代表1个objects 占用...阅读全文

记录一次缓存设计

缓存设计的意义 当我们在设计系统时,项目的初期一般不会考虑缓存的设计,理由大致是一开始业务增长缓慢,不会有太多的请求量,系统的负载问题没有那么突出。当业务不断增长,服务端请求量激增导致系统对底层存储(SQL or NoSQL等)读写数据压力增加,这时我们缓存的接入就十分必要。一方面缓存可以是in memory的一块存储空间,在单点的服务上缓存获取到请求及对应的响应(当然一套分布式的同步机制也是可以的,这里略过);另外缓存可以是第三方的内存存储,如Redis,通过redis提供的各类数据string、set、hashmap、zset等来缓存需要的数据。 缓存的接入可以有效的保护请求穿透,减轻对底层DB的压力(这里分库分表不合理或者业务存储不分离,很可能是灾难式的全站崩溃);同时对于用户的体验可...阅读全文

Golang 实现LRU算法

缓存文件置换机制是计算机处理缓存存储器的一种机制。 计算机存储器空间的大小固定,无法容纳服务器上所有的文件,所以当有新的文件要被置换入缓存时,必须根据一定的原则来取代掉适当的文件。此原则即所谓缓存文件置换机制。 缓存文件置换方法有: 先进先出算法(FIFO):最先进入的内容作为替换对象 最近最少使用算法(LFU):最近最少使用的内容作为替换对象 最久未使用算法(LRU):最久没有访问的内容作为替换对象 非最近使用算法(NMRU):在最近没有使用的内容中随机选择一个作为替换对象 type Lru struct { max int l *list.List Call func(key interface{}, value interface{}) cache map[interface{}]*l...阅读全文

博文 2019-08-29 11:33:03 howie_矜暮

【CDN 最佳实践】CDN缓存策略解读和配置策略

摘要: CDN 作为内容分发网络主要是将资源缓存在 CDN 节点上,然后后续访问即可直接通过 CDN 节点将资源返回给客户端,而不再需要回到源站服务器以加快请求速度。那么 CDN 到底对于哪些请求加速呢?其缓存规则和缓存时间是怎么样的呢?怎么样的缓存规则更加合理呢?本文就对 CDN 的缓存规则解读。 CDN 的缓存适用范围 CDN 对于常见的 HTTP 请求均是支持的,具体对不同请求方式的支持情况请参考表一。但是有一点需要注意的是虽然对这些类型的 HTTP 请求均是支持的,但是并不是对所有请求方式都会进行缓存的。 CDN 仅会对于 GET 请求进行缓存,而对于其他的请求均不进行缓存,仅是起到中间代理、转发的功能。因此我们建议添加 CDN 的站点源站最好能够实现动静分离。将动态请求...阅读全文

问个游览器缓存问题

~~~ 用户中心URL都是验证session存在不 ,不存在返回登录页面 如果此时程序重启了,当再次访问URL,URL就会自动退出【此时游览器也记录了缓存】,当重新登录 这个页面始终无法访问,必须清理本地缓存才行,, 这个如何解决不让进游览器缓存? 是不是要设置头文件之类的 ~~...阅读全文

golang 文件操作

golang 文件操作 获取文件大小 "path/filepath" import ( "path/filepath" ) func GetFileSize(filename string) int64 { var size int 64 filepath.Walk(filename, func(path string, f os.FileInfo, err error) error { if err != nil{ return err }else{ result = f.size(); return nil } }) return result; } 读取文件 import ( "fmt" "os" ) func ReadFile(){ filePath := './data.json'...阅读全文

博文 2019-08-23 10:33:03 直立猿

golang并发----sync.Pool

sync.Pool 对象缓存 对象获取 尝试从私有对象获取(私有对象是协程安全的) 私有对象不存在 尝试从当前Processor的共享池获取(共享池是协程不安全 需要锁) 如果当前Processor共享池是空的 那么尝试去其他Processor的共享池获取 如果所有子池都是空的 最后使用用户指定的New()函数产生一个新的对象返回 对象放回 如果私有对象不存在则保存为私有对象 如果私有对象存在 放入当前Processor子池的共享池中 对象的声明周期 GC会清除sync.Pool缓存的对象 对象的缓存有效期为下一次GC之前 func main() { var wg sync.WaitGroup pool := &sync.Pool{ New: func() interface{} { fmt...阅读全文

博文 2019-12-07 06:32:44

golang自动缓存-对缓存策略的补充方案

缓存的目的都是为了减少跟数据库的直接交互,提高可用性。常用的方法如,对热点数据缓存、对部分数据预加载、对频繁操作的数据放到缓存中操作等等。 在开发的过程中,我尝试了一种自动处理缓存的方法,记录下,以供参考。 在业务代码,和ORM之间,引入一个模块(SaSql)。将对于数据库的操作,分为单行操作、list操作,即读写单条记录,和读写多条记录。 以list为例: SaSql获取list数据时,优先从缓存拿,没有则通过ORM从数据库拿。核心代码示意如下: //读取缓存 cacheParams := &map[string]string{} if ignoreCache == false { saData.Merge(cacheParams, pk) saData.Merge(cacheParams...阅读全文

博文 2020-03-17 09:32:49 saxon134

[Go - Note] Channel 阻塞deadlock和panic情况,以及close channel

阻塞: 发生一直阻塞时,会报如下deadlock错误: fatal error: all goroutines are asleep - deadlock! 无缓存channel: 通道中无数据,但执行读通道。 通道中无数据,向通道写数据,但无协程读取。 有缓存channel: 通道的缓存无数据,但执行读通道。 通道的缓存已经占满,向通道写数据,但无协程读。 Panic: 1.向已经关闭的channel写。2.关闭已经关闭的channel。 close channel: You needn't close every channel when you've finished with it.It's only necessary to close a channel when it is i...阅读全文

博文 2020-02-20 20:32:39 Arboat