Heim > Datenbank > Redis > Wie SpringBoot Redis integriert

Wie SpringBoot Redis integriert

coldplay.xixi
Freigeben: 2021-01-25 10:19:05
nach vorne
1975 Leute haben es durchsucht

Wie SpringBoot Redis integriert

Empfohlen (kostenlos): Redis-Tutorial

Heute ist Riyue hier, um Ihnen beizubringen, wie Sie SpringBoot zur Integration von Redis verwenden. Ehrlich gesagt ist es relativ einfach und es gibt viele davon Tutorials im Internet. Wenden wir zunächst die Einführung im Internet an.
Definition

REmote Dictionary Server (Redis) ist ein von Salvatore Sanfilippo geschriebenes Schlüsselwertspeichersystem.
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), Liste, Sets und sortierte Sets sein können.
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

Wie SpringBoot Redis integriertRedis 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>
Nach dem Login kopieren
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
Nach dem Login kopieren
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>
Nach dem Login kopieren
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>
Nach dem Login kopieren
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.
Wie SpringBoot Redis integriert
Sie können sehen, dass wir beim zweiten Lesen aus dem Cache versuchen, den Browser kontinuierlich zu aktualisieren. Wie SpringBoot Redis integriert

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


Jetzt ist unser Redis konfiguriert. Wie SpringBoot Redis integriert
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 . Wie SpringBoot Redis integriert

Für weitere verwandte Informationen achten Sie bitte auf die Spalte

redis

!


Das obige ist der detaillierte Inhalt vonWie SpringBoot Redis integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage