springboot配置redis
Posted zs-book1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot配置redis相关的知识,希望对你有一定的参考价值。
在springboot中,默认继承好了一套完好的redis包,可以直接使用,但是如果使用中出了错不容易找到错误的原因,因此这里使用自己配置的redis;
需要使用的三个主要jar包:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
使用spring-boot-configuration-processor包主要是用来配置加载文件
package com.zs.springboot.config.redis; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @Company * @Author Zs * 将这个类作为spring的一个组件,添加@ConfigurationProperties(prefix = "spring.redis")注解,就会默认从application.properties * 文件中加载前缀为spring.redis的配置信息,配置文件中的配置字段与该类中的属性一致,通过setter方法来设值 * @Date Create in 2019/8/30 **/ @Component @ConfigurationProperties(prefix = "spring.redis") public class RedisProperties private String ip; private Integer[] ports; private Integer maxActive; private Integer maxWait; private Integer expire; public String getIp() return ip; public void setIp(String ip) this.ip = ip; public Integer[] getPorts() return ports; public void setPorts(Integer[] ports) this.ports = ports; public Integer getMaxActive() return maxActive; public void setMaxActive(Integer maxActive) this.maxActive = maxActive; public Integer getMaxWait() return maxWait; public void setMaxWait(Integer maxWait) this.maxWait = maxWait; public Integer getExpire() return expire; public void setExpire(Integer expire) this.expire = expire;
在application中配置redis:
然后配置redis的配置类,使用jdisCluster来操作redis:
package com.zs.springboot.config.redis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import java.util.HashSet; import java.util.Set; /** * @Company * @Author Zs * @Date Create in 2019/8/30 **/ @Configuration public class RedisConfiguration private RedisProperties redisProperties; public RedisConfiguration(RedisProperties redisProperties) this.redisProperties = redisProperties; @Bean public JedisCluster jedisCluster() Integer[] ports = redisProperties.getPorts(); String host = redisProperties.getIp(); Set<HostAndPort> hostAndPortSet = new HashSet<>(); for (Integer port : ports) hostAndPortSet.add(new HostAndPort(host, port)); return new JedisCluster(hostAndPortSet, redisProperties.getMaxActive(), redisProperties.getMaxWait());
编辑redis的增删该方法:
/** * @Company * @Author Zs * @Date Create in 2019/8/28 **/ @Service public class RedisService @Autowired private JedisCluster jedisCluster; private static final String SET_SUCCESS = "OK"; /** * 添加string数据,成功返回code:200,失败code:404 * @param key * @param value * @return */ public Map<String, Object> set(String key, Object value) Map<String, Object> map = new HashMap<>(); String result = jedisCluster.set(key, JsonUtil.toJsonString(value)); if (SET_SUCCESS.equals(result)) map.put(Status.SUCCESS.getCodeName(), Status.SUCCESS.getCode()); else map.put(Status.FILED.getCodeName(), Status.FILED.getCode()); return map; /** * 从redis根据key获取string数据 * @param key * @return */ public String get(String key) String jsonString = jedisCluster.get(key); if (jsonString==null || jsonString.equals("")) return null; return jsonString; /** * 删除string数据 * @param key * @return */ public Map<String, Object> del(String key) Map<String, Object> map = new HashMap<>(); Long del = jedisCluster.del(key); if (del>0) map.put("code", 200); else map.put("code", 404); return map; /** * 设置失效时间 * @param key * @param seconds * @return */ public Long expire(String key,Integer seconds) return jedisCluster.expire(key, seconds);
注意不能在service层中注入service,如果需要可以在controller层将redisService做为参数传递进去,如果在service层中注入其他的service对象,可能造成事务的串联,读到脏数据。
该方法需要使用到jsonUtil类,将数据转为json字符串存储
以上是关于springboot配置redis的主要内容,如果未能解决你的问题,请参考以下文章