Redis 是一个高性能的开源内存数据库,常用于缓存、消息队列、会话存储等场景。它支持多种数据结构(如字符串、哈希、列表、集合、有序集合等)和丰富的操作命令,具有极高的性能和灵活性。
以下是 Redis 的基础知识、安装、常用命令,以及在 Go 中使用 Redis 的方法。
go语言官方编程指南:https://pkg.go.dev/stdopen in new window
go语言的官方文档学习笔记很全,推荐去官网学习
30天学会Go–第7天 GO语言 Redis 学习与实践(改):30天学会Go–第7天 GO语言 Redis 学习与实践(改)
本章讲redis有所欠缺,请移步新的blog
30天学会Go–第6天 GO语言 RESTful API 学习与实践:30天学会Go–第6天 GO语言 RESTful API 学习与实践-CSDN博客
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
src/redis-server
redis-server.exe
启动服务。docker pull redis
docker run -d --name redis -p 6379:6379 redis
连接 Redis:
redis-cli
设置键值对:
SET key value
获取键值:
GET key
删除键:
DEL key
检查键是否存在:
EXISTS key
设置过期时间(秒):
EXPIRE key seconds
查看剩余过期时间:
TTL key
增加值(适用于数值类型):
INCR key
INCRBY key increment
DECR key
DECRBY key decrement
HSET key field value
HGET key field
HGETALL key
从左插入元素:
LPUSH key value1 value2
从右插入元素:
RPUSH key value1 value2
获取列表范围内的元素:
LRANGE key start stop
弹出最左边的元素:
LPOP key
SADD key member1 member2
SMEMBERS key
SISMEMBER key member
ZADD key score1 member1 score2 member2
ZRANGE key start stop WITHSCORES
在 Go 中使用 Redis,通常使用第三方库 go-redis。
运行以下命令安装:
go get github.com/redis/go-redis/v9
以下是一个简单的示例,展示如何在 Go 中使用 Redis。
package main
import (
"context"
"fmt"
"github.com/redis/go-redis/v9"
)
var ctx = context.Background()
func main() {
// 1. 连接到 Redis
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis 地址
Password: "", // 如果没有设置密码,留空
DB: 0, // 使用默认数据库
})
// 2. 写入数据
err := rdb.Set(ctx, "key", "value", 0).Err()
if err != nil {
panic(err)
}
// 3. 读取数据
val, err := rdb.Get(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println("key:", val)
// 4. 检查键是否存在
exists, err := rdb.Exists(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println("key exists:", exists)
// 5. 删除键
err = rdb.Del(ctx, "key").Err()
if err != nil {
panic(err)
}
fmt.Println("key deleted")
}
连接 Redis:
redis.NewClient
创建 Redis 客户端。写入数据:
Set
方法写入键值对。0
表示不过期。读取数据:
Get
方法读取键的值。检查键是否存在:
Exists
方法检查键是否存在。删除键:
Del
方法删除键。Redis 支持发布/订阅模式,可以实现消息广播。
// 发布消息
rdb.Publish(ctx, "channel1", "Hello, Redis!").Err()
// 订阅消息
sub := rdb.Subscribe(ctx, "channel1")
ch := sub.Channel()
for msg := range ch {
fmt.Println("Received message:", msg.Payload)
}
Redis 的原子操作可以用来实现分布式锁。
// 加锁
ok, err := rdb.SetNX(ctx, "lock_key", "lock_value", 10*time.Second).Result()
if err != nil || !ok {
fmt.Println("Failed to acquire lock")
return
}
// 执行业务逻辑
fmt.Println("Lock acquired, executing task...")
// 解锁
rdb.Del(ctx, "lock_key")
Redis 是一个功能强大且灵活的内存数据库,在 Go 中使用 Redis 非常简单。通过学习 Redis 的基本命令和在 Go 中的集成,你可以轻松实现缓存、消息队列、分布式锁等功能。