redis实战---基础篇

时间:2023-01-05 01:14:07


背景

最近在进行redis的学习,打算出一个实战系列文章,本篇文章,作为开篇,是一篇基础性文章。主要内容会介绍一下redis的数据结构,以及这些数据结构的使用方法。后续的文章将会结合具体业务进行更新。

Redis是什么?

Redis是一种高性能的NoSQL数据库,支持多种基本数据类型,包括字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set)等等。下面我会简要介绍每种数据类型以及在Java中如何使用它们。

各个数据类型

1.字符串(string)

概念

字符串是Redis最基本的数据类型,也是最常用的一种数据类型。字符串类型的值可以是任何二进制数据,例如图片、序列化对象等。在Redis中,字符串类型的值最大可以存储512MB的数据。

实例

下面是SpringBoot中如何使用Redis字符串实例代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class RedisStringExample {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void setValue() {
        stringRedisTemplate.opsForValue().set("name", "Tom");
    }

    public String getValue() {
        return stringRedisTemplate.opsForValue().get("name");
    }
}

上面的代码中,我们使用了SpringBoot提供的StringRedisTemplate来操作Redis数据库。通过opsForValue()方法可以获取到操作字符串类型数据的对象。我们使用set方法设置了一个键为name,值为Tom的字符串类型的数据。然后,我们使用get方法获取了键为name的字符串类型的值,并返回它。

应用场景

适用于缓存一些简单的字符串类型的数据,比如存储一个键值对,其中键是一个字符串,值也是一个字符串。

2.哈希(hash)

概念

哈希类型是Redis中的一种键值对数据类型,它可以存储多个键值对。在Redis中,每个哈希类型的值最多可以包含2^32-1个键值对。

实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class RedisHashExample {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setValue() {
        HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
        Map<String, String> map = new HashMap<>();
        map.put("name", "Tom");
        map.put("age", "20");
        hashOperations.putAll("user", map);
    }

    public String getValue() {
        HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
        String name = hashOperations.get("user", "name");
        String age = hashOperations.get("user", "age");
        return name + ", " + age;
    }
}

上面的代码中,我们通过opsForHash()方法可以获取到操作哈希类型数据的对象。我们使用putAll方法设置了一个键为user的哈希类型的数据,其中包含了name和age两个键值对。然后,我们使用get方法分别获取了name和age的值,并返回它们的拼接。需要注意的是,在Redis中,哈希类型的键名和键值都是字符串类型的。

应用场景

适用于存储一些复杂的数据结构,比如存储一个用户对象,其中包含了多个字段,每个字段又包含了多个属性。

3. 列表(list)

概念

列表类型是Redis中的一种基本数据类型,它可以存储多个有序的字符串类型的值。在Redis中,列表类型的值最多可以包含2^32-1个元素。

实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class RedisListExample {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setValue() {
        ListOperations<String, String> listOperations = redisTemplate.opsForList();
        listOperations.rightPush("queue", "a");
        listOperations.rightPush("queue", "b");
        listOperations.rightPush("queue", "c");
    }

    public List<String> getValue() {
        ListOperations<String, String> listOperations = redisTemplate.opsForList();
        return listOperations.range("queue", 0, -1);
    }
}

应用场景

适用于实现队列和栈等数据结构,比如存储一个任务队列,每个任务可以是一个字符串类型的数据。

4. 集合(set)

概念

集合类型是Redis中的一种基本数据类型,它可以存储多个无序的字符串类型的值,每个值都是唯一的。在Redis中,集合类型的值最多可以包含2^32-1个元素。

实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
public class RedisSetExample {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setValue() {
        SetOperations<String, String> setOperations = redisTemplate.opsForSet();
        setOperations.add("set", "a", "b", "c");
    }

    public Set<String> getValue() {
        SetOperations<String, String> setOperations = redisTemplate.opsForSet();
        return setOperations.members("set");
    }
}

上面的代码中,我们通过opsForSet()方法可以获取到操作集合类型数据的对象。我们使用add方法向一个键为set的集合类型的数据中,插入了三个元素,分别为a、b、c。然后,我们使用members方法获取了键为set的集合类型数据中的所有元素,并返回它们。

应用场景

适用于实现队列和栈等数据结构,比如存储一个任务队列,每个任务可以是一个字符串类型的数据。

5. 有序集合(sorted set)

概念

有序集合类型是Redis中的一种基本数据类型,
它可以存储多个有序的字符串类型的值,每个值都可以有一个分数(score),根据分数的大小,可以对值进行排序。在Redis中,有序集合类型的值最多可以包含2^32-1个元素。

实例

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
public class RedisZSetExample {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    public void setValue() {
        ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet();
        zSetOperations.add("zset", "a", 1);
        zSetOperations.add("zset", "b", 2);
        zSetOperations.add("zset", "c", 3);
    }

    public Set<String> getValue() {
        ZSetOperations<String, String> zSetOperations = redisTemplate.opsForZSet();
        return zSetOperations.range("zset", 0, -1);
    }
}

上面的代码中,我们通过opsForZSet()方法可以获取到操作有序集合类型数据的对象。我们使用add方法向一个键为zset的有序集合类型的数据中,插入了三个元素,分别为a、b、c,并为每个元素指定了一个分数,分别为1、2、3。然后,我们使用range方法获取了键为zset的有序集合类型数据中的所有元素,并返回它们。

应用场景

适用于需要按照一定顺序排序的场景,比如存储一个热搜榜单,每个热搜词可以是一个字符串类型的数据,并为其指定一个分数,分数越高则热度越高,可以使用有序集合类型来实现排序和排行榜功能。

总结

总之,Redis提供了多种基本数据类型,包括字符串、哈希、列表、集合和有序集合。这些数据类型具有不同的特点和使用场景,我们可以根据具体的业务需求来选择合适的数据类型。同时,SpringBoot提供了RedisTemplate和相应的操作接口,方便开发者使用这些数据类型来操作Redis数据库。

redis实战---基础篇