Redis 3:基本命令

1. 键命令

键命令用于管理 Redis 中的键。

常用命令
  • DEL key:删除一个键。
  • EXISTS key:检查键是否存在。
  • EXPIRE key seconds:设置键的过期时间。
  • TTL key:获取键的剩余生存时间。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Set key
    rdb.Set(ctx, "mykey", "myvalue", 0)

    // Check if key exists
    exists, _ := rdb.Exists(ctx, "mykey").Result()
    fmt.Println("Key exists:", exists)

    // Set key expiration
    rdb.Expire(ctx, "mykey", 10)

    // Get TTL
    ttl, _ := rdb.TTL(ctx, "mykey").Result()
    fmt.Println("TTL:", ttl)
}

2. 字符串命令

字符串命令用于操作 Redis 的字符串类型。

常用命令
  • GET key:获取键的值。
  • SET key value:设置键的值。
  • INCR key:将键的值递增1。
  • APPEND key value:在键的值后追加数据。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Set key
    rdb.Set(ctx, "mykey", "myvalue", 0)

    // Get key
    val, _ := rdb.Get(ctx, "mykey").Result()
    fmt.Println("Value:", val)

    // Increment key
    rdb.Set(ctx, "counter", 10, 0)
    rdb.Incr(ctx, "counter")
    counter, _ := rdb.Get(ctx, "counter").Result()
    fmt.Println("Counter:", counter)

    // Append to key
    rdb.Append(ctx, "mykey", "append")
    val, _ = rdb.Get(ctx, "mykey").Result()
    fmt.Println("Appended value:", val)
}

3. 列表命令

列表命令用于操作 Redis 的列表类型。

常用命令
  • LPUSH key value:在列表头部插入一个元素。
  • RPUSH key value:在列表尾部插入一个元素。
  • LPOP key:移除并返回列表的头元素。
  • RPOP key:移除并返回列表的尾元素。
  • LRANGE key start stop:获取列表的部分元素。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Push elements to list
    rdb.LPush(ctx, "mylist", "value1")
    rdb.RPush(ctx, "mylist", "value2")

    // Pop elements from list
    lpop, _ := rdb.LPop(ctx, "mylist").Result()
    fmt.Println("LPOP:", lpop)
    rpop, _ := rdb.RPop(ctx, "mylist").Result()
    fmt.Println("RPOP:", rpop)

    // Get range of elements from list
    rdb.LPush(ctx, "mylist", "value1", "value2", "value3")
    values, _ := rdb.LRange(ctx, "mylist", 0, -1).Result()
    fmt.Println("List values:", values)
}

4. 集合命令

集合命令用于操作 Redis 的集合类型。

常用命令
  • SADD key value:向集合中添加一个元素。
  • SREM key value:从集合中移除一个元素。
  • SMEMBERS key:返回集合中的所有元素。
  • SISMEMBER key value:检查元素是否在集合中。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Add elements to set
    rdb.SAdd(ctx, "myset", "value1")
    rdb.SAdd(ctx, "myset", "value2")

    // Remove element from set
    rdb.SRem(ctx, "myset", "value1")

    // Get all elements in set
    members, _ := rdb.SMembers(ctx, "myset").Result()
    fmt.Println("Set members:", members)

    // Check if value is in set
    isMember, _ := rdb.SIsMember(ctx, "myset", "value2").Result()
    fmt.Println("Is value2 in set:", isMember)
}

5. 有序集合命令

有序集合命令用于操作 Redis 的有序集合类型。

常用命令
  • ZADD key score value:向有序集合中添加一个元素及其分数。
  • ZREM key value:从有序集合中移除一个元素。
  • ZRANGE key start stop:按索引范围返回有序集合中的元素。
  • ZSCORE key value:返回元素的分数。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Add elements to sorted set
    rdb.ZAdd(ctx, "myzset", &redis.Z{Score: 1, Member: "value1"})
    rdb.ZAdd(ctx, "myzset", &redis.Z{Score: 2, Member: "value2"})

    // Remove element from sorted set
    rdb.ZRem(ctx, "myzset", "value1")

    // Get elements in range
    values, _ := rdb.ZRange(ctx, "myzset", 0, -1).Result()
    fmt.Println("Sorted set values:", values)

    // Get score of element
    score, _ := rdb.ZScore(ctx, "myzset", "value2").Result()
    fmt.Println("Score of value2:", score)
}

6. 哈希命令

哈希命令用于操作 Redis 的哈希类型。

常用命令
  • HSET key field value:设置哈希字段的值。
  • HGET key field:获取哈希字段的值。
  • HDEL key field:删除哈希字段。
  • HGETALL key:获取哈希中的所有字段和值。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Set hash fields
    rdb.HSet(ctx, "myhash", "field1", "value1")
    rdb.HSet(ctx, "myhash", "field2", "value2")

    // Get hash field
    val, _ := rdb.HGet(ctx, "myhash", "field1").Result()
    fmt.Println("Field1 value:", val)

    // Get all fields and values in hash
    allFields, _ := rdb.HGetAll(ctx, "myhash").Result()
    fmt.Println("All fields and values:", allFields)

    // Delete hash field
    rdb.HDel(ctx, "myhash", "field1")
}

7. 事务命令

Redis 事务通过 MULTI, EXEC, DISCARD 和 WATCH 命令实现。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Start a transaction
    err := rdb.Watch(ctx, func(tx *redis.Tx) error {
        _, err := tx.TxPipelined(ctx, func(pipe redis.Pipeliner) error {
            pipe.Set(ctx, "key", "value", 0)
            pipe.Incr(ctx, "counter")
            return nil
        })
        return err
    }, "key", "counter")

    if err != nil {
        fmt.Println("Transaction failed:", err)
    } else {
        fmt.Println("Transaction succeeded")
    }
}

8. 脚本命令

Redis 脚本使用 Lua 语言编写,允许在服务器端执行脚本。

常用命令
  • EVAL script numkeys key [key ...] arg [arg ...]:执行 Lua 脚本。
  • EVALSHA sha1 numkeys key [key ...] arg [arg ...]:通过哈希执行 Lua 脚本。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Lua script to increment a key and return new value
    script := "return redis.call('INCR', KEYS[1])"
    val, err := rdb.Eval(ctx, script, []string{"counter"}).Result()
    if err != nil {
        fmt.Println("Script error:", err)
    } else {
        fmt.Println("New counter value:", val)
    }
}

9. 连接命令

连接命令用于管理与 Redis 服务器的连接。

常用命令
  • PING:检查服务是否运行。
  • AUTH password:认证连接。
  • SELECT index:切换数据库。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Ping server
    pong, err := rdb.Ping(ctx).Result()
    if err != nil {
        fmt.Println("Ping error:", err)
    } else {
        fmt.Println("Ping response:", pong)
    }

    // Authenticate (if needed)
    // err = rdb.Auth(ctx, "yourpassword").Err()
    // if err != nil {
    //     fmt.Println("Auth error:", err)
    // }

    // Select database
    err = rdb.Select(ctx, 1).Err()
    if err != nil {
        fmt.Println("Select DB error:", err)
    }
}

10. 服务器命令

服务器命令用于管理和监控 Redis 服务器。

常用命令
  • INFO:获取服务器信息和统计。
  • CONFIG GET parameter:获取服务器配置。
  • CONFIG SET parameter value:设置服务器配置。
  • FLUSHDB:清空当前数据库。
  • FLUSHALL:清空所有数据库。

Go 代码示例:

package main

import (
    "fmt"
    "github.com/go-redis/redis/v8"
    "context"
)

func main() {
    ctx := context.Background()
    rdb := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    // Get server info
    info, err := rdb.Info(ctx).Result()
    if err != nil {
        fmt.Println("Info error:", err)
    } else {
        fmt.Println("Server info:", info)
    }

    // Flush current database
    err = rdb.FlushDB(ctx).Err()
    if err != nil {
        fmt.Println("FlushDB error:", err)
    } else {
        fmt.Println("Database flushed")
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风不归Alkaid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值