码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Go 使用 freecache 缓存


    1、freecache 介绍(以下简称free)

    用于 Go 的缓存库,具有零 GC 开销和高并发性能, 厉不厉害?

    2、 free 获取

    git官网: https://github.com/coocood/freecache
    golang 获取:go get -u github.com/coocood/freecache
    个人觉得比较好的文档:(不得不说大佬就是写得好)
    https://juejin.cn/post/7072121084136882183
    https://cdmana.com/2022/03/202203071328243883.html

    3、golang 整合 free

      go-cashe
      ├─ .vscode
      │ └─ launch.json
      ├─ freecache
      │ └─ free.go
      ├─ main.go
      ├─ README-free.md

        3.1、主要代码 (free.go)

        
        import (
        	"github.com/coocood/freecache"
        )
        
        //初始化Cache
        // freecache.NewCacheCustomTimer(100*1024*1024, freecache.NewCachedTimer()) 这种方式也可以
        var cache = freecache.NewCache(100 * 1024 * 1024)
        
        //定一个 model struct
        type FreeCasheModel struct {
        	Key           []byte
        	Value         []byte
        	ExpireSeconds int //过期时间-s
        }
        
        //Get
        func FreeGet(free FreeCasheModel) (string, bool) {
        	value, err := cache.Get(free.Key)
        	if err != nil {
        		return "", false
        	}
        	return string(value), true
        }
        
        //GetOrSet
        //如果没有就存入新的key
        func FreeCacheGetOrSet(free FreeCasheModel) (string, bool) {
        	retValue, err := cache.GetOrSet(free.Key, free.Value, free.ExpireSeconds)
        	if err != nil {
        		return "", false
        	}
        	return string(retValue), true
        }
        
        //Set
        func FreeCacheSet(free FreeCasheModel) bool {
        	err := cache.Set(free.Key, free.Value, free.ExpireSeconds)
        	if err != nil {
        		return false
        	}
        	return true
        }
        
        //SetAndGet
        func FreeCacheSetAndGet(free FreeCasheModel) (string, bool) {
        	retValue, found, err := cache.SetAndGet(free.Key, free.Value, free.ExpireSeconds)
        	if err != nil {
        		return "", false
        	}
        	return string(retValue), found
        }
        
        //更新key的过期时间--如果这个key不存在会返回错误
        func FreeChasheTouch(free FreeCasheModel) bool {
        	err := cache.Touch(free.Key, free.ExpireSeconds)
        	if err != nil {
        		return false
        	}
        	return true
        }
        
        //删除---
        func FreeCasheDel(free FreeCasheModel) bool {
        	return cache.Del(free.Key)
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49
        • 50
        • 51
        • 52
        • 53
        • 54
        • 55
        • 56
        • 57
        • 58
        • 59
        • 60
        • 61
        • 62
        • 63
        • 64
        • 65
        • 66

        4、简单测试

        在这里插入图片描述

        5、补充说明

        1、代码看起来很简单,但是要多看源码多看文档是怎么实现的
        2、 如果要测试性能问题老师们可以自己去测试,这里只是简单的实现一下
        3、 上篇文档我写了memcached的缓存,我觉得这个更简单一些,但是应用场景是不一样的, memcached主要是分布式循环,多个项目可以同时去访问,free更适合单项目,并发高访问量多的。

        6、文档代码地址

        https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go.git —go-cashe目录

      • 相关阅读:
        如何在centos上安装nvidia docker
        <图像处理> Fast角点检测
        Zip密码忘记了,如何破解密码?
        【香橙派-OpenCV-Torch-dlib】TF损坏变成RAW格式解决方案及python环境配置
        toB应用私有化交付发展历程、技术对比和选型
        【Asesprite】快速自制Tileset瓦片地图集(俯视角)
        Python | 刷题笔记
        信锐(SUNDRAY)无线控制器wifi无线上网短信认证设置流程
        解决checkbox设置数字无法展示的错误
        【设计模式】观察者模式
      • 原文地址:https://blog.csdn.net/bei_FengBoby/article/details/126017061
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号