开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:Go 操作 Redis(hash 类型)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9794
Go 操作 Redis(hash 类型)
内容介绍
一、操作 Hash
二、案例一
三、案例二
四、命令操作文档
五、给数据设置有效时间
六、操作 List
七、作业
一、操作 Hash
说明:通过 Golang 对 Redis 操作 Hash 数据类型
_,
err
=
c.Do("HSet",
"user01”,"name",“汤姆")
//按照 hash 的形式向括号里面填写信息
//Hset 给 user01 赋一个值 ,多个赋值需要用 Hmset
//这里需要根据 name 对应的类型来使用 redis.xxx 的方法
//如果存放的是 int 则应当使用 redis.Int(),看相关手册
r,
err := redis.string(c.Do("HGet", "usero1","name))
二、案例一
对 hash 数据结构, field-val 是一个一个放入和读取
创建文件夹 mian.go
func main() {
//通过 go 向 redis 写入数据和读取数据
//1.链接到 redis
conn, err :=redis.Dial(
“
tcp
”
,
“
127.0.0.1:6379
”
)
If err !=nil {
fmt.Println(
“
redis.Dial err=
”
, err)
return
}
defer conn.Close()
//关闭..
//2. 通过 go 向redis写入数据 string [key-val]
_, err = conn.Do(
“
Hset
”
,
“
user01
”
,
“
name
”
,
“
john
”
)
if err != nil{
fmt.Println(
“
conn succ...
”
, conn)
return
}
_, err = conn.Do(
“
Hset
”
,
“
user01
”
,
“
age
”
, 18)
if err != nil{
fmt.Println(
“
conn succ...
”
, conn)
return
}
//3. 通过go 向redis读取数据 string [key-val]
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
}
//因为返回的 r 是 interface{ }
//因为 name 对应的值是 string ,因此我们需要转换
//nameString := r.(string)
fmt.Println(
“
操作ok r1=%v r2=%v \n
”
, r1 , r2)
}
cd..
cd..
cd redisdemo02
go run main
cd main
go run main.go
操作ok r1=john r2=18
get user01 name
hget user01 name
“
john
”
getall user01
<1>
”
name
”
<2>
”
john
”
<3>
”
age
”
<4>
”
18
”
三、案例二
对 hash 数据结构,field-val 是批量放入和读取
1.说明:通过 Golang 对 Redis 操作,一次操作可以 set/Get 多个 key-val 数据
核心代码:
_,
err
=
c.Do("MSet", "name","尚硅谷","address","北京昌平~") r,err:=redis
.
Strings(c.Do("MGet","name", "address"))
for_
,
v
:=range
r{
fmt.PrintIn(v)
}
2.新建一个文件 main2.go
演示 hash 批量操作
func main() {
//通过 go 向 redis 写入数据和读取数据
//1.链接到 redis
conn, err :=redis.Dial(
“
tcp
”
,
“
127.0.0.1:6379
”
)
If err !=nil {
fmt.Println(
“
redis.Dial err=
”
, err)
return
}
defer conn.Close()
//关闭..
//2. 通过 go 向 redis 写入数据 string [key-val]
_, err = conn.Do(
“
HMset
”
,
“
user02
”
,
“
name
”
,
“
john
”
“
age
”
,19)
if err != nil{
fmt.Println(
“
conn succ...
”
, conn)
return
}
//3. 通过 go 向 redis 读取数据 string [key-val]
r1, err := redis.Strings(conn.Do(
“
HMGet
”
,
“
user02
”
,
“
name
”
,
”
age
”
))
if err != nil{
fmt.Println(
“
hget err=.
”
, err)
return
}
fmt.Printf(
“
r=%v\n
”
,r)
}
cd..
cd main2
go run main.go
r=[john 19]
改为:
for i, v := range r {
fmt.Printf(
“
r[%d]=%s
”
, i, v)
}
四、命令操作文档
通过使用 Conn 接口中的 do 方法执行 redis 命令,redis 命令大全参考: http://docredisfans.com/
go 中发送与响应对应类型:
Do 函数会必要时将参数转化为二进制字符串
五、给数据设置有效时间
1. 说明:
通过 Golang 对 Redis 操作, 给 key-value 设置有效时间
2. 核心代码:
//给 name 数据设置有效时间为10s
_, err = conn.Do("expire","name", 10)
六、操作List
说明:通过 Golang 对 Redis 操作 List 数据类核心代码:
_, err =c.Do("lpush","heroList","no1:宋江", 30,"no2:卢俊义",28)
r, err := redis.String(c.Do("rpop", "heroLi ist"))
七、作业
1.要求
Monster 信息[name,age,skill]
通过终端输入三个 monster 的信息,使用 gola ang 操作 redis 存放到 redis 中
【比如使用 hash 数据类型】
编程,遍历出所有的 monster 信息,并显示右在终端
提示,保存 monster 可以使用 hash 数据类型 遍历时先取出所有的 keys
比如
keys monster*
2.要求
(1)记录用户浏览商品信息, 比如保存商品名
(2)编写一个函数,可以取出某个用户最近浏览的10个商品名
(3)提示:考虑使用 list 数据类型