1

Spring Boot Redis配置

Spring Boot除了对对常用的关系型数据库提供支持以外,还对非关系型数据库进行了自动化配置。

使用redis结合spring cache是一个非常棒的组合
cache使用方便,但还是使用JVM内存了缓存对象
redis是独立的缓存服务器,使用单纯的内存来做缓存
所以他们结合后可以很方便的进行缓存并且不影响JVM的内存性能

接下来我会教大家如何在Spring Boot整合Redis。

Redis简单介绍:
redis是一个开源的的日志型、key-value键值对数据库。

它有三个特点:
1.redis将数据存放在内存中,也可以将数据持久化到磁盘;
2.与其他键值对数据存储相比,它还有string、hash、set、sortedset、list等数据结构;
3.支持主从复制

redis在Spring Boot上的配置很简单:

第一步:添加maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-redis</artifactId>
</dependency>

第二步:参数配置

这里我们在application.properties(.yxml也可以)中进行配置:

# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# 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

第三步:实际操作

测试代码(毫无意义):

@Autowired
private StringRedisTemplate<String,String> stringRedisTemplate;

@RequestMapping("/set")
@ResponseBody
public String set(){
   redisTemplate.opsForValue().set("key","value");
   return  "success";
}

@RequestMapping("/get")
@ResponseBody
public String get(){
   return redisTemplate.opsForValue().get("key");
}    
    

这时候你也许会问:怎么只能存入String,不是说可以存入复杂的数据结构吗?
别急,看下面的代码,我来实现把一个User实体存入redis:

@Autowired
private RedisTemplate<String,String> redisTemplate;

@Resource(name = "redisTemplate")
private ValueOperations<String,Object> valueOperations;

public void test(){
     User user = new User("testName","testPassword");
     valueOperations.set("user",user);
     boolean exist = redisTemplate.hasKey("user");
     if(exist){
        System.out.println("exist");
     }else{
        System.out.printf("no exist");
   }
}

以上例子就可以把User存入redis中。
除了ValueOperations,还有ListOperations,SetOperations,ZSetOperations,HashOperations

下面我会贴出工具类,方便大家大家使用:

第四步:工具类

package cm.cn.util;

import java.util.Collection;
import java.util.Set;

import javax.annotation.Resource;

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.Component;

@Component
public final class RedisUtil {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    @Resource(name = "redisTemplate")
    private ValueOperations<String, Object> valueOps;
    @Resource(name = "redisTemplate")
    private ListOperations<String, String> listOps;
    @Resource(name = "redisTemplate")
    private SetOperations<String, String> setOps;
    @Resource(name = "redisTemplate")
    private ZSetOperations<String, String> zsetOps;
    @Resource(name = "redisTemplate")
    private HashOperations<String, String, String> hashOps;

    public void setValue(String key, Object value) {
        valueOps.set(key, value);
    }

    public Object getValue(String key) {
        return valueOps.get(key);
    }

    //返回值为设置成功的value数
    public Long setSet(String key, String... value) {
        return setOps.add(key, value);
    }

    //返回值为redis中键值为key的value的Set集合
    public Set<String> getSetMembers(String key) {
        return setOps.members(key);
    }

    public Boolean setZSet(String key, String value, double score) {
        return zsetOps.add(key, value, score);
    }

    public Double getZSetScore(String key, String value) {
        return zsetOps.score(key, value);
    }

    public void deleteKey(String key) {
        redisTemplate.delete(key);
    }

    public void deleteKeys(Collection<String> keys) {
        redisTemplate.delete(keys);
    }
}

以上便是Redis在SpringBoot上的使用。

觉得还可以的请点个赞,赞不了也可以收藏下
还有更精彩的文章呈现给大家,请关注作者
谢谢阅读~


大叔一枝花
610 声望56 粉丝

Talk is cheap,show me the code