73_74-Golang 操作 Redis 数据库、Redis 订阅发布

本文详细介绍了Redis的各种数据类型,如字符串、列表、集合和哈希,并展示了如何在Golang中使用go-redis模块连接和操作Redis,包括设置过期时间和发布/订阅功能的示例。
摘要由CSDN通过智能技术生成

一、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
之间的关系:
image.png

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客
户端:

image.png

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)
}
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值