1.redis是NoSQL数据库,不是传统的关系型db
REmote DIctionary Server
性能很强。单机能达到15w qps
通常是适合做缓存,也可以持久化
基于内存运行,并支持持久化,也称为数据结构服务器
2.下载后直接解压,会得到server.exe and cli.exe
下载地址 双击运行,不需要安装
3.使用基础
先打开server.exe
再打开cli.exe
指令参考
redisdoc.com
4.redis默认有16个数据库 0-15 默认用0号库
5.用
flushdb 清空db
flushall 清空16个库
6.string
最基本的类型,一个key对应一个value
是二进制安全的,除了放文本,还能放图片等。
string value 最大是512M
设置时无法正常显示中文
大概是电脑默认用gbk编码。但是不影响程序使用
set【如果存在就是修改,不存在就是添加】/get/del
setex设置存在时间(s)
mset、mget一次操作多个值
7.Hash
redis hash是一个string类型的field和value的映射表
适合用于存储对象
使用hset、hget
查hgetall 删hdel
hmset、hmget、hlen、hexists
8.list
是简单的字符串列表。按照插入顺序排序。可以添加元素到头部或尾部本质是一个链表,元素有序,元素的值可以重复!
crud指令:
lpush/rpush/lrange/lpop/rpop/del
lrange key start stop
以0表示第一个,以此类推,也可以用-1表示最右边的元素,-2表示倒数第二个……
lindex llen
如果值全部移除,对应的key也消失了
9.set
string类型的无序集合。元素的值不能重复
crud:
sadd、smembers、sismember、srem
10.安装第三方的开源redis库
redis库
在GOPATH路径下执行安装指令:Install Redigo using the “go get” command:
go get github.com/gomodule/redigo
注意:安装前,确保已经安装并配置了git
执行过后可以看到,src下多了一个github.com的文件
这就算是装完了
11.安装配置git
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
1)安装git,配置路径
Git 各平台安装包下载地址为:http://git-scm.com/downloads 当前版本(2.28.0) 64-bit version of Git for Windows
默认是vim做text editor,说是推荐换成别的,那我就换成vscode吧
一路next过去2)安装后,配置git的环境变量Path
添加一个xxx\Git\bin
3)测试
到GOPATH执行
结果如下
GOPATH>git --version
git version 2.28.0.windows.1
12.go连接到redis
package main
import (
"fmt"
"github.com/gomodule/redigo/redis"
)
func main() {
//通过go向redis写读数据
//连接到redis
conn, err := redis.Dial("tcp",
"localhost:6379")
if err != nil {
fmt.Println("redis.Dial err =", err)
return
}
fmt.Println("conn success", conn)
}
13.go添加获取redis中的string
//通过go向redis写读数据
//连接到redis
conn, err := redis.Dial("tcp",
"localhost:6379")
if err != nil {
fmt.Println("redis.Dial err =", err)
return
}
defer conn.Close() //及时关闭
//写入数据
_, err = conn.Do("Set", "name", "丸子")
if err != nil {
fmt.Println("set err =", err)
return
}
//读取数据
// 返回一个接口r要转成对应的类型
r, err := redis.String(conn.Do("Get", "name"))
if err != nil {
fmt.Println("get err =", err)
return
}
fmt.Println(r)
fmt.Println("do ok")
14.操作hash
一个一个放
conn, err := redis.Dial("tcp",
"localhost:6379")
if err != nil {
fmt.Println("redis.Dial err =", err)
return
}
defer conn.Close() //及时关闭
//写入数据
_, err = conn.Do("HSet", "user01", "name", "丸子")
if err != nil {
fmt.Println("hset err =", err)
return
}
_, err = conn.Do("HSet", "user01", "age", 15)
if err != nil {
fmt.Println("hset err =", err)
return
}
//读取数据
// 返回一个接口r要转成对应的类型
r1, err := redis.String(conn.Do("HGet", "user01", "name"))
if err != nil {
fmt.Println("hget err =", err)
return
}
r2, err := redis.Int(conn.Do("HGet", "user01", "age"))
if err != nil {
fmt.Println("hget err =", err)
return
}
fmt.Printf("r1 = %v\nr2 = %v\n", r1, r2)
15.批量操作hash
conn, err := redis.Dial("tcp",
"localhost:6379")
if err != nil {
fmt.Println("redis.Dial err =", err)
return
}
defer conn.Close() //及时关闭
//写入数据
_, err = conn.Do("HMSet", "user02", "name", "John",
"age", 33)
if err != nil {
fmt.Println("hmset err =", err)
return
}
//读取数据
// 返回一个接口r要转成对应的类型
r, err := redis.Strings(conn.Do("HMGet", "user02", "name", "age"))
if err != nil {
fmt.Println("hmget err =", err)
return
}
fmt.Printf("r = %v\n", r)
for i, v := range r {
fmt.Printf("r[%d] = %v\n", i, v)
}
16.go还可以通过redis连接池操作redis
可以节省临时获取redis连接的时间
//定义一个全局的pool
var pool *redis.Pool
//启动程序时 初始化pool
func init() {
pool = &redis.Pool{
MaxIdle: 8, // 最大空闲连接
MaxActive: 0, //最大连接数 0为无限制
IdleTimeout: 100, //最大空闲时间
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp",
"localhost:6379")
},
}
}
func main() {
//从pool中取出一个连接
conn := pool.Get()
defer conn.Close()
_, err := conn.Do("Set", "name", "Xiaox")
if err != nil {
fmt.Println("do error,", err)
}
r, err := redis.String(conn.Do("Get", "name"))
if err != nil {
fmt.Println("do error,", err)
}
fmt.Println(r)
}