Heim  >  Artikel  >  Datenbank  >  Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?

Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?

青灯夜游
青灯夜游nach vorne
2021-04-09 11:43:391607Durchsuche

Dieser Artikel zeigt Ihnen, wie Sie SpringBoot zur Integration von Redis verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?

REmote Dictionary Server (Redis) ist ein Schlüsselwertspeichersystem, das von Salvatore Sanfilippo geschrieben wurde.

Redis ist eine Open-Source-Schlüsselwertdatenbank vom Protokolltyp, die in der Sprache ANSI C geschrieben ist, sich an das BSD-Protokoll hält, das Netzwerk unterstützt, speicherbasiert und persistent sein kann und APIs in mehreren Sprachen bereitstellt.

Er wird oft als Datenstrukturserver bezeichnet, da Werte Typen wie String, Hash, Map, List, Sets und Sorted Sets sein können. [Verwandte Empfehlungen: Redis-Video-Tutorial]

Vorteile von Reids

Im Folgenden sind einige Vorteile von Redis aufgeführt.

Außergewöhnlich schnell – Redis ist sehr schnell und kann ungefähr 110.000 Set-Operationen (SET) pro Sekunde und ungefähr 81.000 Lese-/Get-Operationen (GET) pro Sekunde ausführen.
Unterstützung umfangreicher Datentypen – Redis unterstützt die meisten von Entwicklern häufig verwendeten Datentypen, z. B. Listen, Mengen, sortierte Mengen, Hashes und mehr. Dies erleichtert den Einsatz von Redis zur Lösung verschiedener Probleme, da wir wissen, welche Probleme mit welchen Datentypen besser gelöst werden können.
Operationen sind atomar – Alle Redis-Operationen sind atomar, was sicherstellt, dass der Redis-Server aktualisierte Werte empfangen kann, wenn zwei Clients gleichzeitig darauf zugreifen.
Multi-Utility-Tool – Redis ist ein Multi-Utility-Tool, das für mehrere Anwendungsfälle verwendet werden kann, wie zum Beispiel: Caching, Nachrichtenwarteschlangen (Redis unterstützt nativ Publish/Subscribe), alle kurzfristigen Daten in Anwendungen, zum Beispiel Sitzungen in Webanwendungen, Anzahl der Webseitenzugriffe usw.

Redis-Installation

Installation unter Windows

Download-Adresse: https://github.com/MSOpenTech/redis/releases.
Redis unterstützt 32-Bit und 64-Bit. Dies muss entsprechend der tatsächlichen Situation Ihrer Systemplattform ausgewählt werden. Hier laden wir das komprimierte Paket Redis-x64-xxx.zip auf das Laufwerk C herunter. Benennen Sie den Ordner nach der Dekomprimierung in Redis um.

Öffnen Sie ein cmd-Fenster und wechseln Sie mit dem Befehl cd das Verzeichnis auf C: redis Um den Pfad erneut einzugeben, kann die Datei redis.windows.conf weggelassen werden. Wenn sie weggelassen wird, wird die Standarddatei aktiviert. Nach der Eingabe wird die folgende Schnittstelle angezeigt:
redis-server.exe redis.windows.conf

Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?Redis integrieren

Wir verwenden immer noch das Projekt aus dem vorherigen Kapitel: Springboot integriert springcloud-config, um die DataSource-Hot-Bereitstellung zu implementieren

1. Abhängigkeiten hinzufügen

<!--集成redis-->
<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-redis</artifactid>
    <version>1.4.1.RELEASE</version>
</dependency>
<dependency>
    <groupid>com.alibaba</groupid>
    <artifactid>fastjson</artifactid>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupid>com.fasterxml.jackson.core</groupid>
    <artifactid>jackson-databind</artifactid>
</dependency>
2, Redis-Konfiguration im Konfigurationscenter hinzufügen

spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=30000
3. Konfigurationsklasse RedisConfig

import java.lang.reflect.Method;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import com.fasterxml.jackson.annotation.PropertyAccessor; 
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
@EnableCaching
@RefreshScope
public class RedisConfig extends CachingConfigurerSupport{
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.pool.max-active}")
    private int maxActive;
    @Value("${spring.redis.pool.max-wait}")
    private int maxWait;
    @Value("${spring.redis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.pool.min-idle}")
    private int minIdle;
    
    @RefreshScope
    @Bean
    public KeyGenerator wiselyKeyGenerator(){
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }
    
    @RefreshScope
    @Bean
    public JedisConnectionFactory redisConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName(host);
        factory.setPort(port);
        factory.setTimeout(timeout); //设置连接超时时间
        factory.setPassword(password);
        factory.getPoolConfig().setMaxIdle(maxIdle);
        factory.getPoolConfig().setMinIdle(minIdle);
        factory.getPoolConfig().setMaxTotal(maxActive);
        factory.getPoolConfig().setMaxWaitMillis(maxWait);
        return factory;
    }
    
    @RefreshScope
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        // Number of seconds before expiration. Defaults to unlimited (0)
        cacheManager.setDefaultExpiration(10); //设置key-value超时时间
        return cacheManager;
    }
    
    @RefreshScope
    @Bean
    public RedisTemplate<string> redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        setSerializer(template); //设置序列化工具,这样ReportBean不需要实现Serializable接口
        template.afterPropertiesSet();
        return template;
    }
    
    @RefreshScope
    private void setSerializer(StringRedisTemplate template) {
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
    }
}</string>
5. Controller testen, ändern

import java.io.Serializable;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Service;
@Service
public class RedisUtils {
    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 写入缓存
     * @param key
     * @param value
     * @return
     */
    public boolean set(final String key, Object value) {
        boolean result = false;
        try {
            ValueOperations<serializable> operations = redisTemplate.opsForValue();
            operations.set(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 写入缓存设置时效时间
     * @param key
     * @param value
     * @return
     */
    public boolean set(final String key, Object value, Long expireTime ,TimeUnit timeUnit) {
        boolean result = false;
        try {
            ValueOperations<serializable> operations = redisTemplate.opsForValue();
            operations.set(key, value);
            redisTemplate.expire(key, expireTime, timeUnit);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 批量删除对应的value
     * @param keys
     */
    public void remove(final String... keys) {
        for (String key : keys) {
            remove(key);
        }
    }
    /**
     * 批量删除key
     * @param pattern
     */
    public void removePattern(final String pattern) {
        Set<serializable> keys = redisTemplate.keys(pattern);
        if (keys.size() > 0){
            redisTemplate.delete(keys);
        }
    }
    /**
     * 删除对应的value
     * @param key
     */
    public void remove(final String key) {
        if (exists(key)) {
            redisTemplate.delete(key);
        }
    }
    /**
     * 判断缓存中是否有对应的value
     * @param key
     * @return
     */
    public boolean exists(final String key) {
        return redisTemplate.hasKey(key);
    }
    /**
     * 读取缓存
     * @param key
     * @return
     */
    public Object get(final String key) {
        Object result = null;
        ValueOperations<serializable> operations = redisTemplate.opsForValue();
        result = operations.get(key);
        return result;
    }
    /**
     * 哈希 添加
     * @param key
     * @param hashKey
     * @param value
     */
    public void hmSet(String key, Object hashKey, Object value){
        HashOperations<string> hash = redisTemplate.opsForHash();
        hash.put(key,hashKey,value);
    }
    /**
     * 哈希获取数据
     * @param key
     * @param hashKey
     * @return
     */
    public Object hmGet(String key, Object hashKey){
        HashOperations<string>  hash = redisTemplate.opsForHash();
        return hash.get(key,hashKey);
    }
    /**
     * 列表添加
     * @param k
     * @param v
     */
    public void lPush(String k,Object v){
        ListOperations<string> list = redisTemplate.opsForList();
        list.rightPush(k,v);
    }
    /**
     * 列表获取
     * @param k
     * @param l
     * @param l1
     * @return
     */
    public List<object> lRange(String k, long l, long l1){
        ListOperations<string> list = redisTemplate.opsForList();
        return list.range(k,l,l1);
    }
    /**
     * 集合添加
     * @param key
     * @param value
     */
    public void add(String key,Object value){
        SetOperations<string> set = redisTemplate.opsForSet();
        set.add(key,value);
    }
    /**
     * 集合获取
     * @param key
     * @return
     */
    public Set<object> setMembers(String key){
        SetOperations<string> set = redisTemplate.opsForSet();
        return set.members(key);
    }
    /**
     * 有序集合添加
     * @param key
     * @param value
     * @param scoure
     */
    public void zAdd(String key,Object value,double scoure){
        ZSetOperations<string> zset = redisTemplate.opsForZSet();
        zset.add(key,value,scoure);
    }
    /**
     * 有序集合获取
     * @param key
     * @param scoure
     * @param scoure1
     * @return
     */
    public Set<object> rangeByScore(String key,double scoure,double scoure1){
        ZSetOperations<string> zset = redisTemplate.opsForZSet();
        return zset.rangeByScore(key, scoure, scoure1);
    }</string></object></string></string></object></string></string></object></string></string></string></serializable></serializable></serializable></serializable>
Starten Sie das Projekt, besuchen Sie Zum ersten Mal: ​​http://localhost:8002/hello/111

Durch die Konsolenausgabe können wir sehen, dass die Daten aus der Datenbank abgerufen und im Redis-Cache gespeichert werden.

Wir aktualisieren den Browser erneut.
Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?
Sie können sehen, dass wir beim zweiten Lesen aus dem Cache versuchen, den Browser kontinuierlich zu aktualisieren. Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?

Sie können sehen, dass danach alles aus dem Cache abgerufen wird.


Jetzt ist unser Redis konfiguriert. Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?
SpringBoot integrierter Redis-Demo-Download
Wenn Sie dringend eine Demo benötigen, laden Sie sie bitte selbst herunter. Wenn Sie es nicht eilig haben, können Sie eine Nachricht in Ihrer E-Mail-Adresse hinterlassen, die normalerweise innerhalb von 48 Stunden gesendet wird . Detaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?
Weitere Kenntnisse zum Thema Programmierung finden Sie unter:

Programmiervideos

! !

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie man SpringBoot zur Integration von Redis verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen