redis的常见数据类型和应用场景(非八股)------大总结(学了要会用-------教你如何使用)

Redis的数据类型

Redis 提供了丰富的数据类型,常见的有五种:

String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。

应用场景:学了如何用?

请看下面解析:
1. String(字符串):
应用场景: 存储单一值,例如计数器;

格式:

格式:SET key value
示例:SET username john_doe

常见命令:

// 设置字符串值
jedis.set("key", "value");

// 获取字符串值
String result = jedis.get("key");
//递增计数器:
INCR key

String如何实现计数器?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;

// 定义一个名为 CounterExample 的 Java 类
public class CounterExample {

    // 主程序入口
    public static void main(String[] args) {
        // 创建 Jedis 对象,连接到本地 Redis 服务
        Jedis jedis = new Jedis("localhost", 6379);

        // 指定计数器的键名
        String counterKey = "pageviews:homepage";

        // 模拟每次访问主页时调用计数器
        incrementCounter(jedis, counterKey);
        incrementCounter(jedis, counterKey);
        incrementCounter(jedis, counterKey);

        // 获取当前计数器的值
        long pageviews = getCounterValue(jedis, counterKey);
        System.out.println("Pageviews: " + pageviews);

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

    // 定义一个方法,使用 INCR 命令递增计数器
    private static void incrementCounter(Jedis jedis, String counterKey) {
        jedis.incr(counterKey);
    }

    // 定义一个方法,获取计数器的值
    private static long getCounterValue(Jedis jedis, String counterKey) {
        // 通过键名获取计数器的值(返回字符串形式)
        String counterValue = jedis.get(counterKey);
        // 将字符串形式的计数器值转换为 long 类型
        return Long.parseLong(counterValue);
    }
}

2、Hash(哈希)

格式:

格式:HSET key field value
示例:HSET user:1001 username john_doe

应用场景: 存储对象属性:用户信息存储。

将每个用户的信息存储为一个 Hash,其中 Hash 的键是用户ID,字段是用户属性(如用户名、邮箱、年龄等),值是对应的属性值。

HSET user:1001 username john_doe
HSET user:1001 email [email protected]
HSET user:1001 age 25

Java代码:

// 设置哈希字段值
jedis.hset("hashKey", "field1", "value1");

// 获取哈希字段值
String result = jedis.hget("hashKey", "field1");

// 获取所有哈希字段值
Map allFields = jedis.hgetAll("hashKey");

Hash如何实现存储对象属性?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;

// 定义一个名为 HashExample 的 Java 类
public class HashExample {

    // 主程序入口
    public static void main(String[] args) {
        // 创建 Jedis 对象,连接到本地 Redis 服务
        Jedis jedis = new Jedis("localhost", 6379);

        // 指定哈希的键名
        String hashKey = "user:1001";

        // 模拟存储用户对象属性
        setHashField(jedis, hashKey, "username", "john_doe");
        setHashField(jedis, hashKey, "email", "[email protected]");

        // 获取用户对象的所有属性
        Map userAttributes = getHashFields(jedis, hashKey);
        System.out.println("User Attributes: " + userAttributes);

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

    // 定义一个方法,设置哈希字段值
    private static void setHashField(Jedis jedis, String hashKey, String field, String value) {
        jedis.hset(hashKey, field, value);
    }

    // 定义一个方法,获取哈希字段值
    private static Map getHashFields(Jedis jedis, String hashKey) {
        // 通过键名获取哈希的所有字段值
        return jedis.hgetAll(hashKey);
    }
}

3、List(列表)

List 类型常用命令:

//从左边插入元素:
LPUSH key element
//从右边弹出元素:
RPOP key
//获取列表范围元素:
LRANGE key start stop

应用场景:存储一系列有序的元素,适用于队列、栈等场景。

Java代码:

// 在列表左侧插入元素
jedis.lpush("tasks", "Task 1");
jedis.lpush("tasks", "Task 2");

// 获取列表所有元素
List<String> allTasks = jedis.lrange("tasks", 0, -1);
System.out.println("All Tasks: " + allTasks);

List 如何实现存储有序元素?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;

// 定义一个名为 ListExample 的 Java 类
public class ListExample {

    // 主程序入口
    public static void main(String[] args) {
        // 创建 Jedis 对象,连接到本地 Redis 服务
        Jedis jedis = new Jedis("localhost", 6379);

        // 指定列表的键名
        String listKey = "tasks";

        // 模拟任务队列操作
        pushTask(jedis, listKey, "Task 3");
        pushTask(jedis, listKey, "Task 4");
        popTask(jedis, listKey);

        // 获取所有任务
        List<String> allTasks = getAllTasks(jedis, listKey);
        System.out.println("All Tasks: " + allTasks);

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

    // 定义一个方法,左侧插入任务
    private static void pushTask(Jedis jedis, String listKey, String task) {
        jedis.lpush(listKey, task);
    }

    // 定义一个方法,右侧弹出任务
    private static void popTask(Jedis jedis, String listKey) {
        jedis.rpop(listKey);
    }

    // 定义一个方法,获取所有任务
    private static List<String> getAllTasks(Jedis jedis, String listKey) {
        // 获取列表的所有元素
        return jedis.lrange(listKey, 0, -1);
    }
}

在这个示例中,LPUSH命令用于在列表左侧插入新任务,RPOP命令用于右侧弹出已完成的任务。通过这些操作,我们可以实现一个简单的任务队列。

Set(集合)

常见命令:

//添加元素到集合:
SADD key member
//获取集合所有成员:
SMEMBERS key
//计算集合大小:
SCARD key

**应用场景:**存储不重复的元素,适用于需要确保元素唯一性的场景:模拟一个社交网络系统中用户的关注列表,使用集合存储用户关注的其他用户。

SADD following:user1 user2 user3

Java代码:

// 将元素添加到集合
jedis.sadd("following:user1", "user2", "user3");

// 获取集合所有元素
Set followingList = jedis.smembers("following:user1");
System.out.println("Following List: " + followingList);

SET 如何实现存储不重复元素?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;

import java.util.Set;

// 定义一个名为 SetExample 的 Java 类
public class SetExample {

    // 主程序入口
    public static void main(String[] args) {
        // 创建 Jedis 对象,连接到本地 Redis 服务
        Jedis jedis = new Jedis("localhost", 6379);

        // 指定集合的键名
        String setKey = "following:user1";

        // 模拟用户关注操作
        addUserToFollowing(jedis, setKey, "user2");
        addUserToFollowing(jedis, setKey, "user3");

        // 获取用户关注列表
        Set followingList = getUserFollowing(jedis, setKey);
        System.out.println("Following List: " + followingList);

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

    // 定义一个方法,将用户添加到关注列表
    private static void addUserToFollowing(Jedis jedis, String setKey, String user) {
        jedis.sadd(setKey, user);
    }

    // 定义一个方法,获取用户关注列表
    private static Set getUserFollowing(Jedis jedis, String setKey) {
        // 获取集合的所有元素
        return jedis.smembers(setKey);
    }
}

在这个示例中,SADD命令用于将元素添加到集合,确保集合中的元素是唯一的。通过这些操作,我们可以实现一个用户的关注列表,保证每个用户只能关注其他用户一次。

5、Zset(有序集合)

Zset 类型常用命令:

添加元素到有序集合:
ZADD key score member
获取有序集合的排名:
ZRANK key member
获取有序集合范围元素:
ZRANGE key start stop

**应用场景:**存储带有分数的元素,适用于需要按照分数排序的场景:模拟一个在线排行榜

模拟一个在线排行榜,使用有序集合存储用户分数,并通过分数从高到低排列:

ZADD leaderboard 100 user1 150 user2 80 user3

Java代码:

// 将带有分数的元素添加到有序集合
jedis.zadd("leaderboard", 100, "user1");
jedis.zadd("leaderboard", 150, "user2");
jedis.zadd("leaderboard", 80, "user3");

// 获取有序集合的排行榜
Set leaderboard = jedis.zrevrange("leaderboard", 0, -1);
System.out.println("Leaderboard: " + leaderboard);

ZSET 如何实现存储带有分数的元素?

// 导入 Jedis 类库,用于与 Redis 交互
import redis.clients.jedis.Jedis;

import java.util.Set;

// 定义一个名为 ZSetExample 的 Java 类
public class ZSetExample {

    // 主程序入口
    public static void main(String[] args) {
        // 创建 Jedis 对象,连接到本地 Redis 服务
        Jedis jedis = new Jedis("localhost", 6379);

        // 指定有序集合的键名
        String zsetKey = "leaderboard";

        // 模拟在线排行榜操作
        addUserScore(jedis, zsetKey, "user1", 100);
        addUserScore(jedis, zsetKey, "user2", 150);
        addUserScore(jedis, zsetKey, "user3", 80);

        // 获取在线排行榜
        Set leaderboard = getLeaderboard(jedis, zsetKey);
        System.out.println("Leaderboard: " + leaderboard);

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

    // 定义一个方法,添加带有分数的元素到有序集合
    private static void addUserScore(Jedis jedis, String zsetKey, String user, double score) {
        jedis.zadd(zsetKey, score, user);
    }

    // 定义一个方法,获取有序集合的排行榜
    private static Set getLeaderboard(Jedis jedis, String zsetKey) {
        // 获取有序集合按照分数从高到低的排行榜
        return jedis.zrevrange(zsetKey, 0, -1);
      //   0:起始排名,表示从排名第一开始。
     //   -1:结束排名,表示获取所有元素,没有限制。
    }
}

你可能感兴趣的:(知识深度解析系列,redis,java,数据库)