go gomemcache包源码分析
因为beego中的cache模块中的子模块memcached引用了这个包,所以也对这包的源码进行分析了下。花了一定的时间编写整理这篇博客,这个包一共两个文件,源码文件。
关于memcache学习,可以到http://www.runoob.com/memcached/memcached-tutorial.html这边教程学习
1)func New(server ...string) *Client
用法:
mc := memcache.New("127.0.0.1:11211")
主要可以分为以下步骤:
1、传入一个合法的memcached服务器地址信息
2、定义变量和赋值
New方法流程图如下,点击下载
2)func (c Client) Add(item Item) error
作用:
mc := memcache.New("127.0.0.1:11211")
mc.Add(&memcache.Item{Key:"data",Value:[]byte("你好!")})
主要可以分为以下步骤:
1、选择一个memcache服务器并获取连接
2、发送数据到memcached服务器
3、接收memcached信息和处理连接
Add方法流程图如下,点击下载
3)func (c Client) Set(item Item) error
用法:
mc := memcache.New("127.0.0.1:11211")
mc.Set(&memcache.Item{Key:"data",Value:[]byte("你好!")})
主要分为以下步骤:
1、选择一个memcached服务器并进行连接
2、向连接的那个memcached服务器发送数据并处理相关内容
3、连接处理(回收或释放)
Set方法流程图如下,点击下载
4)func (c Client) Get(key string) (item Item, err error)
用法:
mc := memcache.New("127.0.0.1:11211")
i, err := mc.Get("data")
fmt.Println(i, err)
主要可分为三个步骤
1:获取tcp连接
2:发送数据到memcached
3:处理memcached返回消息和tcp连接处理(放入回收池或释放)
Get方法流程图如下,点击下载
5)func (c Client) GetMulti(keys []string) (map[string]Item, error)
用法:
mc := memcache.New("127.0.0.1:11211")
items, err := mc.GetMulti([]string{"data1","data2","data3"})
主要可分为三个步骤
1:获取tcp连接
2:发送数据到memcached
3:处理memcached返回消息和tcp连接处理(放入回收池或释放)
GetMulti方法流程图如下,点击下载
6)func (c *Client) Increment(key string, delta uint64) (newValue uint64, err error)
用法:
mc := memcache.New("127.0.0.1:11211")
newVal, err := mc.Increment("test", 2)
fmt.Println(newVal, err)
作用:将原来键的值加上指定数,可分为以下两种情况:
1、如果原来的是一个数字,则加上指定数,返回修改后的值和nil
2、如果原来的不是一个数,则返回0和报错信息
内部执行步骤:
1、连接memcached服务器
2、发送数据到memcached服务器
3、断开连接,对连接进行回收或释放
Delete方法流程图如下,点击下载
7)func (c *Client) Decrement(key string, delta uint64) (newValue uint64, err error)
用法:
mc := memcache.New("127.0.0.1:11211")
newVal, err := mc.Decrement("test", 2)
fmt.Println(newVal, err)
作用:将原来键的值减去指定数,可分为以下两种情况:
1、如果原来的是一个数字,则减去指定数,返回修改后的值和nil
2、如果原来的不是一个数,则返回0和报错信息
Decrement方法流程图如下,点击下载
8)func (c Client) CompareAndSwap(item Item) error
用法:
mc := memcache.New("127.0.0.1:11211")
mc.CompareAndSwap(&memcache.Item{Key:"data",
Value:[]byte("你好!")})
封装发给memcached服务器的命令是:cas data 0 0 9 0
主要分为以下步骤:
1、选择一个memcached服务器地址并进行连接
2、向memcached服务器发送数据和处理服务器返回的信息
3、连接结束处理(回收或释放)
CompareAndSwap方法流程图如下,[点击下载]
(https://github.com/laijinhang/go-gomemcache-study/blob/master/CompareAndSwap方法.odg)
9)func (c *Client) FlushAll() error
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.FlushAll()
用于清理缓存中的所有 key=>value(键=>值) 对
主要可以分为以下步骤:
1、往每个memcached服务器发送数据和接收处理memcached信息
2、和处理连接
FlushAll方法流程图如下,点击下载
10)func (c *Client) Replace() error
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.Replace()
发送replace命令到mecmached服务器,该命令用于替换已存在的
key(键)的value(数据值)。
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。
主要可以分为以下步骤:
1、往每个memcached服务器发送数据和接收处理memcached信息
2、和处理连接
Replace方法流程图如下,点击下载
11)func (c *Client) Touch(key string, seconds int32) (err error)
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.Touch("data", 120)
发送touch命令到mecmached服务器,如果key不存在,则会返回错误,
如果key存在,则会在设置的时间后自动删除。
主要可以分为以下步骤:
1、获取服务器地址操作
2、往每个memcached服务器发送数据和接收处理memcached信息
3、连接处理(回收或释放)
Touch方法流程图如下,点击下载
12)func (c *Client) Delete(key string) error
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.Delete("test")
将原有key对应的内容删除
主要可以分为以下步骤:
1、获取连接
2、发送数据到memcached服务器
3、接收memcached信息和处理连接
Delete方法流程图如下,点击下载
13)func (c *Client) DeleteAll() error
用法:
mc := memcache.New("127.0.0.1:11211")
err := mc.DeleteAll()
将内容删除
(和Delete共用一套实现代码)
主要可以分为以下步骤:
1、获取连接
2、发送数据到memcached服务器
3、接收memcached信息和处理连接
DeleteAll方法流程图如下,点击下载
相关链接:
源码链接:https://github.com/laijinhang/gomemcache
笔记链接:https://github.com/laijinhang/go-gomemcache-study

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Zabbix4.0 for PostgreSQL (上篇):基础环境的搭建部署
概述 Zabbix大家都很熟悉,一般的是使用MySQL作为存储库来使用的,而我看使用手册上是使用postgresql也是可以的,所以就做了一次基于pg的zabbix搭建测试,记录下来,分享给大家 Server端配置 配置PG环境 安装好pg,且在root和postgres下都配置好pg的环境变量,以供后续使用 在hba控制文件中直接加入这一行 host zabbix zabbix 192.168.0.0/24 trust host all all 127.0.0.1/32 md5 配置apache 创建user [root@Zabbix_GW_TEST opt]# adduser apache 准备好安装包并解压 [root@Zabbix_GW_TEST opt]# ls httpd-2.4.37.tar.gz httpd-2.4.37.tar.gz [root@Zabbix_GW_TEST opt]# tar -xvzf httpd-2.4.37.tar.gz 编译安装 执行编译命令 [root@Zabbix_GW_TEST httpd-2.4.37]# ./configure --...
- 下一篇
[ERROR] Result: { execute timeout }异常解决
阿里云ToolKit插件使用异常记录 ToolKit插件配置如下 RUN运行返回异常结果: [ERROR] Target Deploy ECS: { 172.18.*.* / 47.107.*.* } [ERROR] Command: { sh /home/service.sh service-* } [ERROR] Result: { execute timeout } [ERROR] Finished at: null 根据插件返回的异常内容分析得知是我们的service.sh脚本执行超时。 脚本内容如下 经检查脚本内并无可能造成死循环的可能。 服务器本地手动运行脚本测试如下 脚本运行正常,服务正常启动。但是脚本返回结果时输出了nohup: redirecting stderr to stdout后并未直接退至新的命令行。由此我们怀疑是noh
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果