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

Spring Boot2(三):使用Spring Boot2集成Redis缓存

程序员文章站 2022-11-14 08:07:32
前言 前面一节总结了 "SpringBoot实现Mybatis的缓存机制" ,但是实际项目中很少用到Mybatis的二级缓存机制,反而用到比较多的是第三方缓存 "Redis" 。 Redis 是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。 安装启动Redis 安 ......

前言

前面一节总结了springboot实现mybatis的缓存机制,但是实际项目中很少用到mybatis的二级缓存机制,反而用到比较多的是第三方缓存redis

redis是一个使用ansi c编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。

安装启动redis

安装redis的就不讲太多了,直接去,下载redis-x64-3.2.100.zip,cmd,在redis目录下输入:redis-server.exe redis.windows.conf启动即可

另外可以通过redis桌面客户端可视化连接工具操作:

代码部署

快速建立spring boot项目

添加redis依赖

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

application.yml配置

spring:
  redis:
    host: 127.0.0.1
    database: 0
    password:
    port: 6379
    jedis:
      pool:
        max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1ms  # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 10  # 连接池中的最大空闲连接
        min-idle: 5 # 连接池中的最小空闲连接

redisconfig配置类

@autowired
private redisconnectionfactory factory;

/**
 *
 * @return
 */
@bean
public redistemplate<string, object> redistemplate() {
    redistemplate<string, object> redistemplate = new redistemplate<>();
    //更改在redis里面查看key编码问题
    redistemplate.setkeyserializer(new stringredisserializer());
    redistemplate.sethashkeyserializer(new stringredisserializer());
    redistemplate.sethashvalueserializer(new stringredisserializer());
    redistemplate.setvalueserializer(new jdkserializationredisserializer());
    redistemplate.setconnectionfactory(factory);
    return redistemplate;
}

redisutils工具类

@autowired
private redistemplate redistemplate;
// 简单的k-v操作
@resource(name="redistemplate")
private valueoperations<string, string> valueoperations;

// 针对map类型的数据操作
@resource(name="redistemplate")
private hashoperations<string, string, object> hashoperations;

// 针对list类型的数据操作
@resource(name="redistemplate")
private listoperations<string, object> listoperations;

// set类型数据操作
@resource(name="redistemplate")
private setoperations<string, object> setoperations;

// zset类型数据操作
@resource(name="redistemplate")
private zsetoperations<string, object> zsetoperations;

实体类syscodeentity

@data
public class syscodeentity implements serializable {

    private static final long serialversionuid = 1l;

    private int id;

    // 分类编码
    private string kindcode;

    // 分类名称
    private string kindname;

    // code编码
    private string code;
    ......
}

serviceimpl实现类

/**
 * 查询所有数字字典
 * @return
 */
@override
public list<syscodeentity> querycodeall() {
    logger.info("先从缓存中查找,如果没有则去数据进行查询");
    list<syscodeentity> codelist = (list<syscodeentity>)redistemplate.opsforlist().leftpop("codelist");
    if (codelist == null) {
        logger.info("说明缓存中没有数据,则到数据库中查询");
        codelist = syscodedao.querycodeall();

        logger.info("将数据库获取的数据存入缓存");
        redistemplate.opsforlist().leftpush("codelist", codelist);
    } else {
        logger.info("则说明缓存中存在,直接从缓存中获取数据");
    }
    logger.info("codelist=" + codelist);
    return codelist;
}

上面例子具体解释已经在注释中体现,通过opsforlist的leftpop和leftpush存入和获取redis缓存的数据。

controller层实现

/**
 * 查询所有数字字典
 * @return
 */
@requestmapping("/getall")
private list<syscodeentity> getuser() {
    long starttime = system.currenttimemillis(); //开始时间
    list<syscodeentity> codelist = syscodeservice.querycodeall();
    long endtime = system.currenttimemillis(); //结束时间
    system.out.println("查询数据库--共耗时:" + (endtime - starttime) + "毫秒"); //1007毫秒
    return codelist;
}

postman进行测试

http://localhost:8080/getall

日志信息

Spring Boot2(三):使用Spring Boot2集成Redis缓存

总结和扩展

1、redis支持:字符串string、哈希hash、列表list、集合set、有序集合sorted set、发布订阅pub/sub、事务transactions,7种数据类型

2、redis实用场景:缓存系统、计数器、消息列队系统、排行版及相关问题、社交网络、按照用户投票和时间排序、过期项目处理、实时系统

3、redis的高级功能:慢查询(内部执行时间超过某个指定的时限查询)、pipeline管道(降低客户端与redis通信次数,适用于批处理)、bitmap位图(针对大数据量设计)、hyperloglog(极小空间完成独立数据统计)、发布订阅、消息队列、geo地理位置存储

4、redis持久化:

​ 快照rdb(使用快照,一种半持久耐用模式。不时的将数据集以异步方式从内存以rdb格式写入硬盘)

​ 日志aof(1.1版本开始使用更安全的aof格式替代,一种只能追加的日志类型。将数据集修改操作记录起来。redis能够在后台对只可追加的记录作修改来避免无限增长的日志)

5、redis分布式解决方案:主从复制、集群...

后期持续探索redis技术 to be continued...

推荐阅读:redis 入门到分布式实践


关于作者:

个人博客:

github主页:

github博客:

掘金:

博客园:

知乎: