Maven-Abhängigkeiten sind wie folgt: Es ist zu beachten, dass Spring-Boot-Starter-Data-Redis standardmäßig Salat als Treiber verwendet Client. Endseitiger Treiber, daher wird hier Salat ausgeschlossen und jedis eingeführt:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
Diese Abhängigkeitsbeziehung möchte ausdrücken, dass Spring Redis betreibt über RedisConnection. RedisConnection kapselt die native Jedis-Linie. Um das RedisConnection-Schnittstellenobjekt zu erhalten, wird es über RedisConnectionFactory generiert.
3. Konfiguration
# Redis 连接配置 # 单机 Redis spring.redis.host=127.0.0.1 spring.redis.port=6379 # 连接池配置 spring.redis.jedis.pool.max-idle=30 spring.redis.jedis.pool.max-total=50 spring.redis.jedis.pool.max-wait=2000ms
Codekonfiguration:
@Configuration public class RedisConfig { private RedisConnectionFactory connectionFactory = null; @Bean public RedisConnectionFactory initRedisConnectionFactory(){ if(connectionFactory!=null){ return connectionFactory; } JedisPoolConfig poolConfig =new JedisPoolConfig(); //最大空闲数 poolConfig.setMaxIdle(30); //最大连接数 poolConfig.setMaxTotal(50); //最大等待毫秒数 poolConfig.setMaxWaitMillis(2000); //创建Jedis连接工厂 JedisConnectionFactory connectionFactory=new JedisConnectionFactory(poolConfig); //获取单机的redis配置,如果是集群的话用集群配置类 RedisStandaloneConfiguration rscfg=connectionFactory.getStandaloneConfiguration(); connectionFactory.setHostName("127.0.0.1"); connectionFactory.setPort(6379); return connectionFactory; } }
4. RedisTemplate
Der Kernpunkt, auf den Sie bei der Verwendung von RedisTemplate achten sollten, ist, dass der Serialisierer beim Schreiben von Schlüsselwerten und beim Lesen von Redis unterschiedliche Serialisierungsmethoden verwendet. Wenn Sie beispielsweise Zeichen verarbeiten, müssen Sie einen stringspezifischen Serialisierer verwenden, und wenn Sie Objekte verarbeiten, müssen Sie einen objektspezifischen Serialisierer verwenden.
Die aktuellen Serialisierer sind wie folgt:
StringRedisSerializer:StringRedisSerializer ist der von RedisTemplate standardmäßig verwendete Schlüssel- und Wertserialisierer. Er serialisiert Zeichenfolgen mithilfe der UTF-8-Codierung in Byte-Arrays. Da sowohl Schlüssel als auch Wert in Redis Zeichenfolgen sind, kann der Standard-Serializer StringRedisSerializer die Anforderungen der meisten Situationen erfüllen.
Jackson2JsonRedisSerializer:Jackson2JsonRedisSerializer ist ein auf Jackson basierender Redis-Schlüssel- und -Wert-Serialisierer, der Objekte in Zeichenfolgen im JSON-Format serialisieren und in Redis speichern kann. Um den Jackson2JsonRedisSerializer-Serializer zu verwenden, müssen Sie eine Jackson-Abhängigkeit hinzufügen. Sie können Objekte in JSON-formatierte Zeichenfolgen oder JSON-formatierte Zeichenfolgen in Objekte konvertieren.
JdkSerializationRedisSerializer:JdkSerializationRedisSerializer ist ein Serialisierer, der auf Javas eigener Serialisierungsmethode basiert und Objekte zur Speicherung in Byte-Arrays serialisieren kann. Obwohl JdkSerializationRedisSerializer einfach und benutzerfreundlich ist, ist seine Effizienz relativ gering und das serialisierte Byte-Array ist relativ groß, sodass es zum Speichern großer Datenmengen ungeeignet ist.
GenericJackson2JsonRedisSerializer:GenericJackson2JsonRedisSerializer ist ein Jackson2JsonRedisSerializer, der Generics unterstützt, die jeden Objekttyp serialisieren und das Objekt in eine JSON-Formatzeichenfolge serialisieren können. Es erfordert die Angabe des Zieltyps sowohl bei der Serialisierung als auch bei der Deserialisierung.
OxmSerializer:OxmSerializer ist ein Serialisierer, der auf dem O/X-Mapping-Framework von Spring basiert und die Serialisierung von Objekten in XML-Formatzeichenfolgen unterstützt. Obwohl OxmSerializer über eine hohe Flexibilität verfügt, ist seine Serialisierungs- und Deserialisierungsleistung gering und er eignet sich nicht zum Speichern großer Datenmengen.
Kurz gesagt, bei der Auswahl eines Serialisierers müssen Sie eine Auswahl basierend auf der tatsächlichen Situation treffen und den geeigneten Serialisierer basierend auf dem Datentyp und den Leistungsanforderungen auswählen.
Sie können es einfach direkt bei der Verwendung festlegen. Bei der Einstellung erhalten Sie viele Optionen für die Granularität des Effekts, unabhängig davon, ob er für alle Datenstrukturen vom Redis-Typ oder für einen bestimmten Typ von Redis-Datenstrukturtypen wirksam ist :
Zum Beispiel möchte ich einen String-Serialisierer verwenden, der global wirksam wird:
@Bean public RedisTemplate<Object,Object> initRedisTemplate(){ RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setDefaultSerializer(new StringRedisSerializer()); return redisTemplate; }
5. Grundoperationen
It Es ist zu beachten, dass bei der Definition von RedisTemplate durch @Bean eine generische und generische Ausrichtung erforderlich ist.
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.SetOperations; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class RedisService { @Autowired private RedisTemplate<String, Object> redisTemplate; @Autowired private StringRedisTemplate stringRedisTemplate; public void setString(String key, String value) { stringRedisTemplate.opsForValue().set(key, value); } public String getString(String key) { return stringRedisTemplate.opsForValue().get(key); } public void setHash(String key, String hashKey, Object value) { HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash(); hashOps.put(key, hashKey, value); } public Object getHash(String key, String hashKey) { HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash(); return hashOps.get(key, hashKey); } public void setList(String key, Object value) { ListOperations<String, Object> listOps = redisTemplate.opsForList(); listOps.rightPush(key, value); } public Object getList(String key, long index) { ListOperations<String, Object> listOps = redisTemplate.opsForList(); return listOps.index(key, index); } public void setSet(String key, Object value) { SetOperations<String, Object> setOps = redisTemplate.opsForSet(); setOps.add(key, value); } public Object getSet(String key) { SetOperations<String, Object> setOps = redisTemplate.opsForSet(); return setOps.members(key); } public void setZSet(String key, Object value, double score) { ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet(); zsetOps.add(key, value, score); } public Object getZSet(String key, long start, long end) { ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet(); return zsetOps.range(key, start, end); } }
6. Transaktionen
@Autowired private RedisTemplate<String, String> redisTemplate; public void transactionalOperation() { // 开启 Redis 事务 redisTemplate.multi(); try { // 执行多个 Redis 命令 redisTemplate.opsForValue().set("key1", "value1"); redisTemplate.opsForValue().set("key2", "value2"); // 提交事务 redisTemplate.exec(); } catch (Exception e) { // 回滚事务 redisTemplate.discard(); } }
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Redis in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!