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

一、创建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. NAT的三种类型

    一.静态NAT 内部本地地址一对一转换成内部全局地址,相当内部本地的每一台PC都绑定了一个全局地址,即使这个地址没有被使用,其他的电脑也不能拿来转换使用,这样容易造成IP地址的资源浪费,一般是用于在内 ...

  2. 15.Django基础十一之认证系统

    一 auth模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个 ...

  3. VIM操作记录

    =============================================== 2019/12/12_第1次修改 vr7jj ============================= ...

  4. Reachability的使用

    刚到一家新公司 做新项目 关于网络状态的监听和同事产生了不一样的看法 原来我的网络监听都是自己写的 后来发现自己不是一般的傻 有一个叫做Reachability的东西 很简单 很实用 很暴力 下面就是 ...

  5. 设计模式GOF23(行为型模式)

    场景: – 公司里面,报销个单据需要经过流程: • 申请人填单申请,申请给经理 • 小于1000,经理审查. • 超过1000,交给总经理审批. • 总经理审批通过 – 公司里面,请假条的审批过程: ...

  6. [TimLinux] Python Django myblog启动

    1. myblog介绍 自己给自己定的一个学习项目,用于: 使用学到的Python Web开发技术,框架django 使用学到的CSS技术,实现前端功能 使用学到的Axure工具,画出前端页面功能草图 ...

  7. CoderForces-913-C

    A New Year party is not a New Year party without lemonade! As usual, you are expecting a lot of gues ...

  8. 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 ...

  9. Orleans的深入

    1.序列化  序列化配置有几个坑这里我写出来 2.负载均衡 3.定时器与提醒 4.服务启动执行代码 5.监控 序列化 新建实体类 引用的包 Microsoft.Orleans.Core V2.12 M ...

  10. Lamada表达式小技巧介绍

    函数式编程 @FunctionalInterface interface Lf{ void dispaly(); } @FunctionalInterface为显示定义函数时编程接口,不符合函数式编程 ...