使用SpringDataRedis操作Redis

发布时间:2024年01月10日

Redis的java客户端

  • jedis
  • Lettuce
  • Spring Data Redis

Spring Data redis 是Spring的一部分,对 Redis 底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。

Spring Data Redis使用方式

操作步骤:

  • 导入Spring Data Redis 的 maven 坐标
  • 配置Redis的数据源
  • 编写配置类,创建RedisTemplate对象
  • 通过RedisTemplate对象操作Redis

1、导入Spring Data Redis 的 maven 坐标

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

2、配置Redis的数据源

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    database: 1

3、编写配置类,创建RedisTemplate对象

package top.suweijie.redis.config;

import cn.hutool.db.nosql.redis.RedisDS;
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;

/**
 * @Author suweijie
 * @Date 2024/1/9 17:01
 * @Description: TODO
 * @Version 1.0
 */
@Slf4j
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        log.info("redisTemplate init...");
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }

}

4、通过RedisTemplate操作Redis

package top.suweijie.redis;

import jdk.nashorn.internal.runtime.regexp.joni.constants.OPSize;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;

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

/**
 * @Author suweijie
 * @Date 2024/1/9 17:05
 * @Description: TODO
 * @Version 1.0
 */
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class RedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test1() {
        ValueOperations stringObjectValueOperations = redisTemplate.opsForValue();
        HashOperations stringObjectObjectHashOperations = redisTemplate.opsForHash();
        ListOperations stringObjectListOperations = redisTemplate.opsForList();
        SetOperations setOperations = redisTemplate.opsForSet();
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
    }
}

操作字符串

 @Test
    public void dealString() {
        //set key value
        redisTemplate.opsForValue().set("name","suweijie");

        //get key
        String name = (String)redisTemplate.opsForValue().get("name");

        //setex key seconds value
        redisTemplate.opsForValue().set("name","suweijie",60,TimeUnit.SECONDS);

        //setnx key value
        redisTemplate.opsForValue().setIfAbsent("name","suweijie");

        redisTemplate.delete("name");
    }

操作哈希

@Test
    public void dealHash() {
        //hset key field value
        redisTemplate.opsForHash().put("user","name","suweijie");
        redisTemplate.opsForHash().put("user","age","20");

        //hget key field
        String  name = (String)redisTemplate.opsForHash().get("user","name");
        log.info(name);

        //hdel key field
        redisTemplate.opsForHash().delete("user","age");

        //hkeys key
        Set keys = redisTemplate.opsForHash().keys("user");
        keys.forEach(System.out::println);

        //hvals key
        List values = redisTemplate.opsForHash().values("user");
        values.forEach(System.out::println);
    }

操作列表

 @Test
    public void dealList() {
        //lpush key value1 value2
        redisTemplate.opsForList().leftPushAll("list","4","3","2","1");

        //lrange key start end
        List list = redisTemplate.opsForList().range("list", 0, -1);
        list.forEach(System.out::println);

        //rpop  key
        String rightPop = (String) redisTemplate.opsForList().rightPop("list");
        log.info(rightPop);

        //llen key
        Long size = redisTemplate.opsForList().size("list");
        log .info(size + "");
    }

操作集合

 @Test
    public void dealSet() {
        //sadd key member1 member2
        redisTemplate.opsForSet().add("set1","1","2","3","2");
        redisTemplate.opsForSet().add("set2","1","2","2","4");

        log.info("-------------------------------------------------");

        //smembers key
        Set set = redisTemplate.opsForSet().members("set1");
        set.forEach(System.out::println);

        log.info("-------------------------------------------------");

        //scard key
        Long size = redisTemplate.opsForSet().size("set2");
        log.info(size + "");

        log.info("-------------------------------------------------");

        //sinter key1 key2
        Set intersect = redisTemplate.opsForSet().intersect("set1", "set2");
        intersect.forEach(System.out::println);

        log.info("-------------------------------------------------");

        Set union = redisTemplate.opsForSet().union("set1", "set2");
        union.forEach(System.out::println);
    }

操作有序集合

@Test
    public void dealZset() {
        //zadd score1 member1 socre2 member2
        redisTemplate.opsForZSet().add("zset1","swj",1);
        redisTemplate.opsForZSet().add("zset1","zat",2);

        //zrange key start end withscores
        Set zset1 = redisTemplate.opsForZSet().rangeByScoreWithScores("zset1", 0, 3);
        zset1.forEach(System.out::println);

        //zincryby key increment memer
        redisTemplate.opsForZSet().incrementScore("zset1","zat",1);

        //zrem key member1 member2
        redisTemplate.opsForZSet().remove("zset1","swj");

    }
文章来源:https://blog.csdn.net/weixin_65861329/article/details/135506167
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。