springboot了解mysql_SpringBoot实践 - SpringBoot+MySql+Redis

大家都知道redis的强大之处,在目前应用上也是大显神威。

先说说他的优点:

1 读写性能优异

2 支持数据持久化,支持AOF日志和RDB快照两种持久化方式

3 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

4 数据结构丰富:除了支持string类型的value外还支持string、hash、set、sortedset、list等数据结构。

那么现在我们在 StringBoot+mysql的基础上引入Redis缓存中间件。

(关于SpringBoot+mysql的Demo可查看SpringBoot+Mysql )

1.先看下完成后的代码结构

springboot了解mysql_SpringBoot实践 - SpringBoot+MySql+Redis_第1张图片

2. 操作如下

a.在pom.xml引入如下依赖

org.springframework.boot

spring-boot-starter-data-redis

com.google.code.gson

gson

2.8.

b.添加 RedisConfiguration.java

package com.example.config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.core.StringRedisTemplate;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

/**

* @ClassName: RedisConfiguration

* @Description: Redis Config

* @author mengfanzhu

* @date 2017年2月21日 下午2:03:26

*/

@Configuration

public class RedisConfiguration {

@Bean

@SuppressWarnings({ "rawtypes", "unchecked" })

public RedisTemplate redisTemplate(RedisConnectionFactory redisFactory){

StringRedisTemplate template = new StringRedisTemplate(redisFactory);

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new

Jackson2JsonRedisSerializer(Object.class);

ObjectMapper om = new ObjectMapper();

om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(om);

template.setValueSerializer(jackson2JsonRedisSerializer);

template.afterPropertiesSet();

return template;

}

}

c.添加  UserRedis.java

package com.example.service;

import java.util.List;

import java.util.concurrent.TimeUnit;

import org.apache.commons.lang.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.stereotype.Repository;

import com.example.entity.User;

import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;

/**

* @ClassName: UserRedis

* @Description: redis 提供5种数据类型的操作

* String ,hash ,list , set , zset

* @author mengfanzhu

* @date 2017年2月21日 下午2:01:43

*/

@Repository

public class UserRedis {

@Autowired

private RedisTemplate redisTemplate;

public void addUser(String key,Long time,User user){

Gson gson = new Gson();

redisTemplate.opsForValue().set(key, gson.toJson(user),time,TimeUnit.MINUTES);

}

public void addUserList(String key,Long time,List userList){

Gson gson = new Gson();

redisTemplate.opsForValue().set(key, gson.toJson(userList),time,TimeUnit.MINUTES);

}

public User getUserByKey(String key){

Gson gson = new Gson();

User user = null;

String userJson = redisTemplate.opsForValue().get(key);

if(StringUtils.isNotEmpty(userJson)){

user = gson.fromJson(userJson, User.class);

}

return user;

}

public List getUserListByKey(String key){

Gson gson = new Gson();

List userList = null;

String userJson = redisTemplate.opsForValue().get(key);

if(StringUtils.isNotEmpty(userJson)){

userList = gson.fromJson(userJson, new TypeToken>(){}.getType() );

}

return userList;

}

public void deleteByKey(String key){

redisTemplate.opsForValue().getOperations().delete(key);

}

}

d.添加 UserRedisService.java

package com.example.service;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.util.Assert;

import com.example.config.RedisConfiguration;

import com.example.entity.Department;

import com.example.entity.Role;

import com.example.entity.User;

/**

* @ClassName: UserRedisService

* @Description: user redis

* @author mengfanzhu

* @date 2017年2月21日 下午2:25:39

*/

@Service

@ContextConfiguration(classes = {RedisConfiguration.class,UserRedis.class} )

public class UserRedisService {

private Logger logger = LoggerFactory.getLogger(UserRedisService.class);

@Autowired

private UserRedis userRedis;

public void redisInitData(){

Department department = new Department();

department.setName("科技部REDIS");

Role role = new Role();

role.setName("管理员REDIS");

List roleList = new ArrayList();

roleList.add(role);

User user =new User();

user.setName("管理员REDIS");

user.setLoginName("adminRedis");

user.setCreatedate(new Date());

user.setRoleList(roleList);

user.setDepartment(department);

logger.info("key:" + this.getClass().getName()+":userByLoginName:"+user.getLoginName());

userRedis.deleteByKey(this.getClass().getName()+":userByLoginName:"+user.getLoginName());

userRedis.addUser(this.getClass().getName()+":userByLoginName:"+user.getLoginName(),3600L,user);

}

public User getUserRedis(String loginName){

User user = userRedis.getUserByKey(this.getClass().getName()+":userByLoginName:"+loginName);

Assert.notNull(user,"用户为空!");

logger.info("===user=== name:{},loginName: {},departmentName:{}, roleName:{}",

user.getName(),user.getLoginName(),user.getDepartment().getName(),user.getRoleList().get().getName());

return user;

}

}

e.application.yml 配置如下(redis host,port,password,database 注意)

#redis

redis:

#database:

host: 100.100.100.100

port:

password:

database:

pool:

max-idle:

min-idle:

max-active:

max-wait: -1

f. UserController.java 添加

@Autowired

private UserRedisService userRedisService;

/**

* @Title: UserController

* @Description: 初始化redis数据

* @return

* @author mengfanzhu

* @throws

*/

@RequestMapping("/initRedisdata")

@ResponseBody

public String initRedisData(){

userRedisService.redisInitData();

return "success";

}

@RequestMapping("/getUserRedisByLoginName/{loginName}")

@ResponseBody

public Map getUserRedisByLoginName(@PathVariable String loginName){

Map result = new HashMap();

User user = userRedisService.getUserRedis(loginName);

Assert.notNull(user);

result.put("name", user.getName());

result.put("loginName", user.getLoginName());

result.put("departmentName",user.getDepartment().getName());

result.put("roleName", user.getRoleList().get().getName());

return result;

}

3.运行效果

a.浏览器输入  localhost:9090/user/initRedisdata

springboot了解mysql_SpringBoot实践 - SpringBoot+MySql+Redis_第2张图片

b.查看redis

springboot了解mysql_SpringBoot实践 - SpringBoot+MySql+Redis_第3张图片

c.浏览器查看数据

springboot了解mysql_SpringBoot实践 - SpringBoot+MySql+Redis_第4张图片

SpringBoot实践 - SpringBoot+mysql

关于springBoot是个神马东西以及优缺点,请自行搜索了解. LZ看到很多关于SpringBoot的Demo,单看一篇总是没法整合SpringBoot与Mysql.没法子,还是自己操刀来一发为妙. ...

基于springboot+bootstrap+mysql+redis搭建一套完整的权限架构【六】【引入bootstrap前端框架】

https://blog.csdn.net/linzhefeng89/article/details/78752658 基于springboot+bootstrap+mysql+redis搭建一套完整 ...

IDEA SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统

先放上github地址:spike-system,可以直接下载完整项目运行测试 SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统 技术栈:SpringBoot, MyS ...

Shiro整合springboot,freemaker,redis(含权限系统完整源码)

区块链技术联盟 2018-02-08 17:06:40 目录 一.导语 二.shiro功能介绍 三.shiro详解 四.shiro实战案例分享 五.系统配置 六.其他 一.导语 今天推荐给大家一个非常 ...

【springBoot】springBoot集成redis的key,value序列化的相关问题

使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 o ...

Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务

1 前言 之前整理了一个spring+jotm实现的分布式事务实现,但是听说spring3.X后不再支持jotm了,jotm也有好几年没更新了,所以今天整理springboot+Atomikos+jp ...

Java逆向工程SpringBoot + Mybatis Generator + MySQL

Java逆向工程SpringBoot+ Mybatis Generator + MySQL Meven pop.xml文件添加引用:

Springboot 2.0 - 集成redis

序 最近在入门SpringBoot,然后在感慨 SpringBoot较于Spring真的方便多时,顺便记录下自己在集成redis时的一些想法. 1.从springboot官网查看redis的依赖包 & ...

随机推荐

Linux学习 :中断处理机制 &; poll机制

中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务 的程序中去,服务完毕后再返回去继续运行被暂时中断的程序 ...

简单理解Struts2中拦截器与过滤器的区别及执行顺序

简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

自定义view imageviw

新建一个类继承imageview package com.exaple.myselfview; import android.content.Context; import android.graph ...

POJ 1054 The Troublesome Frog

The Troublesome Frog Time Limit: 5000MS Memory Limit: 100000K Total Submissions: 9581 Accepted: 2883 ...

ps -ef能列出进程号,和端口号没任何关系

1.ps -ef显示所有进程ID 2.netstat才显示端口号情况

jquery Mobile点击显示加载等待效果

点击某个按钮或链接时,触发等待加载效果:

Data visualization 课程 笔记3

Learn how humans work to create a more effective computer interface 三种reasoning的方式  Deductive Reason ...

Samba服务安装及配置

服务器环境:CentOS6.9 Linux 2.6.32-696.10.1.el6.x86_64 安装Samba服务 过程中会安装3个服务smb(文件.打印共享服务,使用139.445端口).nmb( ...

Centos 7 搭建FTP详细配置步骤方法

vsftpd的安裝使用: ftp概述:FTP(File Transfer protocol,文件传输协议)是经典的C/S架构的应用层协议,需要有服务端软件,客户端软件两个部共同组成实现文件传输功能. ...

第 2 章 容器架构 - 008 - Docker 组件如何协作?

容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本地没有 httpd 镜像. daemon 从 Docker Hub 下载镜像. 下载完成, ...

你可能感兴趣的:(springboot了解mysql_SpringBoot实践 - SpringBoot+MySql+Redis)