溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

springboot如何使用redis實(shí)現(xiàn)從配置

發(fā)布時(shí)間:2021-08-30 16:49:22 來源:億速云 閱讀:125 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“springboot如何使用redis實(shí)現(xiàn)從配置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“springboot如何使用redis實(shí)現(xiàn)從配置”吧!

目錄
  • 概述

  • 準(zhǔn)備工作

  • 使用

概述

springboot通常整合redis,采用的是RedisTemplate的形式,除了這種形式以外,還有另外一種形式去整合,即采用spring支持的注解進(jìn)行訪問緩存.

準(zhǔn)備工作

pom.xml

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.7.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>RELEASE</version>
        </dependency>

application.properties

# REDIS (RedisProperties)
# Redis數(shù)據(jù)庫索引(默認(rèn)為0)
spring.redis.database=0
# Redis服務(wù)器地址
spring.redis.host=127.0.0.1
# Redis服務(wù)器連接端口
spring.redis.port=6379
# 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
spring.redis.pool.max-active=8
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連接池中的最大空閑連接
spring.redis.pool.max-idle=8
# 連接池中的最小空閑連接
spring.redis.pool.min-idle=0
# 連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=0

Redis配置類

package cn.chenlove.config;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

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

@Configuration
@EnableCaching
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.pool.max-idle}")
    private int maxIdle;

    @Value("${spring.redis.pool.max-wait}")
    private long maxWaitMillis;

    @Bean
    public JedisPool redisPoolFactory() {
        Logger.getLogger(getClass()).info("JedisPool注入成功??!");
        Logger.getLogger(getClass()).info("redis地址:" + host + ":" + port);
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);

        return jedisPool;
    }
}

可以看出,我們這里主要配置了兩個(gè)東西,cacheManager方法配置了一個(gè)緩存名稱,它的名字叫做thisredis,當(dāng)我們要在方法注解里面使用到它的時(shí)候,就要根據(jù)名稱進(jìn)行區(qū)分不同緩存.同時(shí)設(shè)置了緩存的過期時(shí)間.redisTemplate則是比較常見的,我們?cè)O(shè)置了RedisTemplate,因此在代碼里面,我們也可以通過@Autowired注入RedisTemplate來操作redis.

使用

接下來就是如何使用注解啦,這一步反而是最簡(jiǎn)單的.其實(shí)只用到了兩個(gè)注解,@Cacheable和@CacheEvict.第一個(gè)注解代表從緩存中查詢指定的key,如果有,從緩存中取,不再執(zhí)行方法.如果沒有則執(zhí)
行方法,并且將方法的返回值和指定的key關(guān)聯(lián)起來,放入到緩存中.而@CacheEvict則是從緩存中清除指定的key對(duì)應(yīng)的數(shù)據(jù).使用的代碼如下:

//有參數(shù)
    @Cacheable(value="thisredis", key="'users_'+#id")
    public User findUser(Integer id) {
        User user = new User();
        user.setUsername("hlhdidi");
        user.setPassword("123");
        user.setUid(id.longValue());
        System.out.println("log4j2壞啦?");
        logger.info("輸入user,用戶名:{},密碼:{}",user.getUsername(),user.getPassword());
        return user;
     }

      @CacheEvict(value="thisredis",   key="'users_'+#id",condition="#id!=1")
      public void delUser(Integer id) {
        // 刪除user
           System.out.println("user刪除");
       }

       //無參數(shù)
       @RequestMapping("/get")
    @Cacheable(value="thisredis")
    @ResponseBody
    public List<User> xx(){
        return userMapper.selectAll();
    }
    @RequestMapping("/get3")
    @CacheEvict(value="thisredis")
    @ResponseBody
    public String xx3(){
        return "ok";
    }

可以看出,我們用@Cacheable的value屬性指定具體緩存,并通過key將其放入緩存中.這里key非常靈活,支持spring的el表達(dá)式,可以通過方法參數(shù)產(chǎn)生可變的key(見findUser方法),也可以通過其指定在什么情況下,使用/不使用緩存(見delUser方法).

到此,相信大家對(duì)“springboot如何使用redis實(shí)現(xiàn)從配置”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI