当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Boot2(三):使用Spring Boot2集成Redis缓存

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

2019年06月30日  | 移动技术网IT编程  | 我要评论

弹簧刷,贺州民心网,热爱生命的手抄报

前言

前面一节总结了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://www.lhsxpumps.com/_localhost:8080/getall

日志信息

总结和扩展

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博客:

掘金:

博客园:

知乎:

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网