本文在个人技术博客【鸟不拉屎】同步发布,详情可猛戳 亦可扫描文章末尾二维码关注个人公众号【鸟不拉屎】

前言

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

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

安装启动Redis

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

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

代码部署

快速建立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

日志信息

总结和扩展

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分布式解决方案:主从复制、集群...

示例代码-github

后期持续探索Redis技术 To be continued...

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


关于作者:

个人博客:鸟不拉屎

github主页:niaobulashi

github博客:鸟不拉屎

掘金:鸟不拉屎

博客园:鸟不拉屎

知乎:鸟不拉屎

Spring Boot2(三):使用Spring Boot2集成Redis缓存的更多相关文章

  1. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第七天】(redis缓存)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

  2. 搞懂分布式技术14:Spring Boot使用注解集成Redis缓存

    本文内容参考网络,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutor ...

  3. spring boot(三):Spring Boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  4. (转)Spring Boot(三):Spring Boot 中 Redis 的使用

    http://www.ityouknow.com/springboot/2016/03/06/spring-boot-redis.html Spring Boot 对常用的数据库支持外,对 Nosql ...

  5. Spring Boot(三):Spring Boot 中 Redis 的使用

    Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化. Redis 介绍 Redis 是目前业界使用最广泛的内存数据存储.相比 Memcached,Redis 支持更 ...

  6. Spring boot(三)在Spring boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  7. Spring系列(三):Spring IoC中各个注解的理解和使用

    原文链接:1. http://www.cnblogs.com/xdp-gacl/p/3495887.html       2. http://www.cnblogs.com/xiaoxi/p/5935 ...

  8. 集成Redis缓存

    一.简介 1.场景 由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页数据缓存到redis中,减少数据库压力和提高访问速度. 2.RedisTemplate Jedis是Redi ...

  9. springboot集成redis缓存

    1.pom.xml增加redis缓存起步依赖(spring-boot-starter-parent包含许多starter版本) <dependency> <groupId>or ...

随机推荐

  1. C++ Lambda表达式基本用法(言简意赅,非常清楚)

    创建一个匿名函数并执行.Objective-C采用的是上尖号^,而C++ 11采用的是配对的方括号[].实例如下: 1 2 3 4 5 6 7 8 9 #include <iostream> ...

  2. [C++] 反编译器

    各种开源的decompiler都不太好用,眼下最好的反编译器是IDA pro. 尽管是收费的,只是破解版非常好找. 我试过5.5版本号的,还不错. 我把windows notepad进行了反编译,多少 ...

  3. SCJP考试题310-025(第二套<4>)92-147/147

    310-025 Leading the way in IT testing and certification tools,QUESTION NO: 92 Given: 1. String foo = ...

  4. ubuntu设置root密码及 Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次

    原文:ubuntu设置root密码及 Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次 alt+f2,在弹出的运行窗口中输入:gnome-terminal sudo pa ...

  5. 双目相机标定以及立体测距原理及OpenCV实现

    单目相机标定的目标是获取相机的内参和外参,内参(1/dx,1/dy,Cx,Cy,f)表征了相机的内部结构参数,外参是相机的旋转矩阵R和平移向量t.内参中dx和dy是相机单个感光单元芯片的长度和宽度,是 ...

  6. WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口

    原文:WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/p ...

  7. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object 版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...

  8. 使用Photoshop切图的三种方式

    PhotoShop切图的三种方式 1. 原始切图 (1)选择工具栏中的切片工具 (2)找到要切片的元素,在右侧的图层框中,使元素背景隐藏,然后用切片工具选择需要切片的元素     (3)导出为web常 ...

  9. Cocos2d-x 脚本语言Lua介绍

    Cocos2d-x 脚本语言Lua介绍 本篇博客记录Lua学习.学习来自eoe论坛,Lua语言开发Cocos2d-x游戏入门视频教程,猛戳下面地址: http://www.eoeandroid.com ...

  10. WPF编游戏系列 之二 图标效果

    原文:WPF编游戏系列 之二 图标效果        本篇将要实现图标的两个效果:1. 显示图标标签,2. 图标模糊效果.在上一篇中提到Image没有HTML <img>的Title属性( ...