Rumah >Java >javaTutorial >Bagaimana Java dan SpringBoot menggunakan redis

Bagaimana Java dan SpringBoot menggunakan redis

王林
王林ke hadapan
2023-05-12 20:31:04899semak imbas

1. Java bersambung ke redis

Apakah bahasa yang disokong oleh redis (lihat tapak web rasmi redis)

Bagaimana Java dan SpringBoot menggunakan redis

Bagaimana Java dan SpringBoot menggunakan redis

1.1 Gunakan Jedis

(1) Tambah pergantungan 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) Ujian kod

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 Gunakan kolam sambungan Connect 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 Mod kluster connect redis Java

Apabila menyambung ke kluster, pastikan tiada nilai yang disimpan dalam kluster Jika terdapat nilai yang disimpan, anda perlukan untuk memadam fail yang dijana sebelum ini (pastikan anda memadamnya dengan bersih)

Bagaimana Java dan SpringBoot menggunakan redis

Perkara lain ialah melepaskan port yang sepadan: 6001, 6002, 6003, 6004, 6005, 6006 , kerana port yang dikeluarkan sebelum ini sebenarnya 10000. Perhatikan dua perkara di atas sebelum anda boleh menggunakan idea untuk menciptanya dengan jayanya.

@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();
    }

Bagaimana Java dan SpringBoot menggunakan redis

2. SpringBoot menyepadukan redis

operasi redis springboot merangkum dua kelas StringRedisTemplate dan RedisTemplate ialah subkelas StringRedisTemplate, dan StringRedisTemplate sahaja. jenis boleh disimpan, jenis objek tidak boleh disimpan. Jika anda ingin menggunakan StringRedisTemplate untuk menyimpan objek, anda mesti menukar objek menjadi rentetan json.

Bagaimana Java dan SpringBoot menggunakan redis

Apabila springboot menyepadukan redis, ia menyediakan dua kelas alat templat, StringRedisTemplate dan RedisTemplate.

2.1 StringRedisTemplate

(1) Memperkenalkan kebergantungan yang berkaitan

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

(2) Inject StringRedisTemplate objek kelas ini

 @Autowired
 private StringRedisTemplate redisTemplate;

(3) Gunakan StringRedisTemplate

Kelas ini mengelak kelas dalaman yang sepadan secara berasingan untuk operasi pada setiap jenis data.

Bagaimana Java dan SpringBoot menggunakan redis

Tidak akan ada aksara yang bercelaru di sini kerana kaedah pensirilan dan penyahsirian telah ditukar kepada jenis Rentetan.

@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

Akan ada aksara yang bercelaru di sini kerana kaedah pensirilan dan penyahserikannya lalai kepada 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 di atas perlu menentukan nilai kunci dan kaedah pesirisian medan setiap kali Bolehkah anda membuat kelas konfigurasi yang telah menetapkan pesirilan untuk RedisTemplate? Tidak perlu nyatakan jika digunakan kemudian.

rreeee

Atas ialah kandungan terperinci Bagaimana Java dan SpringBoot menggunakan redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam