您好,欢迎来到微智科技网。
搜索
您的当前位置:首页【Spring Boot 2.0学习之旅-09】SpringBoot2.x整合Redis实战

【Spring Boot 2.0学习之旅-09】SpringBoot2.x整合Redis实战

来源:微智科技网

第九章 SpringBoot2.x整合Redis实战

09-1 分布式缓存Redis介绍

简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具

1、redis官网 https://redis.io/download

2、新手入门redis在线测试工具:http://try.redis.io/

09-2 源码编译安装Redis4.x

1、快速安装  https://redis.io/download#installation
        wget http://download.redis.io/releases/redis-4.0.9.tar.gz
        tar xzf redis-4.0.9.tar.gz
        cd redis-4.0.9
        make
		启动服务端:src/redis-server
		启动客户端:src/redis-cli

2、默认是本地访问的,需要开放访问
	1)打开redis.conf文件在NETWORK部分修改
	   注释掉bind 127.0.0.1可以使所有的ip访问redis
	   修改 protected-mode,值改为no

Windows下安装Redis

Redis 支持 32 位和 位。这个需要根据你系统平台的实际情况选择

打开文件夹,内容如下:

redis-server.exe redis.windows.conf

这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。

redis-cli.exe -h 127.0.0.1 -p 6379

设置键值对

set myKey abc

取出键值对:

get myKey

安装完成!done!!!

09-3 SpringBoot2.x整合Redis实战讲解

1.Spring Boot支持Redis基础项目

新建spring boot的基础项目

2.SpringBoot2.x整合Redis

2.1 目录结构

2.2 domain

JsonData.java

package com.lcz.spring_demo15.domain;

/**
 * @author : codingchao
 * @date : 2021-11-25 21:50
 * @Description:功能描述:响应结果类
 **/

import java.io.Serializable;


public class JsonData implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败
    private Object data; // 数据
    private String msg;// 描述

    public JsonData() {
    }

    public JsonData(Integer code, Object data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }

    // 成功,传入数据
    public static JsonData buildSuccess() {
        return new JsonData(0, null, null);
    }

    // 成功,传入数据
    public static JsonData buildSuccess(Object data) {
        return new JsonData(0, data, null);
    }

    // 失败,传入描述信息
    public static JsonData buildError(String msg) {
        return new JsonData(-1, null, msg);
    }

    // 失败,传入描述信息,状态码
    public static JsonData buildError(String msg, Integer code) {
        return new JsonData(code, null, msg);
    }

    // 成功,传入数据,及描述信息
    public static JsonData buildSuccess(Object data, String msg) {
        return new JsonData(0, data, msg);
    }

    // 成功,传入数据,及状态码
    public static JsonData buildSuccess(Object data, int code) {
        return new JsonData(code, data, null);
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String toString() {
        return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg
                + "]";
    }

}


2.3 controller

RedisController

package com.lcz.spring_demo15.controller;

import com.lcz.spring_demo15.domain.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author : codingchao
 * @date : 2021-11-25 21:51
 * @Description:
 **/
@RestController
@RequestMapping("/redis")
public class RedisController {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @GetMapping(value = "/add")
    public Object add(){
        redisTemplate.opsForValue().set("name","lcz");
        return JsonData.buildSuccess();
    }
    
    @GetMapping(value = "/get")
    public Object get(){
        String value = redisTemplate.opsForValue().get("name");
        return JsonData.buildSuccess(value);
    }
}

2.4 测试结果

小结:

简介:使用springboot-starter整合reids实战

	1、官网:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-redis
		集群文档:https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#cluster

	2、springboot整合redis相关依赖引入
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
    
    3、相关配置文件配置
		#=========redis基础配置=========
		spring.redis.database=0
		spring.redis.host=127.0.0.1
		spring.redis.port=6390
		# 连接超时时间 单位 ms(毫秒)
		spring.redis.timeout=3000

		#=========redis线程池设置=========
		# 连接池中的最大空闲连接,默认值也是8。
		spring.redis.pool.max-idle=200

		#连接池中的最小空闲连接,默认值也是0。
		spring.redis.pool.min-idle=200
		
		# 如果赋值为-1,则表示不;pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
		spring.redis.pool.max-active=2000

		# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时
		spring.redis.pool.max-wait=1000
	4、常见redistemplate种类讲解和缓存实操(使用自动注入)

		1、注入模板
		@Autowired
		private StirngRedisTemplate strTplRedis

		2、类型String,List,Hash,Set,ZSet
		对应的方法分别是opsForValue()、opsForList()、opsForHash()、opsForSet()、opsForZSet()

09-4 Redis工具类封装讲解和实战

1.Redis可视化管理与监控软件

2.封装redis工具类并操作

2.1 目录结构

2.2 domain

User.java

package com.lcz.spring_demo15.domain;

import java.util.Date;

public class User {

	private int age;
	
	private String pwd;
	
	private String phone;
	
	private Date createTime;

	
	
	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public User() {
		super();
	}

	public User(int age, String pwd, String phone, Date createTime) {
		super();
		this.age = age;
		this.pwd = pwd;
		this.phone = phone;
		this.createTime = createTime;
	}	
}

2.3 utils

java对象转字符串JsonUtils.java

package com.lcz.spring_demo15.uitls;

import java.io.IOException;

import org.springframework.util.StringUtils;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUtils {

    private static ObjectMapper objectMapper = new ObjectMapper();
    
    //对象转字符串
    public static <T> String obj2String(T obj){
        if (obj == null){
            return null;
        }
        try {
            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    
    //字符串转对象
    public static <T> T string2Obj(String str,Class<T> clazz){
        if (StringUtils.isEmpty(str) || clazz == null){
            return null;
        }
        try {
            return clazz.equals(String.class)? (T) str :objectMapper.readValue(str,clazz);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

Redis工具类RedisClient.java

package com.lcz.spring_demo15.uitls;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

/**
 * 功能描述:redis工具类
 *
 * <p> 创建时间:Apr 29, 2018 10:07:30 PM </p> 
 *
 */
@Component
public class RedisClient {

	
	
	@Autowired
	private StringRedisTemplate redisTpl; //jdbcTemplate

	
	
	/**
	 * 功能描述:设置key-value到redis中
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean set(String key ,String value){
		try{
			redisTpl.opsForValue().set(key, value);
			return true;
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
		
	}
	
	
	/**
	 * 功能描述:通过key获取缓存里面的值
	 * @param key
	 * @return
	 */
	public String get(String key){
		return redisTpl.opsForValue().get(key);
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
//	@Autowired
//	private StringRedisTemplate redisTemplate;
//	
//	
//	 /** 
//     * 通过字符串key获取值 
//     * @param key 键 
//     * @return 值 
//     */  
//    public String get(String key){  
//        return key==null?null:redisTemplate.opsForValue().get(key);  
//    } 
//    
//    
//    /** 
//     * 普通缓存放入 
//     * @param key 键 
//     * @param value 值 
//     * @return true成功 false失败 
//     */  
//    public boolean set(String key,String value) {  
//         try {  
//            redisTemplate.opsForValue().set(key, value);  
//            return true;  
//        } catch (Exception e) {  
//            e.printStackTrace();  
//            return false;  
//        }  
//          
//    }  
//    
    
    
    
    
    
    
    
    
//    
//	/**
//	 * 功能描述:设置某个key过期时间
//	 * @param key
//	 * @param time
//	 * @return
//	 */
//	  public boolean expire(String key,long time){  
//	        try {  
//	            if(time>0){  
//	                redisTemplate.expire(key, time, TimeUnit.SECONDS);  
//	            }  
//	            return true;  
//	        } catch (Exception e) {  
//	            e.printStackTrace();  
//	            return false;  
//	        }  
//	    }  
//
//	  	
//	  
//	  
//	  /**
//	   * 功能描述:根据key 获取过期时间 
//	   * @param key
//	   * @return
//	   */
//	  public long getExpire(String key){  
//	        return redisTemplate.getExpire(key,TimeUnit.SECONDS);  
//	    }  
//	  
//	  
//	  	/** 
//	     * 递增 
//	     * @param key 键 
//	     * @return 
//	     */  
//	    public long incr(String key, long delta){    
//	        return redisTemplate.opsForValue().increment(key, delta);  
//	    }  
//	    
//	    
//	    /** 
//	     * 递减 
//	     * @param key 键 
//	     * @param delta 要减少几
//	     * @return 
//	     */  
//	    public long decr(String key, long delta){    
//	        return redisTemplate.opsForValue().increment(key, -delta);    
//	    }    
//	    
//	    //==============Map结构=====================
//	    
//	    
//	    //==============List结构=====================
//	    
//	    
//	    
	    
}

2.4 controller

RedisController

package com.lcz.spring_demo15.controller;

import com.lcz.spring_demo15.domain.JsonData;
import com.lcz.spring_demo15.domain.User;
import com.lcz.spring_demo15.uitls.JsonUtils;
import com.lcz.spring_demo15.uitls.RedisClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * @author : codingchao
 * @date : 2021-11-25 21:51
 * @Description:
 **/
@RestController
@RequestMapping("/redis")
public class RedisController {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private RedisClient redis;

    @GetMapping(value = "/add")
    public Object add(){
        redisTemplate.opsForValue().set("name","lcz");
        return JsonData.buildSuccess();
    }
    
    @GetMapping(value = "/get")
    public Object get(){
        String value = redisTemplate.opsForValue().get("name");
        return JsonData.buildSuccess(value);
    }

    @GetMapping(value="save_user")
    public Object saveUser(){
        User user = new User(1, "abc", "11", new Date());
        String userStr = JsonUtils.obj2String(user);
        boolean flag = redis.set("base:user:11", userStr);
        return JsonData.buildSuccess(flag);

    }

    @GetMapping(value="find_user")
    public Object findUser(){

        String userStr = redis.get("base:user:11");
        User user = JsonUtils.string2Obj(userStr, User.class);

        return JsonData.buildSuccess(user);

    }
}

2.5 测试结果

2.6 Junit单元测试

package com.lcz.spring_demo15.base;

import com.lcz.spring_demo15.SpringDemo15Application;
import com.lcz.spring_demo15.domain.User;
import com.lcz.spring_demo15.uitls.JsonUtils;
import com.lcz.spring_demo15.uitls.RedisClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)  //底层用junit  SpringJUnit4ClassRunner
@SpringBootTest(classes={SpringDemo15Application.class})//启动整个springboot工程
public class JsonTest {
	@Autowired
	private StringRedisTemplate strTpl;
	
	@Autowired
	private RedisClient redis;
	
	@Test
	public void testOne(){
		User u = new User();
		u.setAge(1);
		u.setPhone("22222");
		u.setPwd("0000");	
		
		String str = JsonUtils.obj2String(u);
		strTpl.opsForValue().set("str", str);
		System.out.println(str);
		
	}

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务