Golang 操作 Redis:如何设置 key 的过期时间 - go-redis 使用指南

文章目录

在上一篇 《Golang 操作 Redis:基础的字符串键值操作 - go-redis 使用指南》 文章中,我们介绍了如何使用 go-redis 库中的各种字符串命令来操作 Redis 中的键值对。在 Redis 中,设置 key 的过期时间是管理数据生命周期的重要手段。过期时间控制了数据何时被自动删除,这对于缓存数据、会话信息以及临时数据存储非常有用。本篇文章将详细讲解 Redis 中与过期时间相关的命令,并展示如何在 Golang 中使用 go-redis 实现这些操作。

👉 点击查看《go-redis使用指南》系列文章目录

在《go-redis使用指南》系列文章中,我们将详细介绍如何在 Golang 项目中使用 redis/go-redis 库与 Redis 进行交互。以下是该系列文章的全部内容:

  1. Golang 操作 Redis:快速上手 - go-redis 使用指南
  2. Golang 操作 Redis:连接设置与参数详解 - go-redis 使用指南
  3. Golang 操作 Redis:基础的字符串键值操作 - go-redis 使用指南
  4. Golang 操作 Redis:如何设置 key 的过期时间 - go-redis 使用指南
  5. Golang 操作 Redis:Hash 哈希数据类型操作用法 - go-redis 使用指南
  6. Golang 操作 Redis:Set 集合数据类型操作用法 - go-redis 使用指南
  7. Golang 操作 Redis:为 Hash 中的字段设置过期时间 - go-redis 使用指南
  8. Golang 操作 Redis:List 列表数据类型操作用法 - go-redis 使用指南
  9. Golang 操作 Redis:SortedSet 有序集合数据类型操作用法 - go-redis 使用指南
  10. Golang 操作 Redis:bitmap 数据类型操作用法 - go-redis 使用指南
  11. Golang 操作 Redis:事务处理操作用法 - go-redis 使用指南
  12. Golang 操作 Redis:地理空间数据类型操作用法 - go-redis 使用指南
  13. Golang 操作 Redis:HyperLogLog 操作用法 - go-redis 使用指南
  14. Golang 操作 Redis:Pipeline 操作用法 - go-redis 使用指南
  15. Golang 操作 Redis:PubSub发布订阅用法 - go-redis 使用指南
  16. Golang 操作 Redis:布隆过滤器(Bloom Filter)操作用法 - go-redis 使用指南
  17. Golang 操作 Redis:Cuckoo Filter操作用法 - go-redis 使用指南
  18. Golang 操作 Redis:Stream操作用法 - go-redis 使用指南
golang redis go-redis教程

Redis 过期时间命令

Redis 提供了一些命令来设置和管理 key 的过期时间。下面是常用的过期时间相关命令及其用法:

EXPIRE 命令

EXPIRE key seconds:设置指定 key 的过期时间(以秒为单位)。

示例:

EXPIRE mykey 60

上述命令将 mykey 的过期时间设置为 60 秒。

PEXPIRE 命令

PEXPIRE key milliseconds:设置指定 key 的过期时间(以毫秒为单位)。

示例:

PEXPIRE mykey 60000

该命令将 mykey 的过期时间设置为 60,000 毫秒(即 60 秒)。

EXPIREAT 命令

EXPIREAT key timestamp:设置指定 key 的过期时间到具体的 UNIX 时间戳(以秒为单位)。

示例:

EXPIREAT mykey 1700000000

此命令将 mykey 的过期时间设置为 UNIX 时间戳 1700000000。

PEXPIREAT 命令

PEXPIREAT key milliseconds-timestamp:设置指定 key 的过期时间到具体的 UNIX 时间戳(以毫秒为单位)。

示例:

PEXPIREAT mykey 1700000000000

该命令将 mykey 的过期时间设置为 UNIX 时间戳 1700000000000。

TTL 命令

TTL key:获取指定 key 的剩余过期时间(以秒为单位)。如果 key 不存在或没有设置过期时间,返回 -1。

示例:

TTL mykey

PTTL 命令

PTTL key:获取指定 key 的剩余过期时间(以毫秒为单位)。如果 key 不存在或没有设置过期时间,返回 -1。

示例:

PTTL mykey

PERSIST 命令

PERSIST key:移除指定 key 的过期时间,使其持久化。如果 key 不存在或没有设置过期时间,返回 0。

示例:

PERSIST mykey

Golang 中使用 go-redis 设置过期时间

使用 go-redis 库操作 Redis 中的 key 过期时间十分简单。以下是如何在 Golang 中使用 go-redis 库实现上述 Redis 命令的示例。

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "github.com/redis/go-redis/v9"
)

var ctx = context.Background()

func main() {
    // 创建 Redis 客户端
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // 设置 key 的过期时间为 60 秒
    err := rdb.Set(ctx, "mykey", "value", 60*time.Second).Err()
    if err != nil {
        log.Fatalf("Error setting key: %v", err)
    }

    // 获取 key 的剩余过期时间
    ttl, err := rdb.TTL(ctx, "mykey").Result()
    if err != nil {
        log.Fatalf("Error getting TTL: %v", err)
    }
    fmt.Printf("TTL: %v\n", ttl)

    // 立即设置 key 的过期时间到未来的时间戳
    futureTimestamp := time.Now().Add(10 * time.Minute).Unix()
    err = rdb.ExpireAt(ctx, "mykey", time.Unix(futureTimestamp, 0)).Err()
    if err != nil {
        log.Fatalf("Error setting expire at: %v", err)
    }

    // 移除 key 的过期时间
    err = rdb.Persist(ctx, "mykey").Err()
    if err != nil {
        log.Fatalf("Error persisting key: %v", err)
    }

    // 获取 key 的剩余过期时间
    ttl, err = rdb.TTL(ctx, "mykey").Result()
    if err != nil {
        log.Fatalf("Error getting TTL: %v", err)
    }
    fmt.Printf("Updated TTL: %v\n", ttl)
}

实际开发中的注意事项

在实际开发中,处理 Redis key 的过期时间时可能会遇到一些问题和陷阱:

时间单位混淆

确保你使用正确的时间单位(秒或毫秒)来设置过期时间。例如,EXPIRE 使用秒,而 PEXPIRE 使用毫秒。在 go-redis 中,time.Second 和 time.Millisecond 都是明确的时间单位。

Key 不存在

如果设置过期时间的 key 不存在,Redis 将不会返回错误,但也不会设置过期时间。确保在设置过期时间之前 key 已经存在。

过期时间与持久化

使用 PERSIST 命令可以移除 key 的过期时间,使其成为持久化 key。如果你希望 key 始终存在,请在需要时使用 PERSIST。

使用合适的过期策略

过期策略的选择取决于实际需求。例如,EXPIREAT 可以设置精确到某个时间点的过期时间,而 EXPIRE 和 PEXPIRE 是相对时间。在处理高并发和大数据量的场景时,选择适合的策略可以提高系统的稳定性和性能。

结语

本文介绍了 Redis 中设置和管理 key 过期时间的常用命令,并提供了在 Golang 中使用 go-redis 库实现这些操作的示例。理解这些命令及其使用场景有助于你在开发中更好地控制数据的生命周期和有效性。

希望这篇文章对你有所帮助!点击 go-redis 使用指南 可查看更多相关教程!


也可以看看