为Java项目添加Redis缓存的方法

Redis的安装

Redis一般有Linux和Windows两种安装方式,Windows的最高版本为3.2,Linux的最高版本为5.0,大家可以根据自己的需要添加

Linux

首先在linux下安装docker,在docker环境下安装redis5.0的镜像

docker pull redis:5.0

然后使用Docker命令启动Redis容器

docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-d redis:5.0 redis-server --appendonly yes

Windows

在redis官网下载windows版本的Redis
Redis下载链接

解压到指定目录

在当前地址栏输入cmd,或者用Win+Rd打开命令提示符,输入cmd,利用cd指令进入当前目录 执行redis的启动命令

redis-server.exe redis.windows.conf

默认的ip地址是127.0.0.1,默认端口号为6379

将Redis注册为服务的命令:

#注册服务
redis-server --service-install redis.windows.conf
#启动服务
redis-server --service-start
#停止服务
redis-server --service-stop
#删除服务
redis-server --service-uninstall

使用注解方式添加Redis缓存

Spring cache

Spring cache是SpringBoot融合Redis作为缓存最简单的实现方式之一,我们无需关注spring具体操作redis的过程,只需要使用它提供的@Cacheable 、@CachePut 、@CacheEvict 、@EnableCaching等注解就可以实现缓存功能

基本注解 @EnableCaching

开启缓存功能,一般放在启动类上。

@Cacheable

使用该注解的方法当缓存存在时,会从缓存中获取数据而不执行方法,当缓存不存在时,会执行方法并把返回结果存入缓存中。一般使用在查询方法上,可以设置如下属性:

value:缓存名称(必填),指定缓存的命名空间;
key:用于设置在命名空间中的缓存key值,可以使用SpEL表达式定义;
unless:条件符合则不缓存;
condition:条件符合则缓存。

@CachePut

使用该注解的方法每次执行时都会把返回结果存入缓存中。一般使用在新增方法上,可以设置如下属性:

value:缓存名称(必填),指定缓存的命名空间;
key:用于设置在命名空间中的缓存key值,可以使用SpEL表达式定义;
unless:条件符合则不缓存;
condition:条件符合则缓存。

@CacheEvict

使用该注解的方法执行时会清空指定的缓存。一般使用在更新或删除方法上,可以设置如下属性:

value:缓存名称(必填),指定缓存的命名空间;
key:用于设置在命名空间中的缓存key值,可以使用SpEL表达式定义;
condition:条件符合则缓存。

项目实战

1.引入依赖

在pom.xml中引入redis对应依赖

<!-- redis-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

2.配置Redis属性

修改配置文件application.yml,添加Redis的连接配置

spring:
	redis:
		host: 127.0.0.1 # Redis服务器地址(默认地址)
		database: 0 # Redis数据库索引(默认为0)
		port: 6379 # Redis服务器连接端口
		password: # Redis服务器连接密码(默认为空)
		timeout: 1000ms # 连接超时时间

3.在启动类上添加@EnableCaching注解

4.在ServiceImpl类中使用相关注解来实现缓存功能 查询(Cacheable)

修改/删除(CacheEvict)


新增(CachePut)

5.储存JSON格式数据

如果不对redis中数据格式进行设置,缓存的内容将类似乱码形式,我们可以通过给RedisTemplate设置JSON格式的序列化器,并通过配置RedisCacheConfiguration设置超时时间,在Redis中储存标准JSON数据,通过过期时间筛选不必要的缓存,节约空间

在config中新建BaseRedisConfig配置类

@Configuration
public class BaseRedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisSerializer<Object> serializer = redisSerializer();
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(serializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(serializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean
    public RedisSerializer<Object> redisSerializer() {
        //创建JSON序列化器
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //必须设置,否则无法将JSON转化为对象,会转化成Map类型
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(objectMapper);
        return serializer;
    }

    @Bean
    public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
        //设置Redis缓存有效期为1天
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer())).entryTtl(Duration.ofDays(1));
        return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
    }

    @Bean
    public RedisService redisService() {
        return new RedisServiceImpl();
    }
}

6.测试Redis缓存是否成功

我们可以利用postman测试一下接口

再通过Redis Desktop Manager查看一下Redis数据库中是否已存入对应缓存数据

到此,最简单的Java项目引入Redis缓存已经完成

以上就是为Java项目添加Redis缓存的方法的详细内容,更多关于java项目添加redis缓存的资料请关注我们其它相关文章!

(0)

相关推荐

  • javaWeb中使用Redis缓存实例解析

    直接进入主题: 一:serviceImpl定义: @Service public class JedisClientSingleService implements JedisClient { @Autowired private JedisPool jedisPool; @Override public String get(String key) { Jedis jedis = jedisPool.getResource(); String string = jedis.get(key);

  • 详解Java在redis中进行对象的缓存

    Java在redis中进行对象的缓存一般有两种方法,这里介绍序列化的方法,个人感觉比较方便,不需要转来转去. 一.首先,在存储的对象上实现序列化的接口 package com.cy.example.entity.system; import java.util.List; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableName; im

  • 在Java中使用redisTemplate操作缓存的方法示例

    背景 在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条.但同时对查询速度的要求也比较高. 这个数据库之前在没有使用Presto的情况下,使用的是Hive,使用Hive进行一个简单的查询,速度可能在几分钟.当然几分钟也并不完全是跑SQL的时间,这里面包含发请求,查询数据并且返回数据的时间的总和.但是即使这样,这样的速度明显不能满足交互式的查询需求. 我们的下一个解决方案就是Presto,在使用了Presto之后,查询速度降到了秒级.但是对于一个前端查询界面的交互式查询来

  • 【Redis缓存机制】详解Java连接Redis_Jedis_事务

    Jedis事务 我们使用JDBC连接Mysql的时候,每次执行sql语句之前,都需要开启事务:在MyBatis中,也需要使用openSession()来获取session事务对象,来进行sql执行.查询等操作.当我们对数据库的操作结束的时候,是事务对象负责关闭数据库连接. 事务对象用于管理.执行各种数据库操作的动作.它能够开启和关闭数据库连接,执行sql语句,回滚错误的操作. 我们的Redis也有事务管理对象,其位于redis.clients.jedis.Transaction下. Jedis事

  • java操作Redis缓存设置过期时间的方法

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息转为json串作为value保存在redis中,通常做法是: //生成token String token = UUID.randomUUID().toString(); //把用户信息写入redis jedisClient.set(REDIS_USER_SESSION_KEY + ":"

  • java中对Redis的缓存进行操作的示例代码

    Redis 是一个NoSQL数据库,也是一个高性能的key-value数据库.一般我们在做Java项目的时候,通常会了加快查询效率,减少和数据库的连接次数,我们都会在代码中加入缓存功能.Redis的高效缓存功能给我们解决了难题.下面我主要讲讲在Java项目中怎么去连接Redis服务器以及需要注意的事项. 1.导入必须的Jar包 使用Java操作Redis需要两个必须的Jar包:jedis-2.5.1.jar 和  commons-pool2-2.0.jar .每个版本可以不一样,根据你自己下载的

  • Java自定义注解实现Redis自动缓存的方法

    在实际开发中,可能经常会有这样的需要:从MySQL中查询一条数据(比如用户信息),此时需要将用户信息保存至Redis. 刚开始我们可能会在查询的业务逻辑之后再写一段Redis相关操作的代码,时间长了后发现这部分代码实际上仅仅做了Redis的写入动作,跟业务逻辑没有实质的联系,那么有没有什么方法能让我们省略这些重复劳动呢? 首先想到用AOP,在查询到某些数据这一切入点(Pointcut)完成我们的切面相关处理(也就是写入Redis).那么,如何知道什么地方需要进行缓存呢,也就是什么地方需要用到AO

  • Java客户端利用Jedis操作redis缓存示例代码

    前言 Redis是一个开源的Key-Value数据缓存,和Memcached类似.Redis多种类型的value,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型). Jedis 是 Redis 官方首选的 Java 客户端开发包.下面就来给大家详细关于Java客户端利用Jedis操作redis缓存的相关内容,话不多说,直接来看示例代码吧. 示例代码: //连接redis ,redis的默认端口是6379 Jedis

  • 为Java项目添加Redis缓存的方法

    Redis的安装 Redis一般有Linux和Windows两种安装方式,Windows的最高版本为3.2,Linux的最高版本为5.0,大家可以根据自己的需要添加 Linux 首先在linux下安装docker,在docker环境下安装redis5.0的镜像 docker pull redis:5.0 然后使用Docker命令启动Redis容器 docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -d red

  • SpringBoot项目中使用redis缓存的方法步骤

    本文介绍了SpringBoot项目中使用redis缓存的方法步骤,分享给大家,具体如下: Spring Data Redis为我们封装了Redis客户端的各种操作,简化使用. - 当Redis当做数据库或者消息队列来操作时,我们一般使用RedisTemplate来操作 - 当Redis作为缓存使用时,我们可以将它作为Spring Cache的实现,直接通过注解使用 1.概述 在应用中有效的利用redis缓存可以很好的提升系统性能,特别是对于查询操作,可以有效的减少数据库压力. 具体的代码参照该

  • 在SpringBoot中添加Redis及配置方法

    在实际的开发中,会有这样的场景.有一个微服务需要提供一个查询的服务,但是需要查询的数据库表的数据量十分庞大,查询所需要的时间很长. 此时就可以考虑在项目中加入缓存. 引入依赖 在maven项目中引入如下依赖.并且需要在本地安装redis. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifac

  • Springboot框架整合添加redis缓存功能

    目录 一:安装Redis 二:添加Redis依赖 三:添加Redis配置信息 四:创建RedisConfigurer 五:创建Redis常用方法 六:接口测试 Hello大家好,本章我们添加redis缓存功能 .另求各路大神指点,感谢 一:安装Redis 因本人电脑是windows系统,从https://github.com/ServiceStack/redis-windows下载了兼容windows系统的redis 下载后直接解压到自定义目录,运行cmd命令,进入到这个文件夹,在这个文件夹下运

  • Java自动添加重写的toString方法详解

    Java怎么自动添加重写的toString方法,这里我们将给大家介绍详细的解决方法. 首先,添加一个任意的类,具体的类型没有要求,然后在主程序中创建对象,这里要求构造方法的位置要求必须是可实例化的类或其子类对象. 然后在主程序中创建对象,这里要求构造方法的位置要求必须是可实例化的类或其子类对象. 然后,在该程序中点击鼠标右键,找到鼠标右键,找到source选项. 在第三步中找到source选项中,找到generate toString( )方法. 进入之后,什么都不用选择,直接点击界面最下方的o

  • JAVA项目字典与缓存搭配使用方法解析

    字典数据是什么? 这里说了字典不是软件工程中说的数据字典. 字典数据:用于动态设置某对象的属性是属于在一个可列举的数据范围内的某一类型数据,使用字典类型作为该类别属性的唯一标识 如:用户类型:学生,老师,家长,校长等 有什么作用? 字典数据由两个表组成:字典类型表 dict_type,字典类型数据表 dict_data 这个数据相当于java中的枚举类,可以被使用于前端的数据展示,下拉框数据集使用. 没有数据字典时业务操作方法: 定义学生枚举类,在代码中使用枚举类的key进行数据保存,在查询数据

  • Java项目开启远程调试的方法步骤(tomcat、springboot)

    当我们运行一个项目的时候,一般都是在本地进行debug.但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器. 环境 apache-tomcat-8.5.16 Linux 如何启用远程调试 tomcat开启远程调试 方法 切换到你的tomcat的bin目录/apache-tomcat-8.5.16/bin 下,执行: ./catalina.sh jpda start 执行上面的命令就可以开启远程debug了,如果想配置一些信息,比如端口号什么的,请参考下面的说明. 参数说明

  • Java中操作Redis的详细方法

    目录 1.准备操作 1.1 新建工程 1.2 sca-jedis工程依赖 1.3 sca-tempalte工程依赖 1.4 测试是否可以连接Redis 1.5 修改redis.conf文件 2. 基于Jedis实现对redis中字符串的操作 3. 模式总结 4. 连接池JedisPool应用 5. 单例模式创建连接池 拓展:volatile关键字 6. 项目工程实践 6.1 分布式id 6.2 单点登陆 6.3 投票系统 7. StringRedisTemplate 应用 7.1 修改yml文件

  • Java PDF 添加数字签名的实现方法

    经过数字签名的文档,能够使作者之外的人无法对其进行修改.因此,在PDF文档中添加数字签名可以保证其安全性和真实性.同时根据添加内容的差异性,数字签名可分为文本数字签名.图片数字签名.图片及文本数字签名.本文将通过Spire.PDF for Java来演示如何在PDF文档中添加数字签名. 使用工具:Spire.PDF for Java 2.11.4 Jar文件获取及导入: 方法1:通过官网下载获取Jar包.下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入Java程序.(如下

  • 在ssm项目中使用redis缓存查询数据的方法

    在项目中常常需要后台程序的持久层查询数据库来获取数据,然后将数据交给服务层.控制层,最后才交给视图层.如果数据访问缓慢,就会影响程序的运行. 为了加快程序的运行,可以将数据放入缓存中,包括数据缓存和页面缓存. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 其中页面缓存主要是oscache,可以整页或者指定网页某一部分缓存,同时指定他的过期时间,这样在此时间段里面访问的数据都是一样的 . 数据缓存

随机推荐