博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot实践 - SpringBoot+MySql+Redis
阅读量:4701 次
发布时间:2019-06-09

本文共 7465 字,大约阅读时间需要 24 分钟。

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

先说说他的优点:

读写性能优异

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

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

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

 

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

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

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

2. 操作如下

  a.在pom.xml引入如下依赖
org.springframework.boot
spring-boot-starter-data-redis
com.google.code.gson
gson
2.8.0

 

  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 */@Configurationpublic 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 */@Repositorypublic 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(0).getName()); return user; }}

 

  e.application.yml 配置如下(redis host,port,password,database 注意)
#redis  redis:    #database:9    host: 100.100.100.100    port: 1234    password: 1234    database: 1    pool:      max-idle: 8      min-idle: 0      max-active: 8       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(0).getName()); return result; }

 3.运行效果

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

b.查看redis

c.浏览器查看数据

代码已上传至 Github ,

转载于:https://www.cnblogs.com/cnmenglang/p/6424236.html

你可能感兴趣的文章
招投标专家库
查看>>
OJ-2:区间问题【九度1554】
查看>>
NSURLSession详解
查看>>
实时处理与流处理
查看>>
从零开始的全栈工程师——js篇2.17(属性和节点获取)
查看>>
python学习笔记(三)、字典
查看>>
在页面加载后执行任务
查看>>
图形学-绘制
查看>>
MYSQL中批量替换某个字段的部分数据
查看>>
ArcGIS js api开发环境配置
查看>>
记一次腾讯IEG面试失败经历
查看>>
hibernate的get、load的方法的区别,IllegalArgument异常
查看>>
lua 获取文件名和扩展名
查看>>
Spring中获取数据库表主键序列
查看>>
安装NLTK出现的问题与解决方法
查看>>
vb 可变长 数组
查看>>
android surfaceview 画
查看>>
jquery json 结合
查看>>
压缩OLEVARIANT数据
查看>>
ZOJ 3687
查看>>