Redis 支持多种数据结构,包括:

1. 字符串(String):可以存储字符串、整数或浮点数。常用于缓存、计数器、分布式锁等场景。

2. 哈希(Hash):键值对的集合,键和值都是字符串。适用于存储对象信息。

3. 列表(List):按照插入顺序排序的字符串元素列表。可用于消息队列、排行榜等。

4. 集合(Set):无序且唯一的字符串集合。常用于去重、交集、并集等操作。

5. 有序集合(Sorted Set):每个元素都关联一个分数,元素按照分数排序。适用于排行榜、带权重的元素存储等。

这些数据结构使得 Redis 在不同的应用场景中能够高效地存储和操作数据。

以下是 Java 和 Go 语言中操作 Redis 常见数据结构的示例代码:

Java 示例(使用 Jedis 库)

import redis.clients.jedis.Jedis;

public class RedisExample {
    public static void main(String[] args) {
        // 连接 Redis 服务器
        Jedis jedis = new Jedis("localhost", 6379);

        // 字符串操作
        jedis.set("key1", "value1");
        String value = jedis.get("key1");
        System.out.println("String: " + value);

        // 哈希操作
        jedis.hset("user:1", "name", "Alice");
        jedis.hset("user:1", "age", "25");
        String name = jedis.hget("user:1", "name");
        System.out.println("Hash: " + name);

        // 列表操作
        jedis.lpush("list1", "item1");
        jedis.lpush("list1", "item2");
        String item = jedis.lpop("list1");
        System.out.println("List: " + item);

        // 集合操作
        jedis.sadd("set1", "element1");
        jedis.sadd("set1", "element2");
        boolean exists = jedis.sismember("set1", "element1");
        System.out.println("Set: " + exists);

        // 有序集合操作
        jedis.zadd("sortedSet1", 10, "member1");
        jedis.zadd("sortedSet1", 20, "member2");
        Double score = jedis.zscore("sortedSet1", "member1");
        System.out.println("Sorted Set: " + score);

        // 关闭连接
        jedis.close();
    }
}

Go 示例(使用 github.com/go-redis/redis 库)

package main

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

func main() {
    // 连接 Redis 服务器
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "",
        DB:       0,
    })

    // 字符串操作
    err := client.Set("key1", "value1", 0).Err()
    if err!= nil {
        panic(err)
    }
    value, err := client.Get("key1").Result()
    if err!= nil {
        panic(err)
    }
    fmt.Println("String: ", value)

    // 哈希操作
    err = client.HSet("user:1", "name", "Alice").Err()
    if err!= nil {
        panic(err)
    }
    name, err := client.HGet("user:1", "name").Result()
    if err!= nil {
        panic(err)
    }
    fmt.Println("Hash: ", name)

    // 列表操作
    err = client.LPush("list1", "item1").Err()
    if err!= nil {
        panic(err)
    }
    item, err := client.LPop("list1").Result()
    if err!= nil {
        panic(err)
    }
    fmt.Println("List: ", item)

    // 集合操作
    err = client.SAdd("set1", "element1").Err()
    if err!= nil {
        panic(err)
    }
    exists, err := client.SIsMember("set1", "element1").Result()
    if err!= nil {
        panic(err)
    }
    fmt.Println("Set: ", exists)

    // 有序集合操作
    err = client.ZAdd("sortedSet1", redis.Z{Score: 10, Member: "member1"}).Err()
    if err!= nil {
        panic(err)
    }
    score, err := client.ZScore("sortedSet1", "member1").Result()
    if err!= nil {
        panic(err)
    }
    fmt.Println("Sorted Set: ", score)

    // 关闭连接
    err = client.Close()
    if err!= nil {
        panic(err)
    }
}

请注意,运行上述代码前需要确保已经安装了相应的依赖并且 Redis 服务器正在运行。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐