golang Redis的使用

1、Redis的介绍

1)Redis:REmote DIctionary Server(远程字典服务器),是NoSQL数据库,不睡传统的关系型数据库。Redis性能非常高,单机能够达到15w qps,通常适合做缓存,也可以持久化。

官网:https://redis.io/

快速进行命令查找: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程序一样发送指令操作程序。

golang Redis的使用

 

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

上一篇:Day24 阶段总结


下一篇:通过Python中的JayDeBeApi JDBC连接到DB2