学习Spring Boot:(二十五)使用 Redis 实现数据缓存

前言

由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis。

正文

当应用程序要去缓存中读取数据,但是缓存中没有找到该数据,则重新去数据库中获取数据,然后将数据存入缓存中。
还有当我们需要更新或者删除缓存中的数据时候,需要让缓存失效。

cache

配置

在系统配置文件中加入 redis 的连接参数:

spring:redis:host: 192.168.19.200 # 120.79.208.199 # host ,默认 localhostport: 6379 # 端口号,默认6379pool:# 设置都是默认值,可以按需求设计max-active: 8 # 可用连接实例的最大数目,默认值为8;如果赋值为-1,则表示不限制;max-idle: 8  # 控制一个pool最多有多少个状态为idle(空闲的)的redis实例,默认值也是8。max-wait: -1 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。min-idle: 0 # 控制一个pool最少有多少个状态为idle(空闲的)的redis实例,默认值为0。timeout: 0 # 连接超时时间 单位 ms,默认为0password: master # 密码,根据自己的 redis 设计,默认为空

然后在系统入口启动类上面加入打开缓存的注解 @EnableCaching
如果没启用其他缓存,这样就自动打开 redis 缓存。

还可以自定义注册 RedisCacheManager,设置相关参数:

    @Beanpublic CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);// 设置缓存最大时间 24 hredisCacheManager.setDefaultExpiration(24 * 60 * 60);return redisCacheManager;}

使用

@Service
@CacheConfig(cacheNames = "em")
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeDao dao;@Override@Cacheable(key = "#p0")public Employee findOne(Long id) {return dao.findOne(id);}/*** 更新缓存中的数据,* 由于 redis 是存在外部,不是 ehcache 那样存在于项目进程中,需要我们主动去更新 缓存* @param employee* @return*/@Override@Transactional(rollbackFor = Exception.class)@CachePut(key = "#p0.id")public Employee update(Employee employee) {return dao.save(employee);}/*** 同样主动去删除 cache* @param id*/@Override@Transactional(rollbackFor = Exception.class)@CacheEvict(key = "#p0")public void delete(Long id) {dao.delete(id);}
}

注解的使用参考前面的[学习Spring Boot:(二十一)使用 EhCache 实现数据缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php ai库,收藏 | 深度学习框架、AI库、ML库、NLP库、CV库汇总!

一份包含深度学习框架、AI工具/库、机器学习工具/库、NLP工具/库、CV工具/库的汇总,并附有说明文档(有些是中英文文档都有)。之所以附带文档而不是源码,有两方面原因:先看文档,找出最适合自己的一个或两个(太多没必要,…

学习Spring Boot:(二十六)使用 RabbitMQ 消息队列

前言 前面学习了 RabbitMQ 基础,现在主要记录下学习 Spring Boot 整合 RabbitMQ ,调用它的 API ,以及中间使用的相关功能的记录。 相关的可以去[我的博客/RabbitMQ] 正文 我这里测试都是使用的是 topic 交换器,Spring Boot 2.…

appnode php,环境软件路径参考

[TOC]## Nginx* 主程序路径:/usr/sbin/nginx* 配置文件路径:/etc/nginx.conf* 服务控制命令:* CentOS 6:service nginx start|stop|reload|restart* CentOS 7:systemctl start|stop|reload|restart nginx.service## PH…

学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator

前言 主要是完成微服务的监控,完成监控治理。可以查看微服务间的数据处理和调用,当它们之间出现了异常,就可以快速定位到出现问题的地方。 springboot - version: 2.0 正文 依赖 maven 项目 在 pom.xml 文件中加入 actuator 的依赖&…

php实现注销功能,laravel 实现用户登录注销并限制功能

在项目根目录输入: php artisan make:controller Admin/LoginControllerphp artisan make:model Model/Admin -m运行之后 项目中会新增两个PHP文件新创建了admins用户表,此用户表默认新建中只有主键,创建时间,编辑时间。我们接下来…

将ipynb文件转为py的简单方法(图文并茂)

打开可以使用jupyter命令的命令窗口(如果没有jupyter则需要先安装jupyter),cd 命令进入到 ipynb 文件所在的文件夹,执行 jupyter nbconvert --to script xxx.ipynb 即可完成 ipynb 文件到 py 文件的转化,执行 jupyter …

学习Spring Boot:(二十八)Spring Security 权限认证

前言 主要实现 Spring Security 的安全认证,结合 RESTful API 的风格,使用无状态的环境。 主要实现是通过请求的 URL ,通过过滤器来做不同的授权策略操作,为该请求提供某个认证的方法,然后进行认证,授权成…

在PHP中如何要json中的数据,如何在不知道键值的情况下在php中读取JSON数据

我需要在php中读取firebase JSON URL然后显示它.我的firebase得到了以下.json数据:{"dDsdE4AlB7P5YYd4fWbYTQKCLPh1":{"email":"abhigmail.com","name":"abhishek"},"z1ceiLhdh9YVu7lGnVvqDWoWHFH3":{…

oracle 分区字符转换,Oracle 普通表与分区表转换

oracle 9i提供了dbms_redefinition包来实现数据库的表的在线重定义功能。在实际的应用上,我们可以利用这个包来进行:(1)堆表与分区之间进行转换。(2)重建表以减少HWM。10g能shrink,9i如果用move tablespace and rebuild index在move的时候会锁…

Java中使用有返回值的线程

在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable,可以获取线程中的返回值,但是获取线程的返回值的时候,需要注意&#xff…

Mybatis 插入时获取主键的方式

mybatis 作为一个主流的 ORM 框架,深受广大开发者的喜爱。有人的地方就有江湖,有代码的地方自然有坑,下面来说说获取 mybatis 的插入后返回的主键。 我们可以想一下自动增长的主键特性,在数据库里面肯定有某个地方管理 ID 的自增…

linux脚本怎么把文件地址变成动态地址,Linux脚本程序自动修改网卡配置文件中的MAC地址...

在玩Linux虚拟机的时候,一个安装好linux系统的virtual HDD会用于创建多个虚拟机,这样就不需要在创建每个虚拟机都安装一遍系统了。virtual HDD加载到虚拟机后,新的虚拟机的MAC地址就会和virtual系统中ifcfg-eth[0-9]中的MAC地址不…

MySQL + MyBatis 批量插入时存在则忽略或更新记录

一、存在时则忽略 为什么在发现重复时会忽略?这里面涉及到两个地方。 1、重复则忽略。那么首先是需要判断是否重复,这里是通过唯一索引判断是否重复的。如果表中唯一索引的字段已经存在与将要插入的记录行中唯一索引的字段值相同,则标识为重…

Linux 目录所属组设置,Linux系统用户与组管理命令及配置文件总结

一、Linux系统用户及组分类1、用户类别Linux系统中的用户大致可分为三类:root用户、系统用户、普通用户。每一个用户都拥有一个唯一的身份标识UID。2、组分类与用户信息对应的,Linux系统中的组也可分为三类:root组、系统组、普通组。每一个组…

linux 字符串 空,linux – bash空字符串/命令

你似乎把bash与其他一些编程语言混淆了.变量被替换,然后左边的内容被执行."$a"这是引号之间的a的内容. a是空的,所以这相当于:""那不是命令. “没有找到指令.”由于存在错误,执行不成功(shell返回代码不为0),因此命令的后半部分 – && …

@GetMapping和@PostMapping详解

首先要了解一下RequestMapping注解。 RequestMapping用于映射url到控制器类的一个特定处理程序方法。可用于方法或者类上面。也就是可以通过url找到对应的方法。 RequestMapping有8个属性。 value:指定请求的实际地址。 method:指定请求的method类型&…

实验楼 linux内核原理与分析,《Linux内核原理与分析》第一周作业 20189210

实验一 Linux系统简介这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别。其中学到了LInux中的应用程序大都为开源自由的软件,用户可以修改定制再发布;内核是实现多任务运行和硬件管理的…

MySQL的INSERT INTO··· ON DUPLICATE KEY UPDATE使用的几种情况

保存或更新 在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复…

linux svn 指定端口号,linux(Ubuntu)搭建Subversion服务器+修改svn端口号

一、搭建 Subversion 服务器1、首先需要安装 subversion 这个软件:sudo apt-get install subversion注:使用apt-get安装软件,ubuntu默认将软件下载到 /etc/bash_completion.d/ 目录下,可使用 sudo apt-get source packagename 下载…

java8 Stream API详解

文章目录一、Stream流概述二、创建Stream的方式相关API三、Stream的中间操作筛选与切片映射排序四、终止操作第一大类API(太过简单)第二大类AP归约收集一、Stream流概述 1、java8中有两大最为重要的改变,第一就是Lambda表达式,另…