1)Redis:REmote DIctionary Server(远程字典服务器),是NoSQL数据库,不睡传统的关系型数据库。Redis性能非常高,单机能够达到15w qps,通常适合做缓存,也可以持久化。
官网:https://redis.io/
快速进行命令查找:Redis 命令参考 — Redis 命令参考
2)Redis五大数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、zset(sorted set:有序集合)
安装教程可以看这里,都是下载即可使用的:Redis 安装 | 菜鸟教程
Redis下载的文件里有redis-server.exe和redis-cli.exe两个核心文件,redis-server.exe用来启用redis,redis-cli-exe同样可以和go程序一样发送指令操作程序。
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
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() }
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