当前位置:网站首页>Go 使用mencached缓存
Go 使用mencached缓存
2022-07-30 05:51:00 【行人已】
1、mencached 介绍(以下简称mem)
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性
Memcached 官网:https://memcached.org/
github地址 :https://github.com/memcached/memcached/wiki/Install
2、使用mem之前需要先安装服务端
windows安装服务端的话去搜一下,我测试用的时候是ubuntu的
2.1 ubuntu安装mem服务端
1/本地包索引
sudo apt update
2/安装官方包
sudo apt install memcached
3/安装libmemcached-tools ,这是一个提供多种工具来与Memcached服务器配合使用的库
sudo apt install libmemcached-tools
4/这个时候应该是自己启动了,可以用命令查看一下
memcached
或者
service memcached status
或者
lsof -i :11211
5/查看端口是否存在
netstat -ntlp
----
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 18846/memcached
6/重启和停止使用命令
service memcached start
service memcached restart
service memcached stop
2.2 ubuntu修改mem配置文件
1/ 使用 which memcached 查看安装目录:一般都在 /usr/bin/memcached
2/ 配置文件目录在: /etc/
vim /etc/memcached.conf
要检查接口设置,请在文件中找到以下行:
-l 127.0.0.1
3、Go 整合mem (相当于前面的准备是服务端,现在需要使用它了)
我使用的 gin 来测试缓存的,大部分都一样,有些包就自己下载,也可以看我之前写的gin整合
3.1、目录结构
go-cashe
├─ main.go
├─ memcached
│ └─ mem.go
└─ README.md
3.2、主要代码:mem.go
其中常用的代码我都写上去了,不满足需求的话可以自己去网上搜索一下
package memcached
import (
"fmt"
"github.com/bradfitz/gomemcache/memcache"
)
//这里可以写多个,用逗号分隔
var mc = memcache.New("你的ip:11211")
//set 和add 方法的区别
// 如果要设置的key不存在时,则set方法与add方法的效果一致
// 如果要设置的key已经存在时,则set方法与replace方法效果一样
//增加缓存 Set方法
func SetMemCasheKey(key string, value string) bool {
s := &memcache.Item{
Key: key,
Value: []byte(value),
Flags: 0, //应该是多个服务器地址是否能相互获取的意思
Expiration: 100, //过期时间 秒为单位
}
err := mc.Set(s)
if err != nil {
fmt.Printf("错误: %s", err.Error())
return false
}
return true
}
//增加缓存 add方法
func SetMemCasheAdd(key string, value string) bool {
s := &memcache.Item{
Key: key,
Value: []byte(value),
Flags: 0, //应该是多个服务器地址是否能相互获取的意思
Expiration: 100, //过期时间
}
err := mc.Add(s)
if err != nil {
return false
}
return true
}
//获取Key
func GetMemCasheValueString(key string) string {
item, err := mc.Get(key)
if err != nil {
return ""
}
fmt.Println("获取的key :" + item.Key)
return string(item.Value)
}
//替换缓存的值
func ReplaceMemCasheValue(key string, value string) bool {
s := &memcache.Item{
Key: key,
Value: []byte(value),
Flags: 0,
Expiration: 100,
}
err := mc.Replace(s)
if err != nil {
return false
}
return true
}
//删除key
func DeleteMemCasheValue(key string) bool {
if mc.Delete(key) != nil {
return false
}
return true
}
//删除全部
func DeleteMemCasheAll() {
mc.DeleteAll()
}
3.3、主要代码:main.go
package main
import (
"fmt"
"net/http"
"strom-huang-go/go-cashe/memcached"
"github.com/gin-gonic/gin"
)
func main() {
//测试memcache缓存
r := gin.Default()
r.GET("/memCashe/:uid", func(c *gin.Context) {
uid := c.Param("uid")
s := memcached.GetMemCasheValueString(uid)
if len(s) > 0 {
fmt.Println("缓存有值---" + s)
} else {
memcached.SetMemCasheKey(uid, "hello")
s = "hello"
}
c.JSON(http.StatusOK, gin.H{
"message": s,
})
})
r.Run("127.0.0.1:8080")
}
4、简单测试结果
go run main.go 后控制台输出
浏览器输入:
http://127.0.0.1:8080/memCashe/123
5、补充一个小知识
go run -race main.go
-race 參數是 go 的 Race Detector,內建整合工具,可以輕鬆檢查出是否有 race condition
5、文档代码地址
https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go.git —go-cashe目录
边栏推荐
- node.js中实现对数据库的链式操作
- export , export default, import complete usage
- Bull: remove common characters
- 万能js时间日期格式转换
- 向量的导数运算和向量叉乘以及点乘的导数运算
- New material under the plastic restriction order - polylactic acid (PLA)
- 从追赶到超越,国产软件大显身手
- MySQL master-slave replication configuration construction, one step in place
- Swagger使用方式,告别postman
- 引导过程与服务控制
猜你喜欢
B站崩了,如果是你是那晚负责的开发人员你会怎么做?
Playing script killing with AI: actually more involved than me
export , export default,import完整用法
prometheus-Federation机制配置
空间顶点到平面的距离计算的证明及其源码
MYSQL下载及安装完整教程
引导过程与服务控制
Network Protocol 03 - Routing and NAT
How does Redis prevent oversold and inventory deduction operations?
Data types of Redis6
随机推荐
云服务器零基础部署网站(保姆级教程)
uniapp中canvas与v-if更“配”
舒尔补(schur completement)
进程和计划任务管理
首届人工智能安全大赛正式启动
深度学习:线性回归模型
向量叉乘的几何意义及其模的计算
The introduction of AI meta-learning into neuroscience, the medical effect is expected to improve accurately
删除openstack中的僵尸实例
numpy 多维数组ndarray的详解
Test Development Engineer Growth Diary 001 - Some Introduction to Agile Testing, CI/CD/CT, DecOps
What new materials are used in the large aircraft C919?
The Geometric Meaning of Vector Cross Product and the Calculation of Modulus
Software Testing Terminology - Scenario Testing
搭建vsftpd服务并实现本地用户访问
新人误删数据,组长巧用MySQL主从复制延迟挽回损失
Required request body is missing 问题解决
The first artificial intelligence safety competition officially launched
Derivative Operations on Vectors and Derivative Operations on Vector Cross and Dot Products
[硬核干货]由0到1,突破信息系统项目管理师(呕心沥血经验之谈)!!!