微服务-Springboot+Redis缓存管理接口代码实现
废话少说,上代码,结合代码讲解:
一、创建maven工程:导入依赖:
<packaging>war</packaging>
<!--修改jdk的版本-->
<properties>
<java.version>1.8</java.version>
</properties> <!-- Add typical dependencies for a web application -->
<dependencies>
<!--Eureka客户端-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--进行热部署:开启开发者模式-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!--jstl标签-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--配置访问jsp的依赖,这里用不到-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency> <!--mybatis-,这里用不到->
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency> <!-- mybatis分页组件 ,这里用不到-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency> <!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>--> <!--远程调用,这里用不到, https://mvnrepository.com/artifact/io.github.openfeign/feign-core -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>10.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.20</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency> <dependency>
<groupId>com.joyoung.cloud</groupId>
<artifactId>cloud-common</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.1.4.RELEASE</version>
</dependency> </dependencies> <!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--热部署配置-->
<!--fork : 如果没有该项配置,肯定devtools不会起作用,即应用不会restart -->
<fork>true</fork>
</configuration>
</plugin> </plugins>
</build> 二、配置文件:这里配置文件设置一个也可以,合并后将Redis的配置放在application.yml文件中 application.yml:
#配置后台admin的端口号
server:
port: 8999
#给后台admin模块设置名字
spring:
application:
name: hbuy-admin
#配置访问页面路径的前后缀
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
#将后台模块注册到注册中心
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10010/eureka
#日志的配置
logging:
level:
org:
springframework: error
com:
java:
admin:
mapper: DEBUG
application.properties:
#设置服务器端口号
server.port=8081
#设置数据库连接四大参数
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/jycloud?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=123456
#配置页面跳转
spring.application.name=hbuy-admin
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#配置注册中心,将此模块注册到注册中心,这里用不到
eureka.client.service-url.defaultZone=http://127.0.0.1:10010/eureka #分页插件
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true mybatis.mapper-locations=classpath:mapper/*.xml spring.redis.host=localhost
spring.redis.port=6379
#spring.redis.password=root #根据需要
# Redis数据库索引(默认为0)
spring.redis.database=0
# 连接池最大连接数(使用负值表示没有限制)
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
三、启动类:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; /**
* admin模块的启动类
@EnableEurekaClient
@MapperScan(basePackages = "com.java.admin.mapper")这里如果不使用注册中心,注册中心的注解和依赖、配置都可以去掉
*/ @SpringBootApplication(scanBasePackages = "com.java.admin")
@EnableEurekaClient
@MapperScan(basePackages = "com.java.admin.mapper")
public class AdminStart {
public static void main(String[] args) {
SpringApplication.run(AdminStart.class);
}
}
四、创建实体类-缓存类,SysCach
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @ClassName: SysCach
* @Description:
* @Version: v1.0.0
* @Author: Fu Hao
* @Date: 2019/12/11 0011 下午 8:21
* Modification History:
* Date Author Version Description
* -------------------------------------------------------------
* 2019/12/11 0011 Fu v1.0.0 创建
*/
@Data
@Accessors(chain = true)
public class SysCach implements Serializable {
/*相当于java类的身份证。主要用于版本控制。
serialVersionUID作用是序列化时保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
有两种生成方式:
一个是默认的1L,比如:private static final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:
private static final long serialVersionUID = xxxxL; */
private static final long serialVersionUID = -1119517352037523860L; /**缓存对用的key**/
private String key;
/**缓存对用的value**/
private String value;
/**缓存的过期时间**/
private Long outOfTime;
} 五、统一返回数据格式:RestRes
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo; /**
* @ClassName: RestRes
* @Description: 响应格式化数据
* @Version: v1.0.0
* @Author: Fu Hao
* @Date: 2019/12/11 0011 下午 7:55
* Modification History:
* Date Author Version Description
* -------------------------------------------------------------
* 2019/12/11 0011 Fu v1.0.0 创建
*/
public class RestRes { public static JSONObject table(PageInfo pageInfo) {
JSONObject jsonObject = new JSONObject();
jsonObject.clear();
jsonObject.put("content", pageInfo.getList());
jsonObject.put("totalElements", pageInfo.getTotal());
return jsonObject;
} }
六、Controller层 :CacheController
import com.github.pagehelper.PageInfo;
import com.java.admin.constants.RestRes;
import com.java.admin.service.CacheService;
import com.joyoung.cloud.security.common.entity.admin.SysCach;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Delete;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.bind.annotation.*; /**
* @ClassName: CacheController
* @Description: 缓存管理接口
* @Version: v1.0.0
* @Author: Fu Hao
* @Date: 2019/12/11 0011 下午 7:43
* Modification History:
* Date Author Version Description
* -------------------------------------------------------------
* 2019/12/11 0011 Fu v1.0.0 创建
*/
@Api
@RestController
@RequestMapping("/cache")
public class CacheController { @Autowired
private CacheService cacheService; /***
* @Description 清空缓存
* @author Fu Hao on 2019/12/11 0011 下午 7:49
* @param data description
* @return
**/
@CacheEvict(allEntries = true,value = "cloud-admin")
@Delete("/clear")
public int clearCache(){
return 1;
} /***
* @Description 分页查询
* @author Fu Hao on 2019/12/11 0011 下午 8:43
* @param data description
* @return
**/
@ApiOperation(value = "分页查询")
@GetMapping("")
public Object page(String pattern,Integer page, Integer size){
PageInfo pageInfo=cacheService.list(pattern,page,size);
return RestRes.table(pageInfo);
} /***
* @Description 物理删除
* @author Fu Hao on 2019/12/11 0011 下午 8:45
* @param data description
* @return
**/
@ApiOperation(value = "删除")
@DeleteMapping("/remove/{key}")
public Object remove(@PathVariable String key){
cacheService.remove(key);
return 1;
} /***
* @Description 通过id获取缓存
* @author Fu Hao on 2019/12/11 0011 下午 9:16
* @param data description
* @return
**/
@ApiOperation(value = "查询一条记录")
@GetMapping("/get/{key}")
public Object get(@PathVariable String key){
return cacheService.get(key);
} /***
* @Description 新增一条缓存记录
* @author Fu Hao on 2019/12/11 0011 下午 9:24
* @param data description
* @return
**/
@ApiOperation(value = "新增一条信息")
@PostMapping("/add")
public void add(SysCach sysCach){
cacheService.add(sysCach);
} } 七、service层:CacheService
import com.github.pagehelper.PageInfo;
import com.joyoung.cloud.security.common.entity.admin.SysCach; /**
* @ClassName: CacheService
* @Description:
* @Version: v1.0.0
* @Author: Fu Hao
* @Date: 2019/12/11 0011 下午 7:53
* Modification History:
* Date Author Version Description
* -------------------------------------------------------------
* 2019/12/11 0011 Fu v1.0.0 创建
*/
public interface CacheService {
PageInfo list(String pattern, Integer page, Integer size); Boolean remove(String key); Object get(String key); void add(SysCach sysCach);
}
八、serviceImpl:
import java.util.ArrayList;
import java.util.List;
import java.util.Set; /**
* @ClassName: CacheServiceImpl
* @Description:
* @Version: v1.0.0
* @Author: Fu Hao
* @Date: 2019/12/11 0011 下午 7:54
* Modification History:
* Date Author Version Description
* -------------------------------------------------------------
* 2019/12/11 0011 Fu Hao v1.0.0 创建
*/
@Service("CacheService")
public class CacheServiceImpl implements CacheService { @Autowired
private StringRedisTemplate redisTemplate; /*** 返回所有符合条件的key
* @Description
* @author Fu Hao on 2019/12/11 0011 下午 8:14
* @param data description
* @return
**/
@Override
public PageInfo list(String pattern, Integer page, Integer size) {
page=page==null?0:page;
size=size==null?0:size;
pattern= StringUtils.isEmpty(pattern)?"*":pattern;
Set<String> keys=redisTemplate.keys("*"+pattern+"*");
List<SysCach> sysCachs=new ArrayList<>();
for (String key:keys){
SysCach sysCach=new SysCach();
//通过获取Redis里面的value
String value=redisTemplate.opsForValue().get(key);
Long outOfTime=redisTemplate.getExpire(key);
sysCach.setKey(key);
sysCach.setValue(value);
sysCach.setOutOfTime(outOfTime);
sysCachs.add(sysCach);
}
return new PageInfo<>(sysCachs);
} /***
* @Description 删除
* @author Fu Hao on 2019/12/11 0011 下午 8:46
* @param data description
* @return
**/
@Override
public Boolean remove(String key) {
return redisTemplate.delete(key);
} @Override
public Object get(String key) {
DataType dataType=redisTemplate.type(key);
Object val=null;
switch (dataType){
case NONE:
break;
case STRING:
val=redisTemplate.opsForValue().get(key);
break;
case SET:
val=redisTemplate.opsForSet().members(key);
break;
case HASH:
val=redisTemplate.opsForHash().entries(key);
break;
case LIST:
val=redisTemplate.opsForList().size(key);
break;
case ZSET:
val=redisTemplate.opsForZSet().size(key);
break;
default:
}
return val;
} @Override
public void add(SysCach sysCach) {
String key=sysCach.getKey();
String value=sysCach.getValue();
redisTemplate.opsForValue().set(key,value);
}
}
微服务-Springboot+Redis缓存管理接口代码实现的更多相关文章
- 前后端分离+本地服务实时刷新+缓存管理+接口proxy+静态资源增量更新+各种性能优化+上线运维发布——gulp工作流搭建
技巧集:http://www.gulpjs.com.cn/docs/recipes/ 其实无非就是利用各种gulp插件.node脚本对项目文件做各种IO操作,只是备忘,需要的话,还是自己重新写最合适. ...
- springcloud微服务基于redis集群的单点登录
springcloud微服务基于redis集群的单点登录 yls 2019-9-23 简介 本文介绍微服务架构中如何实现单点登录功能 创建三个服务: 操作redis集群的服务,用于多个服务之间共享数据 ...
- Rainbond v5.1.2发布,微服务架构应用便捷管理和交付
Rainbond v5.1.2发布,微服务架构应用便捷管理和交付 Rainbond是开源的企业应用云操作系统,支撑企业应用的开发.架构.交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资 ...
- 微服务-使用Redis实现分布式缓存
在单体中对于key信息和用户信息是放在内存中放的,通过session进行管理. 微服务是要放在分布式缓存中,以实现服务的无状态化. @Autowired private StringRedisTemp ...
- 架构设计 | 基于Seata中间件,微服务模式下事务管理
源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...
- springboot redis 缓存对象
只要加入spring-boot-starter-data-redis , springboot 会自动识别并使用redis作为缓存容器,使用方式如下 gradle加入依赖 compile(" ...
- 从.Net到Java学习第七篇——SpringBoot Redis 缓存穿透
从.Net到Java学习系列目录 场景描述:我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回.这个时候如果我们查询的某一个数 ...
- 一个微服务+DDD(领域驱动设计)的代码结构示例
前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : https://www.cnblogs.com/hafiz/p/9388334.htmlhttps://blog.cs ...
- 微服务springboot视频最新SpringBoot2.0.3版本技术视频教程【免费学习】
超火爆的springboot微服务技术怎么学,看这里,springboot超详细的教程↓↓↓↓↓↓https://ke.qq.com/course/179440?tuin=9b386640 01.sp ...
随机推荐
- NAT的三种类型
一.静态NAT 内部本地地址一对一转换成内部全局地址,相当内部本地的每一台PC都绑定了一个全局地址,即使这个地址没有被使用,其他的电脑也不能拿来转换使用,这样容易造成IP地址的资源浪费,一般是用于在内 ...
- 15.Django基础十一之认证系统
一 auth模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个 ...
- VIM操作记录
=============================================== 2019/12/12_第1次修改 vr7jj ============================= ...
- Reachability的使用
刚到一家新公司 做新项目 关于网络状态的监听和同事产生了不一样的看法 原来我的网络监听都是自己写的 后来发现自己不是一般的傻 有一个叫做Reachability的东西 很简单 很实用 很暴力 下面就是 ...
- 设计模式GOF23(行为型模式)
场景: – 公司里面,报销个单据需要经过流程: • 申请人填单申请,申请给经理 • 小于1000,经理审查. • 超过1000,交给总经理审批. • 总经理审批通过 – 公司里面,请假条的审批过程: ...
- [TimLinux] Python Django myblog启动
1. myblog介绍 自己给自己定的一个学习项目,用于: 使用学到的Python Web开发技术,框架django 使用学到的CSS技术,实现前端功能 使用学到的Axure工具,画出前端页面功能草图 ...
- CoderForces-913-C
A New Year party is not a New Year party without lemonade! As usual, you are expecting a lot of gues ...
- ZOJ 3195 Design the city (LCA 模板题)
Cerror is the mayor of city HangZhou. As you may know, the traffic system of this city is so terribl ...
- Orleans的深入
1.序列化 序列化配置有几个坑这里我写出来 2.负载均衡 3.定时器与提醒 4.服务启动执行代码 5.监控 序列化 新建实体类 引用的包 Microsoft.Orleans.Core V2.12 M ...
- Lamada表达式小技巧介绍
函数式编程 @FunctionalInterface interface Lf{ void dispaly(); } @FunctionalInterface为显示定义函数时编程接口,不符合函数式编程 ...