Verwendung des Java-Clients von Redis (Jedis, SpringDataRedis, SpringBoot integriert Redis, RedisTemplate-Serialisierung und StringRedisTemplate-Serialisierung)

Einsatz von Jedis

Grundlegende Schritte zur Verwendung von Jedis:
① Abhängigkeiten einführen, um Jedis-Objekte zu erstellen,
② Verbindung herstellen
③ Verwenden Sie Jedis. Der Methodenname stimmt mit dem Redis-Befehl überein
④ Ressourcen freigeben

  1. Abhängigkeiten einführen
<!--Jedis-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version>
</dependency>
  1. Verbindung herstellen
// 测试链接
void SetUp(){
    
    
    // 1.建立链接
    jedis = new Jedis("192.168.197.129",6379);
    // 2.密码认证
    jedis.auth("123321");
    // 3.选择库
    jedis.select(0);
}
  1. Fügen Sie Daten vom Typ „String“ ein
 void testString(){
    
    
    String res = jedis.set("name", "byf");
    System.out.println("res"+res);

    String name = jedis.get("name");
    System.out.println("name="+name);
}
  1. Verbindung lösen
 // 释放资源
void tearDown(){
    
    
    if(jedis!=null){
    
    
        jedis.close();
    }
}
  1. Vollständiger Code:
package com.robin.test;

import redis.clients.jedis.Jedis;

public class JedisDemo1 {
    
    

    private Jedis jedis;

    // 测试链接
    void SetUp(){
    
    
        // 1.建立链接
        jedis = new Jedis("192.168.197.129",6379);
        // 2.密码认证
        jedis.auth("123321");
        // 3.选择库
        jedis.select(0);
    }

    // 测试String
    void testString(){
    
    
        String res = jedis.set("name", "byf");
        System.out.println("res"+res);

        String name = jedis.get("name");
        System.out.println("name="+name);

    }

    // 释放资源
    void tearDown(){
    
    
        if(jedis!=null){
    
    
            jedis.close();
        }
    }

    public static void main(String[] args) {
    
    
        JedisDemo1 demo1 = new JedisDemo1();
        demo1.SetUp();
        demo1.testString();
        demo1.tearDown();
    }

}

Jedis-Verbindungspool

PS:Jedis selbst ist Thread-unsicher und häufiges Erstellen und Zerstören von Verbindungen führt zu Leistungseinbußen, daher wird die Verwendung empfohlen Jedis-Verbindung Der Pool ersetzt die direkte Verbindungsmethode von Jedis.

package com.robin.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


/**
 * 使用JedisPool连接池
 */
public class JedisDemo2 {
    
    

    private static final JedisPool jedisPool;

    static {
    
    
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 配置连接池参数
        jedisPoolConfig.setMaxTotal(8); // 最大链接数
        jedisPoolConfig.setMaxIdle(8); //最大空闲连接数
        jedisPoolConfig.setMinIdle(8); // 最小空闲连接数

        jedisPool = new JedisPool(jedisPoolConfig,"192.168.197.129",6379);
    }

    // 获取jedis对象
    public static Jedis getJedis(){
    
    
        return jedisPool.getResource();
    }
}

SpringBoot integriert Jedis

Schnellstart

Schritte zur Verwendung von SpringDataRedis:
①Spring-Boot-Starter-Data-Redis-Abhängigkeit einführen
②Redis-Informationen in application.yml konfigurieren
③ RedisTemplate injizieren

  1. Abhängigkeiten einführen
<!-- redis-stater -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool redis连接池-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>
  1. Konfigurieren Sie Yaml-bezogene Redis-Konfigurationsinformationen
spring:
  data:
    redis:
      host: 192.168.197.129 # redis服务IP
      port: 6379 # 端口
      password: 123321 # redis auth 认证密码
      lettuce:
        pool:
          max-active: 8  # 最大连接数
          max-idle: 8  # 最大空闲连接数
          max-wait: 100ms  # 最长等待时间
  1. Inject RedisTemplate-Testverwendung
@SpringBootTest
class RedisDemoApplicationTests {
    
    

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Test
    void testString() {
    
    
        redisTemplate.opsForValue().set("day","2023-11-28");
        String day = (String)redisTemplate.opsForValue().get("day");
        System.out.println(day);
    }

}

Fügen Sie hier eine Bildbeschreibung ein

Zwei Serialisierungsübungslösungen für RedisTemplate

redisTemplate

  1. Standardbedingung
    RedisTemplate kann jedes Objekt als Wert empfangen und in Redis schreiben, es wird jedoch , Standardmäßig wird die JDK-Serialisierung verwendet. (Das Byte-Format ist schlecht lesbar und beansprucht viel Speicher)
    Fügen Sie hier eine Bildbeschreibung ein

  2. Passen Sie die Serialisierungsmethode von redisTemlate an

@Configuration
public class RedisConfig {
    
    

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
    
    

        // 创建RedisTemplate 对象
        RedisTemplate<String,Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);
        // 创建json序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回 RedisTemplate
        return  template;
    }
}

PS: Der Schlüssel ist auf String-Serialisierung und der Wert auf JSON-Serialisierung eingestellt.

@Test
void testSaveUser(){
    
    
    redisTemplate.opsForValue().set("user:100",new User("zhangsan",21));
    User o = (User)redisTemplate.opsForValue().get("user:100");
    System.out.println(o);
}

Fügen Sie hier eine Bildbeschreibung ein

Um den Typ des Objekts während der Deserialisierung zu kennen, schreibt der JSON-Serialisierer den Klassentyp der Klasse in das JSON-Ergebnis und speichert es in Redis, was zusätzlichen Speicheraufwand verursacht. " @class:“com.robin.redisdemo.pojo.user“ "

stringRedisTemplate

Verwenden Sie einheitlich den String-Serializer, der erfordert, dass nur Schlüssel und Werte vom Typ String gespeichert werden können. Wenn Java-Objekte gespeichert werden müssen, werden die Serialisierung und Deserialisierung der Objekte manuell durchgeführt.
Fügen Sie hier eine Bildbeschreibung ein
(Spring stellt standardmäßig eine StringRedisTemplate-Klasse bereit, und ihre Schlüssel- und Werteserialisierungsmethode ist standardmäßig String. )< /span>

@SpringBootTest
class StringRedisTemplateTests {
    
    

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void testString() {
    
    
        stringRedisTemplate.opsForValue().set("day","2023-11-28");
        String day = (String)stringRedisTemplate.opsForValue().get("day");
        System.out.println(day);
    }


    private static final ObjectMapper mapper= new ObjectMapper();

    @Test
    void testSaveUser() throws JsonProcessingException {
    
    
        // 创建对象
        User user = new User("zhangsan2", 21);
        // 手动序列化
        String json = mapper.writeValueAsString(user);
        // 写入数据
        stringRedisTemplate.opsForValue().set("user:200",json);
        // 手动反序列化
        User user1 = mapper.readValue(json, User.class);
        String res = stringRedisTemplate.opsForValue().get("user:200");
        System.out.println(res);
    }

}

Fügen Sie hier eine Bildbeschreibung ein


Guess you like

Origin blog.csdn.net/m0_63622279/article/details/134664484