spring boot 整合 redis


自己開發環境需要安裝 redis 服務,百度一下很多,下面主要說明Springboot 集成 redis 講解

我的版本 java8 + redis3.0 + springboot 1.5.9。 Spring redis 集成了 jedis

redis 中存儲的是 bytes

1 spring boot已經支持集成 redis,在 mvn 中只需添加依賴即可。pom 配置片段如下

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
  </parent>
...

<!-- 添加 redis 緩存支持 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

 

  1.2 對 redis 進行配置,修改配置文件 application.properties

## Redis 配置
## Redis數據庫索引(默認為0)
spring.redis.database=0
## Redis服務器地址
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=0

 

2 連接 redis 需要 RedisConnection 和 RedisConnectionFactory,

RedisConnection 是通過 RedisConnectionFactory 進行創建。

RedisConnection 提供較低級的數據操作 (byte arrays)

 

  2.1 創建配置類 RedisConfig 

@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;
    
}

 

3 RedisTemplate

RedisTemplate 是 redis 模塊的核心類,是對 redis 操作的較高抽象具有豐富的特性。他關注的是序列化和連接管理。他是線程安全的,提供了如下操作接口

HashOperations
HyperLogLogOperations
ListOperations
SetOperations
ValueOperations
ZSetOperations

Spring 還提供了一個 StringRedisTemplate,方便對 String 進行處理。java 中經常遇到對象,可以使用 jackson 進行對象-字符串 轉化。可以提供一個工具類。

JsonUtil

public class JsonUtil {

    private static ObjectMapper objectMapper = new ObjectMapper();

    public static String convertObj2String(Object object) {
        String s = null;
        try {
            s = objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return s;
    }

    public static <T> T convertString2Obj(String s, Class<T> clazz) {
        T t = null;
        try {
            t = objectMapper.readValue(s, clazz);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return t;
    }

}

 

至此,redis 配置如下

@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Bean
    public RedisTemplate<String, String> redisTemplate(){
        StringRedisTemplate redisTemplate = new StringRedisTemplate(redisConnectionFactory);
        return redisTemplate;
    }

}

說明:默認情況下bean的名稱和方法名稱相同,你也可以使用name屬性來指定。上面的 IOC 容器中注冊了 ID為 redisTemplate 的 bean。

 

4 使用 redisTemplate 進行增刪改查

@Service
public class RedisService {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 一周有多少秒
     */
    private static final long WEEK_SECONDS = 7 * 24 * 60 * 60;


    /**
     * 將 key,value 存放到redis數據庫中,默認設置過期時間為一周
     *
     * @param key
     * @param value
     */
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, JsonUtil.convertObj2String(value), WEEK_SECONDS, TimeUnit.SECONDS);
    }

    /**
     * 將 key,value 存放到redis數據庫中,設置過期時間單位是秒
     *
     * @param key
     * @param value
     * @param expireTime
     */
    public void set(String key, Object value, long expireTime) {
        redisTemplate.opsForValue().set(key, JsonUtil.convertObj2String(value), expireTime, TimeUnit.SECONDS);
    }

    /**
     * 判斷 key 是否在 redis 數據庫中
     *
     * @param key
     * @return
     */
    public boolean exists(final String key) {
        return redisTemplate.hasKey(key);
    }

    /**
     * 獲取與 key 對應的對象
     * @param key
     * @param clazz 目標對象類型
     * @param <T>
     * @return
     */
    public <T> T get(String key, Class<T> clazz) {
        String s = get(key);
        if (s == null) {
            return null;
        }
        return JsonUtil.convertString2Obj(s, clazz);
    }

    /**
     * 獲取 key 對應的字符串
     * @param key
     * @return
     */
    public String get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 刪除 key 對應的 value
     * @param key
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM