스프링 부트 단순 연결 redis

알아채다

효과를 테스트할 때 자동 주입이 이때 빨간색으로 보고될 수 있습니다.

@Autowired를 @Resource로 교체

 

@Autowired와 @Resource의 차이점

공통 포인트
@Resource 및 @Autowired는 모두 Bean 주입에 사용됩니다.

차이점

Autowired는 기본적으로 어셈블리 유형에 따라 주입되며 기본적으로 종속 개체가 있어야 합니다.

리소스는 기본적으로 이름으로 조합되어 주입되며 이름과 일치하는 빈이 없을 경우에만 타입별로 조합되어 주입된다.
 


머리말

Java가 redis에 연결하는 두 가지 방법

1. Jedis에 직접 연결
  jedis = new Jedis("192.168.223.211",6379);
  비밀번호가 있는 경우: jedis.auth("123456");
  그러면 Redis를 작동할 수 있습니다.
 
2. 연결 풀 연결(연결 풀 기억: 리소스 닫기)
  //Jedis 관련 설정 정보
  JedisPoolConfig config = new JedisPoolConfig();
  config.setMaxTotal(500);
  config.setMaxIdle(5);
  config.setMaxWaitMillis(1000 * 100);
  config.setTestOnBorrow(true);
  //redis 연결 풀 연결 성공
  JedisPool pool = new JedisPool(config, "192.168.223.211", 6379, timeout, "123456");
  //연결 풀에서 연결 가져오기
  Jedis jedis = pool.getResource();
  그러면 다음을 수행할 수 있습니다. 레디스 운영중


1. 비밀번호 설정 후 redis 시작하기

사용 

redis-cli -p 6379 -a 123456 

시작하다

2. 환경 준비 및 테스트

redis 서비스를 먼저 시작하십시오.

프로젝트 생성 및 종속성 도입

  <!--redis连接jar包-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.0</version>
        </dependency>

        <!--spring boot整合redis的主启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

application.yml 구성

spring:
  redis:
    #数据库索引,默认为0
    database: 0
    #redis host ip
    host: 192.168.91.129
    #redis  连接端口
    port: 6379
    #服务器连接密码(默认为空)
    password: 123456
    #连接超时时间(毫秒)
    timeout: 1000
    jedis:
      #连接池配置
      pool:
        #连接池最大连接数
        max-active: 8
        #连接池最大阻塞等待时间(负值表示没有限制)
        max-wait: 5000
        #连接池最大空闲连接
        max-idle: 8
        #连接池最小空闲连接
        min-idl: 0

구성 완료

테스트 사용


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.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@SpringBootTest
class SpringbootRedisApplicationTests {

    //该类中封装了很多api方法--redis服务
    @Resource
    private StringRedisTemplate stringRedisTemplate;

    //该类型其实是StringRedisTemplate的父类,
    @Resource
    private RedisTemplate redisTemplate;

    @Test
    void contextLoads() {
    }

    @Test
    public void test01() {
        //连接方式通过jar包直接连接
        //配置连接服务
        Jedis jedis = new Jedis("192.168.91.129", 6379);
        //输入设置的数据库密码
        jedis.auth("123456");

        //获取所有的key
        Set<String> keys = jedis.keys("*");
        keys.forEach(System.out::println);

        jedis.set("k1", "1");
        jedis.set("k2", "2");
        jedis.set("k3", "3");
        jedis.set("k4", "4");
        jedis.set("k5", "5");

        //删除指定的key
        Long c = jedis.del("k1", "k2", "k5");
        System.out.println("删除key的个数:" + c);

        //判断指定的key是否存在
        Boolean exists = jedis.exists("k2");
        System.out.println("判断key是否存在:" + exists);

        //关闭资源
        jedis.close();
    }

    @Test
    public void test02() {
        //连接方式通过jar包直接连接
        //配置连接服务
        Jedis jedis = new Jedis("192.168.91.129", 6379);
        //输入设置的数据库密码
        jedis.auth("123456");
        //存放字符串数据
        jedis.set("k1", "1");
        jedis.set("k2", "v2");

        //获取指定key的内容
        String value1 = jedis.get("k1");
        System.out.println("k1对应的内容:" + value1);

        //如果指定的key存在则不存入,不存在则存入redis
        Long aLong = jedis.setnx("k8", "ldh");
        System.out.println("是否存入:" + aLong);

        //存入时设置过期时间
        String str = jedis.setex("k5", 30l, "v5");
        System.out.println("存入的内容:" + str);

        //用于点赞和收藏
        Long incr = jedis.incr("k1");
        System.out.println("递增后的结果:" + incr);

        //关闭资源
        jedis.close();
    }

    @Test
    public void test03() {
        //对应hash类型的操作----可以存放对象。
        //连接方式通过jar包直接连接
        //配置连接服务
        Jedis jedis = new Jedis("192.168.91.129", 6379);
        //输入设置的数据库密码
        jedis.auth("123456");


        String name = jedis.hget("myhash", "name");
        System.out.println("获取hash中name对应的值:" + name);


        Map<String, String> map1 = jedis.hgetAll("myhash");
        System.out.println("获取指定key对应的内容:" + map1);

        Set<String> k11 = jedis.hkeys("myhash");
        System.out.println("获取myhash对应的所有field:" + k11);

        List<String> values = jedis.hvals("myhash");
        System.out.println("获取myhash对应的所有field的值:" + values);

        //关闭资源
        jedis.close();
    }

    @Test
    public void test04() {
        //为了减少频繁的创建和销毁jedis对象,提高了jedis的连接池,以提高连接效率。JedisPool

        //创建连接池的配置类
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMinIdle(5); //设置空闲的个数
        config.setMaxIdle(10);
        config.setMaxTotal(2000); //设置最多的数量
        config.setMaxWaitMillis(6000);//设置最大的等待时长
        config.setTestOnBorrow(true); //是否检验池子中的jedis对象可用
        //创建jedis连接池对象.格式 配置类 ip地址 端口号 超时时间 密码
        JedisPool jedisPool = new JedisPool(config, "192.168.91.129", 6379, 1000, "123456");

        //通过池子获取其中的一个连接 然后其他的操作和上面的一样
        Jedis jedis = jedisPool.getResource();

        Map<String, String> map1 = jedis.hgetAll("myhash");
        System.out.println("获取指定key对应的内容:" + map1);


    }

    //测试StringRedisTemplate
    @Test
    public void test06(){
    /*    //删除指定的key
        Boolean aBoolean = stringRedisTemplate.delete("k1");
        System.out.println("是否删除成功:"+aBoolean);

        //判断指定的key是否存在
        Boolean hasKey = stringRedisTemplate.hasKey("k1");
        System.out.println("判断指定的key是否存在:"+hasKey);
*/
        //获取对string类型操作的类对象
        ValueOperations<String, String> forValue = stringRedisTemplate.opsForValue();
        forValue.set("n1","测试数据1");
        forValue.set("n2","2");
        forValue.set("n3","测试数据3");

        //如果存在 则不存入 不存在则存入
        Boolean aBoolean = forValue.setIfAbsent("n4", "测试数据4", 25, TimeUnit.SECONDS);
        System.out.println("是否存入成功 " + aBoolean);


        //获取对应的值
        String n1 = forValue.get("n1");
        System.out.println("n1 = " + n1);

        //递增
        Long n2 = forValue.increment("n2");
        System.out.println("n2递增后的值" + n2);

    }



    @Test
    public void test07(){
        //对于hash类型的操作
        HashOperations<String, Object, Object> forHash = stringRedisTemplate.opsForHash();


        //加入数据
        forHash.put("h1","name","刘德华");
        forHash.put("h1","age","18");
        forHash.put("h1","address","山东");

        HashMap<String,String> map = new HashMap<>();
        map.put("name","老六");
        map.put("age","19");
        map.put("adress","南京");
        forHash.putAll("h2",map);


        Object o = forHash.get("h1", "name");
        System.out.println("获取指定key对于的name的值:"+o);

        Map<Object, Object> h2 = forHash.entries("h2");
        System.out.println("获取h2对于的map对象:"+h2);

        Set<Object> keys = forHash.keys("h2");
        System.out.println("获取h2对于的所以field:"+keys);

        List<Object> values = forHash.values("h2");
        System.out.println("获取h2对于的所有filed的值:"+values);

    }


    // 而RedisTemplate的key和value可以自己指定数据类型,所有它的key和value可以是任意类型。
    @Test
    public void test08(){
        //默认RedisTemplate它的key和value的序列化都是使用的JdkSerializationRedisSerializer方式,
        // 该序列化要求类必须实现Serializable接口。
        //我们在实际开发中,我们的key都是String类型,我们应该指定String序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("student1",new Student(1,"张三","男"));
        System.out.println(valueOperations.get("student1"));
    }



}


요약하다

추천

출처blog.csdn.net/qq_55648724/article/details/128205051