> Java > java지도 시간 > Java와 SpringBoot가 Redis를 사용하는 방법

Java와 SpringBoot가 Redis를 사용하는 방법

王林
풀어 주다: 2023-05-12 20:31:04
앞으로
911명이 탐색했습니다.

1. Java는 redis에 연결됩니다

redis는 어떤 언어를 지원합니까(redis 공식 웹사이트 확인)

Java와 SpringBoot가 Redis를 사용하는 방법

Java와 SpringBoot가 Redis를 사용하는 방법

1.1 Jedis 사용

(1) jedis 종속성 추가

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--只能在测试类中使用-->
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.0</version>
        </dependency>
로그인 후 복사

(2 ) 코드 테스트

public class TestJedis {
    @Test
    public void test01(){
        //连接redis--必须保证你的redis服务运行远程连接
        //该对象把每个redis命令封装成对应的方法
        //注意端口号
        //xshell中的redis要运行起来,注意防火墙释放端口号,注意配置文件的修改
        Jedis jedis=new Jedis("192.168.1.16",6379);
        //对于字符串操作的命令
        String set = jedis.set("k1", "v1");
        System.out.println(set);
        String set1 = jedis.set("k2", "v2");
        System.out.println(set1);
        String set2 = jedis.set("k3", "v3");
        System.out.println(set2);

        //对于hash的操作
        jedis.hset("k4","name","小花");
        Long hset = jedis.hset("k4", "age", "18");
        System.out.println(hset);

       Map<String ,String> map=new HashMap<>();
        map.put("name","小明");
        map.put("age","20");
        Long k = jedis.hset("k5", map);
        System.out.println(k);
        jedis.close();
    }
}
로그인 후 복사

1.2 연결 풀을 사용하여 redis에 연결

 @Test
    public void test02(){
        //创建连接池的配置类
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(20);
        jedisPoolConfig.setMinIdle(5);
        jedisPoolConfig.setMaxWait(Duration.ofMillis(3000));
        JedisPool jedisPool=new JedisPool(jedisPoolConfig,"192.168.1.16",6379);
        long start = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {
            //从jedis连接池获取资源
            Jedis jedis=jedisPool.getResource();
            String ping = jedis.ping();
            jedis.close();//是否关闭池子
        }
        long end=System.currentTimeMillis();
        //是为了比较使用池子还是不使用快,结论是使用池子快
        System.out.println("总耗时:"+(end-start));
    }
로그인 후 복사

1.3 Java에 연결하여 redis 클러스터 모드

클러스터에 연결할 때 클러스터에 저장된 값이 없는지 확인하세요. (꼭 깨끗하게 삭제해주세요)

Java와 SpringBoot가 Redis를 사용하는 방법

또 다른 것은 포트 10000이 6001, 6002, 6003, 6004, 6005, 6006이기 때문에 해당 포트를 해제해 주어야 합니다. 아이디어를 성공적으로 사용하기 전에 위의 두 가지 사항에 주의하십시오.

@Test
    public void test03(){
      Set<HostAndPort> nodes=new HashSet<>();
      nodes.add(new HostAndPort("192.168.227.175",6001));
      nodes.add(new HostAndPort("192.168.227.175",6002));
      nodes.add(new HostAndPort("192.168.227.175",6003));
      nodes.add(new HostAndPort("192.168.227.175",6004));
      nodes.add(new HostAndPort("192.168.227.175",6005));
      nodes.add(new HostAndPort("192.168.227.175",6006));
        JedisCluster jedisCluster=new JedisCluster(nodes);
      jedisCluster.set("k6", "小老虎和小兔子");
        jedisCluster.close();
    }
로그인 후 복사

Java와 SpringBoot가 Redis를 사용하는 방법

2. SpringBoot는 redis를 통합합니다.

springboot의 redis 작업은 두 개의 StringRedisTemplate 및 RedisTemplate 클래스를 캡슐화합니다. StringRedisTemplate은 RedisTemplate의 하위 클래스입니다. StringRedisTemplate을 사용하여 객체를 저장하려면 객체를 json 문자열로 변환해야 합니다.

Java와 SpringBoot가 Redis를 사용하는 방법

springboot는 redis를 통합할 때 StringRedisTemplate과 RedisTemplate이라는 두 가지 템플릿 도구 클래스를 제공합니다.

2.1 StringRedisTemplate

(1) 관련 종속성 소개

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
       </dependency>
로그인 후 복사

(2) 이 클래스의 StringRedisTemplate 객체 삽입

 @Autowired
 private StringRedisTemplate redisTemplate;
로그인 후 복사

(3) StringRedisTemplate 사용

이 클래스는 각 데이터 유형에 대한 작업을 처리합니다. , 해당 내부 클래스는 별도로 봉인됩니다.

Java와 SpringBoot가 Redis를 사용하는 방법

여기에는 직렬화 및 역직렬화 방법이 문자열 유형으로 변경되었으므로 문자가 깨지는 일이 없습니다.

@Autowired
    private StringRedisTemplate stringRedisTemplate;
 @Test
    public void test01(){
        //对hash类型的操作
        HashOperations<String, Object, Object> forHash = stringRedisTemplate.opsForHash();
        forHash.put("k1","name","张三");
        forHash.put("k1","age","15");
        Map<String,String> map=new HashMap<>();
        map.put("name","李四");
        map.put("age","25");
        forHash.putAll("k36",map);
 
        Object o = forHash.get("k1", "name");
        System.out.println(o);
 
        Set<Object> k1 = forHash.keys("k1");
        System.out.println(k1);
 
        List<Object> k11 = forHash.values("k1");
        System.out.println(k11);
 
        //获取k1对于的所有的field和value
        Map<Object, Object> k12 = forHash.entries("k1");
        System.out.println(k12);
    }
    @Test
    void contextLoads() {
        //删除指定的key
       // stringRedisTemplate.delete("k");
        //查看所有的key
        //stringRedisTemplate.keys("k");
        //是否存在指定的key
        //stringRedisTemplate.hasKey("k");
        //对字符串数据类型的操作ValueOperations
        ValueOperations<String, String> forValue = stringRedisTemplate.opsForValue();
        //存储字符串类型--key value long uint  setex()
        forValue.set("k1","张三",30, TimeUnit.SECONDS);
        //等价于setnx 存入成功返回true ,失败返回false
        Boolean absent = forValue.setIfAbsent("k11", "李四", 30, TimeUnit.SECONDS);
        System.out.println(absent);
        //append拼接
        Integer append = forValue.append("k11", "真好看");
        String k11 = forValue.get("k11");
        System.out.println(k11);
 
    }
로그인 후 복사

2.2 RedisTemplate

직렬화 및 역직렬화 방법이 기본적으로 JDK이므로 여기에 문자가 깨질 수 있습니다.

@SpringBootTest
class SbredisApplicationTests02 {
    //当你存储的value类型为对象类型使用redisTemplate
    //存储的value类型为字符串。StringRedisTemplate 验证码
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void test01(){
        //必须认为指定序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
 
        //对String类型操作类
        ValueOperations forValue = redisTemplate.opsForValue();
        //redis中key和value都变成了乱码
        //key和value都没有指定序列化方式,默认采用jdk的序列化方式
        forValue.set("k1","张三");
 
        //value默认采用jdk,类必须实现序列化接口
        forValue.set("k44",new User(1,"haha",12));
    }
}
로그인 후 복사

위 RedisTemplate에서는 매번 키 값과 필드 직렬화 방법을 지정해야 합니다. RedisTemplate에 대해 이미 직렬화를 지정한 구성 클래스를 생성할 수 있나요? 나중에 사용할 경우 지정할 필요가 없습니다.

아아아아

위 내용은 Java와 SpringBoot가 Redis를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿