一、Redis 的类型
值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
二、Redis 字符串
Redis 字符串数据类型的相关命令用于管理 redis 字符串值。
基本语法:
查看所有的 key: keys *
普通设置: set key value
设置并加过期时间: set key value EX 30 表示 30 秒后过期
获取数据: get key
删除指定数据: del key
删除全部数据: flushall
查看类型: type key
设置过期时间: expire key 20 表示指定的 key 20 秒后过期
三、Redis 列表
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或
者尾部(右边)
基本语法:
列表右侧增加值: rpush key value
列表左侧增加值: lpush key value
右侧删除值: rpop key
左侧删除值: lpop key
获取数据: lrange key
删除指定数据: del key
删除全部数据: flushall
查看类型: type key
四、Redis 集合
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数
据。**它和列表的最主要区别就是没法增加重复值 **
基本语法:
给集合增数据: sadd key value
删除集合中的一个值: srem key value
获取数据: smembers key
删除指定数据: del key
删除全部数据:
五、Redis 哈希
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
基本语法:
设置值 hmset : hmset zhangsan name "张三" age 20 sex “男” 设置值
hset : hset zhangsan name "张三"
获取数据: hgetall key
删除指定数据: del key
删除全部数据: flushall
六、Golang 操作 redis
模块:https://github.com/go-redis/redis
文档:https://redis.uptrace.dev/
一、连接 redis
go get github.com/go-redis/redis/v8
import "github.com/go-redis/redis/v8"
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
//Go1.7 加入了一个新的标准库 context,它定义了 Context 类型,专门用来简化 对于处理
//单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
//测试是否连接成功
_, err := rdb.Ping(ctx).Result()
if err != nil {
fmt.Println("redis 数据库连接失败")
}
}
二、操作 redis
1、设置获取字符串
//设置
err = rdb.Set(ctx, "username", "zhangsan", 0).Err()
if err != nil {
panic(err)
}
//获取
username, _ := rdb.Get(ctx, "username").Result()
fmt.Println(username)
2、设置获取列表(List)
//设置
db.LPush(ctx, "hobby", "吃饭", "睡觉")
rdb.RPush(ctx, "hobby", "写代码", "打篮球")
//获取
hoddy, _ := rdb.LRange(ctx, "hobby", 0, -1).Result()
fmt.Println(hoddy)
3、设置获取集合(Sets)
//设置
rdb.SAdd(ctx, "hobby", "吃饭", "睡觉")
rdb.SAdd(ctx, "hoddy", "吃饭")
//获取
hoddy, _ := rdb.SMembers(ctx, "hobby").Result()
fmt.Println(hoddy)
4、设置哈希值
err2 := rdb.HMSet(ctx, "userinfo", map[string]interface{}{
"username": "张三",
"age": 20,
}).Err()
if err2 != nil {
fmt.Println(err2)
}
userinfo, err := rdb.HGetAll(ctx, "userinfo").Result()
fmt.Println(userinfo, err)
fmt.Println(userinfo["age"])
5、设置过期时间
rdb.Expire(ctx, "hobby", time.Second*20).Result()
七、 Redis 分布式架构订阅发布
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1
之间的关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客
户端:
go func() {
time.Sleep(time.Second * 2)
//发布
rdb.Publish(ctx, "server0", "this is a message")
}()
pubsub := rdb.Subscribe(ctx, "server0")
ch := pubsub.Channel()
for msg := range ch {
fmt.Println(msg.Channel, msg.Payload)
}