0%

memcache入门

memcached是一种相对于redis较为简单的缓存方式。最近几天用了一下,再次记录。

安装

1
2
3
4
5
6
# 安装memcached
$ brew install memcached
# 查看帮助
$ memcached -h
# 会给出memcached命令的选项以及版本
# 例如我的输出了memcached 1.5.9

运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 使用前台的方式运行
# -p表示指定端口号11211,-m表示创建的内存大小为64MB
# -vv very verbose (also print client commands/responses)
# 非常冗长(打印客户端命令/响应)
$ memcached -p 11211 -m 64m -vv
# 使用后台的方式运行
# -d, --daemon run as a daemon
# 作为守护进程运行
$ memcached -p 11211 -m 64m -d
# 可以通过查看端口的方式来查看该进程是否已经启动
$ lsof -i:11211
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 67723 xuan 17u IPv6 0x8aba4e23ffb80867 0t0 TCP *:11211 (LISTEN)
memcached 67723 xuan 18u IPv4 0x8aba4e2417031bef 0t0 TCP *:11211 (LISTEN)

连接

使用Telnet进行连接

1
2
3
4
5
6
7
$ telnet 127.0.0.1 11211
# 连接进去之后,就可以开始操作了
# 例如使用最简单的get命令来进行查询
# 当然现在的memcached是什么也没有的
$ get key
# 命令行上会直接打印一行END
END

查看memcached的运行状态

这个参考的大佬的博客如何查看你的 memcached 的状态

go语言操作memcached

go使用memcached需要第三方的驱动库,这里有一个库是memcached作者亲自实现的,可以通过go get进行安装

1
go get github.com/bradfitz/gomemcache/memcache

这里放一下该库的链接
对于如何使用可以看下面这个例子

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package main

import (
"fmt"
"github.com/bradfitz/gomemcache/memcache"
)

var (
server = "127.0.0.1:11211"
)

func main() {
//create a handle
mc := memcache.New(server)
if mc == nil {
fmt.Println("memcache New failed")
}

//set key-value
mc.Set(&memcache.Item{Key: "foo", Value: []byte("my value")})

//get key's value
it, _ := mc.Get("foo")
if string(it.Key) == "foo" {
fmt.Println("value is ", string(it.Value))
} else {
fmt.Println("Get failed")
}
///Add a new key-value
mc.Add(&memcache.Item{Key: "foo", Value: []byte("bluegogo")})
it, err := mc.Get("foo")
if err != nil {
fmt.Println("Add failed")
} else {
if string(it.Key) == "foo" {
fmt.Println("Add value is ", string(it.Value))
} else {
fmt.Println("Get failed")
}
}
//replace a key's value
mc.Replace(&memcache.Item{Key: "foo", Value: []byte("mobike")})
it, err = mc.Get("foo")
if err != nil {
fmt.Println("Replace failed")
} else {
if string(it.Key) == "foo" {
fmt.Println("Replace value is ", string(it.Value))
} else {
fmt.Println("Replace failed")
}
}
//delete an exist key
err = mc.Delete("foo")
if err != nil {
fmt.Println("Delete failed:", err.Error())
}
//incrby
err = mc.Set(&memcache.Item{Key: "aaa", Value: []byte("1")})
if err != nil {
fmt.Println("Set failed :", err.Error())
}
it, err = mc.Get("foo")
if err != nil {
fmt.Println("Get failed ", err.Error())
} else {
fmt.Println("src value is:", it.Value)
}
value, err := mc.Increment("aaa", 7)
if err != nil {
fmt.Println("Increment failed")
} else {
fmt.Println("after increment the value is :", value)
}
//decrby
value, err = mc.Decrement("aaa", 4)
if err != nil {
fmt.Println("Decrement failed", err.Error())
} else {
fmt.Println("after decrement the value is ", value)
}
}

参考资料

听说好看的人都关注了我的公众号《泫言》