废话少说,上代码,结合代码讲解:

一、创建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缓存管理接口代码实现的更多相关文章

  1. 前后端分离+本地服务实时刷新+缓存管理+接口proxy+静态资源增量更新+各种性能优化+上线运维发布——gulp工作流搭建

    技巧集:http://www.gulpjs.com.cn/docs/recipes/ 其实无非就是利用各种gulp插件.node脚本对项目文件做各种IO操作,只是备忘,需要的话,还是自己重新写最合适. ...

  2. springcloud微服务基于redis集群的单点登录

    springcloud微服务基于redis集群的单点登录 yls 2019-9-23 简介 本文介绍微服务架构中如何实现单点登录功能 创建三个服务: 操作redis集群的服务,用于多个服务之间共享数据 ...

  3. Rainbond v5.1.2发布,微服务架构应用便捷管理和交付

    Rainbond v5.1.2发布,微服务架构应用便捷管理和交付 Rainbond是开源的企业应用云操作系统,支撑企业应用的开发.架构.交付和运维的全流程,通过无侵入架构,无缝衔接各类企业应用,底层资 ...

  4. 微服务-使用Redis实现分布式缓存

    在单体中对于key信息和用户信息是放在内存中放的,通过session进行管理. 微服务是要放在分布式缓存中,以实现服务的无状态化. @Autowired private StringRedisTemp ...

  5. 架构设计 | 基于Seata中间件,微服务模式下事务管理

    源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...

  6. springboot redis 缓存对象

    只要加入spring-boot-starter-data-redis , springboot 会自动识别并使用redis作为缓存容器,使用方式如下 gradle加入依赖 compile(" ...

  7. 从.Net到Java学习第七篇——SpringBoot Redis 缓存穿透

    从.Net到Java学习系列目录 场景描述:我们在项目中使用缓存通常都是先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回.这个时候如果我们查询的某一个数 ...

  8. 一个微服务+DDD(领域驱动设计)的代码结构示例

    前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : https://www.cnblogs.com/hafiz/p/9388334.htmlhttps://blog.cs ...

  9. 微服务springboot视频最新SpringBoot2.0.3版本技术视频教程【免费学习】

    超火爆的springboot微服务技术怎么学,看这里,springboot超详细的教程↓↓↓↓↓↓https://ke.qq.com/course/179440?tuin=9b386640 01.sp ...

随机推荐

  1. HOOK的类型

  2. RocketMq在SparkStreaming中的总结

    其实Rocketmq的给第三方的插件已经全了,如果大家有兴趣的话请移步https://github.com/apache/rocketmq-externals.本文主要是结合笔者已有的rmq在spar ...

  3. 利用python实现dll依赖关系导出

    #说明:遍历rootdir目录下所有dll,导出每个dll依赖的dll信息到dstdir目录下 # 配合NotePad++打开所有txt,搜索,可快速定位到某dll被依赖的所有dll文件 import ...

  4. luogu P2947 [USACO09MAR]向右看齐Look Up |单调队列

    题目描述 Farmer John's N (1 <= N <= 100,000) cows, conveniently numbered 1..N, are once again stan ...

  5. luogu P3830 [SHOI2012]随机树

    输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均 ...

  6. Python--glob模块

    0.glob模块和通配符 glob模块最主要的方法有2个: 1.glob() 2.iglob() 以上2分方法一般和通配符一起使用,常用的通配符有3个: * :匹配零个或多个字符 ? :匹配任何单个的 ...

  7. Webpack基础知识总结

    本文将从多个方面回顾下自己了解的Webpack知识,包括常见的配置项,前端搭建的一些方法和项目实际优化方法,有错误的地方还请指出并多多包涵. 一.关于Webpack 1.概念 本质上,webpack ...

  8. java容器篇

    引言 第三天卡... 今天主要看了下java容器方面的知识,很累但是很充实.吃两把鸡去了,休息一下,再战. 开始 -Collection 存储对象的集合:Map 存储键值对的映射表    -Itera ...

  9. CouchDB学习-集群管理

    官方文档 集群管理 理论 在etc/fefault.ini文件中有以下部分: [cluster] q=8 n=3 q - 分片的数量 n - 每一份文档的拷贝数量(加上原文档一共几份副本) 创建数据库 ...

  10. (2019版本可用)Pycharm的安装,破解

    前言 python的操作工具pycharm,是专门用来写python语言的. 因为之前在网上找到了,但是太麻烦了,所以整理整理. pycharm安装 官网可以选择下载(pycharm最新版有可能破解不 ...