springboot配置redis过程详解
作者:Zs夏至 发布时间:2022-10-13 12:41:30
标签:spring,boot,配置,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字符串存储
来源:https://www.cnblogs.com/Zs-book1/p/11451689.html


猜你喜欢
- 小伙伴们,最近比较忙,没什么时间写,今天给大家分享的是JAVA如何导出EXCEL表格,因为最近有做这样一个功能,所以分享出来,如有不对之处,
- AI 平台:http://ai.baidu.com/开发工具:vs 2017准备工作1、注册百度账号2、登录百度 AI 开发平台,http:
- 上篇文章说了通过RestTemplate实现微服务之间访问:https://www.jb51.net/article/252981.htm,
- 本文实例为大家分享了Android实现京东首页效果的具体代码,供大家参考,具体内容如下1.效果图:2.布局源码链接<?xml vers
- 本文实例讲述了Android编程使用LinearLayout和PullRefreshView实现上下翻页功能的方法。分享给大家供大家参考,具
- dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。使用Json.Net可以把一个Json字符串转换成一个
- 1、动态SQL片段通过SQL片段达到代码复用 <!-- 动态条件分页查询 --> <sql i
- 目录1、若 a 的值为 3 时,下列程序段被执行后, c 的值是多少?( )2、以下哪项不是java基础类型()3、Java中只有整型才能使
- 本文实例讲述了C#验证给定字符串是否为数字的方法。分享给大家供大家参考。具体分析如下:这段C#代码用于验证给定的字符串是否为数字,不能用于验
- 前言:想象一下,有一个服务提供个多个客户端调用,但不是所有客户端都需要全部的返回参数:比如商品列表服务返回商品的所有信息,而订单服务调用商品
- SpringMVC @RequestBody自动转json Http415错误项目中想用@RequestBody直接接收json串转成对象网
- 布局布局效果如下,下面每个“网格”都是一个按钮,点击按钮,就会有相应的事件发生。由于UniformG
- 一、理解 “ 服务器 / 浏览器 ”沟通流程(3步)第1步:浏览器使用<img src=&qu
- 工厂接口定义/// <summary> /// 工厂接口定义 &nbs
- --DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1
- 360首页搜索效果如下1、完成编写的schoolnet校园网主要目录结构如下主要实现支持中文、拼音首字母、拼音全字母的智能搜索和换肤页面效果
- 老规矩,先上图看效果。说明TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢
- 前提其实很多框架都是对另一个框架的封装,我们在学习类似的框架的时候,难免会进入误区,所以我们就应该对其进行总结归纳,对比。本文就是对hibe
- 本文实例讲述了Android获取SD卡及手机ROM容量的方法。分享给大家供大家参考,具体如下:这里通过一个简单的小例子,来获取SD卡的容量和
- 前言本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友