文章目录

  • 一、Redis 常用数据类型
  • 二、Redis 常用操作命令
  • 1. 字符串命令
  • 2. 哈希命令
  • 3. 列表命令
  • 4. 集合命令
  • 5. 有序集合命令
  • 6. 通用命令
  • 三、在 Java 中操作 Redis
  • 1. 导入 maven 坐标
  • 2. 配置 Redis 数据源
  • 3. 编写配置类
  • 四、在代码中的具体使用


一、Redis 常用数据类型

Redis 存储的是键值对结构的数据,其中 key 是字符串类型,value 有5种常用的数据类型:字符串 string、哈希 hash、列表 list、集合 set 以及有序集合 sorted set / zset。

二、Redis 常用操作命令

1. 字符串命令

java redis 管道批量删除缓存 java redis删除key_开发语言

① 设置 key 的过期时间:短信验证码一分钟后自动过期;
② key 不存在时设置 key 的值:分布式锁。

java redis 管道批量删除缓存 java redis删除key_java redis 管道批量删除缓存_02

java redis 管道批量删除缓存 java redis删除key_java_03

2. 哈希命令

java redis 管道批量删除缓存 java redis删除key_java redis 管道批量删除缓存_04

哈希特别适合存储对象!

java redis 管道批量删除缓存 java redis删除key_开发语言_05


java redis 管道批量删除缓存 java redis删除key_java_06

3. 列表命令

java redis 管道批量删除缓存 java redis删除key_spring_07

取出跟存入的顺序一致!

java redis 管道批量删除缓存 java redis删除key_spring_08

4. 集合命令

java redis 管道批量删除缓存 java redis删除key_开发语言_09


java redis 管道批量删除缓存 java redis删除key_spring_10


java redis 管道批量删除缓存 java redis删除key_spring_11


java redis 管道批量删除缓存 java redis删除key_spring_12

5. 有序集合命令

java redis 管道批量删除缓存 java redis删除key_redis_13

Redis 有序集合是 string 类型元素的集合,且不允许有重复成员,每个元素都会关联一个 double 类型的分数,通过这个分数对集合进行排序!

java redis 管道批量删除缓存 java redis删除key_java_14


java redis 管道批量删除缓存 java redis删除key_开发语言_15

6. 通用命令

java redis 管道批量删除缓存 java redis删除key_java_16

三、在 Java 中操作 Redis

1. 导入 maven 坐标

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2. 配置 Redis 数据源

java redis 管道批量删除缓存 java redis删除key_redis_17

3. 编写配置类

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }

}

四、在代码中的具体使用

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;

import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@SpringBootTest
public class SpringDataRedisTest {
    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 通过valueOperations对象就可以操作字符串类型的数据
     */
    @Test
    public void testRedisTemplate1() {

        ValueOperations valueOperations = redisTemplate.opsForValue();
        //插入数据
        valueOperations.set("name", "栈老师不回家");
        //读取数据
        String name = (String) valueOperations.get("name");
        //设置数据一分钟后过期,自动被清理,这里与redis原命令不同
        valueOperations.set("code", "1234", 1, TimeUnit.MINUTES);
        //只有当key不存在时设置其value值,这里也与redis命令不同
        valueOperations.setIfAbsent("lock", "1");

    }


    /**
     * 操作哈希类型
     */
    @Test
    public void testRedisTemplate2() {

        HashOperations hashOperations = redisTemplate.opsForHash();
        //插入数据
        hashOperations.put("001", "age", "20");
        //读取数据
        String age = (String) hashOperations.get("001", "age");
        //获得所有的key
        Set keys = hashOperations.keys("001");
        //获得所有的value
        List values = hashOperations.values("001");
        //删除一条数据
//        hashOperations.delete("001", "age");

    }


    /**
     * 通用命令操作
     */
    @Test
    public void testRedisTemplate3() {

        //查找所有的key
        Set keys = redisTemplate.keys("*");
        //检查给定key是否存在
        Boolean name = redisTemplate.hasKey("name");
        //返回key所存储值的数据类型
        DataType type = redisTemplate.type("name");
        //删除key
//        redisTemplate.delete("name");
    }
}