Spring boot 集成redis(包括安装本地redis服务)

一、首先安装本地redis服务

    1. redis下载地址:https://github.com/MicrosoftArchive/redis/releases   

Spring boot 集成redis(包括安装本地redis服务)

 2.选择.msi文件下载下来并双击运行。点击下一步。

Spring boot 集成redis(包括安装本地redis服务)

3.同意安装协议,并进行下一步。

Spring boot 集成redis(包括安装本地redis服务)

4.将redis添加到环境变量当中去。

Spring boot 集成redis(包括安装本地redis服务)

5.添加windows防火墙,确保外界也能正常访问。

Spring boot 集成redis(包括安装本地redis服务)

6.设置redis空间,用于本地测试学习的话100MB足够了。

Spring boot 集成redis(包括安装本地redis服务)

7.

Spring boot 集成redis(包括安装本地redis服务)

8.

Spring boot 集成redis(包括安装本地redis服务)

9.

Spring boot 集成redis(包括安装本地redis服务)

10.安装完毕后服务端的密码默认是为空的,如果要设置密码进入redis的安装目录,找到redis.windows-service.conf文件,注意不是redis.windows.conf,找到含有requirepass的地方,追加一行,输入requirepass 12345。即设置密码为12345。

11.点击“开始”按钮,右键“计算机”,点击“管理”,打开服务并查看redis服务是否已启动

Spring boot 集成redis(包括安装本地redis服务)

12.最后测试redis连接和其他操作

    键盘按“win”+"R"键,输入cmd,打开管理界面,并进入redis的安装目录下,

Spring boot 集成redis(包括安装本地redis服务)

连接redis命令:redis-cli(如果你设置了密码先登录:auth password)

Spring boot 集成redis(包括安装本地redis服务)

13.设置键值对:设置key为“mykey”,value为“hello redis!”。如图:(set mykey 'hello redis!')

Spring boot 集成redis(包括安装本地redis服务)

14。读取key为“mykey”的value。(get mykey)

Spring boot 集成redis(包括安装本地redis服务)

到此,本地的redis服务已成功安装并能正常操作了,接下来就是如何在Spring boot里集成redis了。

二、Spring boot集成redis服务。

1.pom文件里添加redis依赖

<!-- Spring Boot Redis 依赖 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
   <version>1.5.7.RELEASE</version>
</dependency>

2.application.properties配置。

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

3.server层集成redis操作方法。

import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

public interface RedisServer {
    <T> void put(String key, T obj);
    <T> void put(String key, T obj, int timeout);
    <T> void put(String key, T obj, int timeout, TimeUnit unit);

    <T> T get(String key, Class<T> cls);

    <E,T extends Collection<E>> T get(String key, Class<E> cls, Class<T> collectionCls);
    <T> T putIfAbsent(String key, Class<T> cls, Supplier<T> supplier);
    <T> T putIfAbsent(String key, Class<T> cls, Supplier<T> supplier, int timeout);

    <E,T extends Collection<E>> T putIfAbsent(String key, Class<E> cls, Class<T> collectionCls, Supplier<T> supplier);

    boolean exists(String key);
    void del(String key);
    boolean expire(String key, long timeout, TimeUnit unit);
    boolean expire(String key, long timeout);

    void put(String key, String value);
    void put(String key, String value, int timeout);
    void put(String key, String value, int timeout, TimeUnit unit);
    String get(String key);

    void putHash(String key, Map<Object, Object> m);
    Map<Object, Object> getHash(String key);
}

4.server实现层。

import com.yh.business.framework.base.util.JsonUtils;
import com.yh.business.framework.common.redis.RedisServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;


@Service("redisServer")
public class RedisServerImpl implements RedisServer {

    @Autowired
    private StringRedisTemplate redisTemplate;

    public <T> void put(String key, T obj) {
        redisTemplate.opsForValue().set(key, JsonUtils.toJson(obj));
    }

    public <T> void put(String key, T obj, int timeout) {
        put(key,obj,timeout,TimeUnit.MINUTES);
    }

    public <T> void put(String key, T obj, int timeout, TimeUnit unit) {
        redisTemplate.opsForValue().set(key, JsonUtils.toJson(obj),timeout,unit);
    }

    public <T> T get(String key, Class<T> cls) {
        return JsonUtils.fromJson(JsonUtils.toJson(redisTemplate.opsForValue().get(key)), cls);
    }

    public <E, T extends Collection<E>> T get(String key, Class<E> cls, Class<T> collectionCls) {
        return JsonUtils.fromJson(JsonUtils.toJson(redisTemplate.opsForValue().get(key)), cls, collectionCls);
    }

    public <T> T putIfAbsent(String key, Class<T> cls, Supplier<T> supplier) {
        T t=get(key,cls);
        if(null==t){
            t=supplier.get();
            if(null!=t)
                put(key,t);
        }
        return t;
    }

    public <T> T putIfAbsent(String key, Class<T> cls, Supplier<T> supplier, int timeout) {
        T t=get(key,cls);
        if(null==t){
            t=supplier.get();
            if(null!=t)
                put(key,t,timeout);
        }
        return t;
    }

    public <E, T extends Collection<E>> T putIfAbsent(String key, Class<E> cls, Class<T> collectionCls,
                                                      Supplier<T> supplier) {
        T t=get(key,cls,collectionCls);
        if(null==t || t.isEmpty()){
            t=supplier.get();
            if(null!=t && t.size()>0)
                put(key,t);
        }
        return t;
    }

    public boolean exists(String key) {
        return redisTemplate.hasKey(key);
    }

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

    public boolean expire(String key, long timeout, TimeUnit unit) {
        return redisTemplate.expire(key, timeout, unit);
    }

    public boolean expire(String key, long timeout) {
        return redisTemplate.expire(key, timeout, TimeUnit.MINUTES);
    }

    public void put(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    public void put(String key, String value, int timeout) {
        put(key,value,timeout,TimeUnit.MINUTES);
    }

    public void put(String key, String value, int timeout, TimeUnit unit) {
        redisTemplate.opsForValue().set(key, value, timeout, unit);
    }

    public String get(String key) {
        return (String) redisTemplate.opsForValue().get(key);
    }

    public void putHash(String key, Map<Object,Object> m) {
        redisTemplate.opsForHash().putAll(key, m);
    }

    public Map<Object, Object> getHash(String key) {
        try{
            return redisTemplate.opsForHash().entries(key);
        }catch(Exception e){
            return null;
        }

    }

}

(注意:此处需用到JsonUtil工具)。

5.测试方法测试操作。

1.用put方法直接添加键值对。可以看到控制台输出“hello redis!”。

Spring boot 集成redis(包括安装本地redis服务)

6.del方法删除键值对。可以看到删除完后输出为:null。

Spring boot 集成redis(包括安装本地redis服务)

至此,Spring boot集成的redis服务操作非常简单实用。