欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理

程序员文章站 2022-12-17 21:10:52
一、Redis简介 Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch。这些案例整理好后,陆续都会上传Git。 SpringBoot2 版本,支持的组件越来越 ......

一、redis简介

spring boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多nosql数据库一样提供了自动化配置的支持,包括:redis, mongodb, elasticsearch。这些案例整理好后,陆续都会上传git。
springboot2 版本,支持的组件越来越丰富,对redis的支持不仅仅是扩展了api,更是替换掉底层jedis的依赖,换成lettuce。
本案例需要本地安装一台redis数据库。

二、spring2.0集成redis

1、核心依赖

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-redis</artifactid>
</dependency>

2、配置文件

# 端口
server:
  port: 8008
spring:
  application:
    # 应用名称
    name: node08-boot-redis
  # redis 配置
  redis:
    host: 127.0.0.1
    #超时连接
    timeout: 1000ms
    jedis:
      pool:
        #最大连接数据库连接数,设 0 为没有限制
        max-active: 8
        #最大等待连接中的数量,设 0 为没有限制
        max-idle: 8
        #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
        max-wait: -1ms
        #最小等待连接中的数量,设 0 为没有限制
        min-idle: 0

这样redis的环境就配置成功了,已经可以直接使用封装好的api了。

3、简单测试案例

import org.springframework.data.redis.core.redistemplate;
import org.springframework.data.redis.core.stringredistemplate;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;
import javax.annotation.resource;
import java.util.concurrent.timeunit;
@restcontroller
public class rediscontroller {
    @resource
    private stringredistemplate stringredistemplate ;
    @requestmapping("/setget")
    public string setget (){
        stringredistemplate.opsforvalue().set("cicada","smile");
        return stringredistemplate.opsforvalue().get("cicada") ;
    }
    @resource
    private redistemplate redistemplate ;
    /**
     * 设置 key 的有效期 10 秒
     */
    @requestmapping("/setkeytime")
    public string setkeytime (){
        redistemplate.opsforvalue().set("timekey","timevalue",10, timeunit.seconds);
        return "success" ;
    }
    @requestmapping("/gettimekey")
    public string gettimekey (){
        // 这里 key 过期后,返回的是字符串 'null'
        return string.valueof(redistemplate.opsforvalue().get("timekey")) ;
    }
}

4、自定义序列化配置

import org.slf4j.logger;
import org.slf4j.loggerfactory;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.data.redis.connection.lettuce.lettuceconnectionfactory;
import org.springframework.data.redis.core.redistemplate;
import org.springframework.data.redis.serializer.genericjackson2jsonredisserializer;
import org.springframework.data.redis.serializer.stringredisserializer;
import java.io.serializable;
/**
 * redis 配置
 */
@configuration
public class redisconfig {
    private static final logger logger = loggerfactory.getlogger(redisconfig.class) ;
    /**
     * 序列化配置
     */
    @bean
    public redistemplate<string, serializable> redistemplate
            (lettuceconnectionfactory  redisconnectionfactory) {
        logger.info("redisconfig == >> redistemplate ");
        redistemplate<string, serializable> template = new redistemplate<>();
        template.setkeyserializer(new stringredisserializer());
        template.setvalueserializer(new genericjackson2jsonredisserializer());
        template.setconnectionfactory(redisconnectionfactory);
        return template;
    }
}

5、序列化测试

import com.boot.redis.entity.user;
import org.springframework.data.redis.core.redistemplate;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.restcontroller;
import javax.annotation.resource;
import java.util.arraylist;
import java.util.list;
@restcontroller
public class serializecontroller {
    @resource
    private redistemplate redistemplate ;
    @requestmapping("/setuser")
    public string setuser (){
        user user = new user() ;
        user.setname("cicada");
        user.setage(22);
        list<string> list = new arraylist<>() ;
        list.add("小学");
        list.add("初中");
        list.add("高中");
        list.add("大学");
        user.seteducation(list);
        redistemplate.opsforvalue().set("userinfo",user);
        return "success" ;
    }
    @requestmapping("/getuser")
    public user getuser (){
        return (user)redistemplate.opsforvalue().get("userinfo") ;
    }
}

三、源代码地址

github地址:知了一笑
https://github.com/cicadasmile/spring-boot-base
码云地址:知了一笑
https://gitee.com/cicadasmile/spring-boot-base

SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理