1、Redis的介绍
1)Redis:REmote DIctionary Server(远程字典服务器),是NoSQL数据库,不睡传统的关系型数据库。Redis性能非常高,单机能够达到15w qps,通常适合做缓存,也可以持久化。
快速进行命令查找:Redis 命令参考 — Redis 命令参考
2)Redis五大数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、zset(sorted set:有序集合)
2、Redis的安装
安装教程可以看这里,都是下载即可使用的:Redis 安装 | 菜鸟教程
Redis下载的文件里有redis-server.exe和redis-cli.exe两个核心文件,redis-server.exe用来启用redis,redis-cli-exe同样可以和go程序一样发送指令操作程序。
3、Golang操作Redis
1)安装
golang操作redis的客户端包有多个比如redigo、go-redis,github上Star最多的莫属redigo。
引用第三方库 github.com/garyburd/redigo/redis (需安装git)
go get github.com/garyburd/redigo/redis
文档:redis package - github.com/garyburd/redigo/redis - pkg.go.dev
2)连接
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("connect redis failed,", err)
return
}
defer conn.Close()
}
3)使用
string类型
conn.Do("Set", "name", "lff")
//这里返回的r是interface{},需要用redis.String转换为string类型
r, _ := redis.String(conn.Do("Get", "name"))
哈希类型
conn.Do("HSet", "user01", "name", "张三")
conn.Do("HSet", "user01", "age", 18)
r1, _ := redis.String(conn.Do("HGet", "user01", "name"))
r2, _ := redis.Int(conn.Do("HGet", "user01", "age"))
fmt.Println(r1, r2)
设置过期时间
_, err = conn.Do("expire", "name", 10) //10秒过期
if err != nil {
fmt.Println("set expire error: ", err)
return
}
批量Set/Get
conn.Do("HMSet", "user01", "name", "张三", "age", 18)
r, _ := redis.Strings(conn.Do("HMGet", "user01", "name", "age"))
删除
_, err = conn.Do("DEL", "name")
if err != nil {
fmt.Println("redis delelte failed:", err)
}
判断是否存在
is_key_exit, err := redis.Bool(conn.Do("EXISTS", "mykey1"))
管道
请求/响应服务可以实现持续处理新请求,即使客户端没有准备好读取旧响应。这样客户端可以发送多个命令到服务器而无需等待响应,最后在一次读取多个响应。这就是管道化(pipelining),这个技术在多年就被广泛使用了。距离,很多POP3协议实现已经支持此特性,显著加速了从服务器下载新邮件的过程。
连接支持使用Send(),Flush(),Receive()方法支持管道化操作
Send向连接的输出缓冲中写入命令。
Flush将连接的输出缓冲清空并写入服务器端。
Recevie按照FIFO顺序依次读取服务器的响应。
conn.Send("SET", "foo", "bar")
conn.Send("GET", "foo")
conn.Flush()
conn.Receive() // reply from SET
v, err = conn.Receive() // reply from GET