spring-boot和redis的缓存使用

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 1.运行环境开发工具:intellij ideaJDK版本:1.8项目管理工具:Maven 4.0.02.Maven Plugin管理pom.xml配置代码: 1 2 5 4.

1.运行环境

开发工具:intellij idea

JDK版本:1.8

项目管理工具:Maven 4.0.0

2.Maven Plugin管理

pom.xml配置代码:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.goku</groupId>
 8     <artifactId>spring-boot-redis</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10   <build>
11     <plugins>
12       <plugin>
13         <groupId>org.apache.maven.plugins</groupId>
14         <artifactId>maven-compiler-plugin</artifactId>
15         <configuration>
16           <source>1.7</source>
17           <target>1.7</target>
18         </configuration>
19       </plugin>
20     </plugins>
21   </build>
22 
23   <!-- Spring Boot 启动父依赖 -->
24   <parent>
25     <groupId>org.springframework.boot</groupId>
26     <artifactId>spring-boot-starter-parent</artifactId>
27     <version>1.5.6.RELEASE</version>
28   </parent>
29 
30   <dependencies>
31     <!-- Spring Boot web依赖 -->
32     <dependency>
33       <groupId>org.springframework.boot</groupId>
34       <artifactId>spring-boot-starter-web</artifactId>
35     </dependency>
36     <!-- Spring Boot test依赖 -->
37     <dependency>
38       <groupId>org.springframework.boot</groupId>
39       <artifactId>spring-boot-starter-test</artifactId>
40       <scope>test</scope>
41     </dependency>
42     <!-- Spring Boot redis 依赖 -->
43     <dependency>
44       <groupId>org.springframework.boot</groupId>
45       <artifactId>spring-boot-starter-data-redis</artifactId>
46     </dependency>
47   </dependencies>
48 
49 
50 </project>
View Code

3.application.properties编写

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
View Code

4.Value序列化缓存方法编写

 1 package com.goku.demo.config;
 2 
 3 
 4 import org.springframework.core.convert.converter.Converter;
 5 import org.springframework.core.serializer.support.DeserializingConverter;
 6 import org.springframework.core.serializer.support.SerializingConverter;
 7 import org.springframework.data.redis.serializer.RedisSerializer;
 8 import org.springframework.data.redis.serializer.SerializationException;
 9 /**
10  * Created by nbfujx on 2017/11/8.
11  */
12 public class RedisObjectSerializer implements RedisSerializer<Object> {
13     private Converter<Object, byte[]> serializer = new SerializingConverter();
14     private Converter<byte[], Object> deserializer = new DeserializingConverter();
15     private static final byte[] EMPTY_ARRAY = new byte[0];
16 
17     @Override
18     public Object deserialize(byte[] bytes) {
19         if (isEmpty(bytes)) {
20             return null;
21         }
22         try {
23             return deserializer.convert(bytes);
24         } catch (Exception ex) {
25             throw new SerializationException("Cannot deserialize", ex);
26         }
27     }
28 
29     @Override
30     public byte[] serialize(Object object) {
31         if (object == null) {
32             return EMPTY_ARRAY;
33         }
34         try {
35             return serializer.convert(object);
36         } catch (Exception ex) {
37             return EMPTY_ARRAY;
38         }
39     }
40 
41     private boolean isEmpty(byte[] data) {
42         return (data == null || data.length == 0);
43     }
44 }
View Code

5.Redis缓存配置类RedisConfig编写

添加注解@EnableCaching,开启缓存功能

 1 package com.goku.demo.config;
 2 
 3 import org.springframework.cache.CacheManager;
 4 import org.springframework.cache.annotation.CachingConfigurerSupport;
 5 import org.springframework.cache.annotation.EnableCaching;
 6 import org.springframework.context.annotation.Bean;
 7 import org.springframework.context.annotation.Configuration;
 8 import org.springframework.data.redis.cache.RedisCacheManager;
 9 import org.springframework.data.redis.connection.RedisConnectionFactory;
10 import org.springframework.data.redis.core.RedisTemplate;
11 import org.springframework.data.redis.serializer.StringRedisSerializer;
12 
13 /**
14  * Created by nbfujx on 2017-12-07.
15  */
16 @SuppressWarnings("SpringJavaAutowiringInspection")
17 @Configuration
18 @EnableCaching
19 public class RedisConfig extends CachingConfigurerSupport {
20 
21     @Bean
22     public CacheManager cacheManager(RedisTemplate<Object, Object> redisTemplate) {
23         RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
24         cacheManager.setDefaultExpiration(1800);
25         return cacheManager;
26     }
27 
28     @Bean
29     public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
30         RedisTemplate<Object, Object> template = new RedisTemplate<>();
31         template.setConnectionFactory(factory);
32         template.setKeySerializer(new StringRedisSerializer());
33         template.setValueSerializer(new RedisObjectSerializer());
34         return template;
35     }
36 }
View Code

6.Application启动类编写

 1 package com.goku.demo;
 2 
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.boot.web.servlet.ServletComponentScan;
 6 
 7 /**
 8  * Created by nbfujx on 2017/11/20.
 9  */
10 // Spring Boot 应用的标识
11 @SpringBootApplication
12 @ServletComponentScan
13 public class DemoApplication {
14 
15     public static void main(String[] args) {
16         // 程序启动入口
17         // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
18         SpringApplication.run(DemoApplication.class,args);
19     }
20 }
View Code

7.测试用例编写

实体类User编写

 1 package test.com.goku.demo.model;
 2 
 3 import java.io.Serializable;
 4 
 5 /**
 6  * Created by nbfujx on 2017-12-07.
 7  */
 8 public class User implements Serializable {
 9 
10     private static final long serialVersionUID = -1L;
11 
12     private String username;
13     private Integer age;
14 
15     public User(String username, Integer age) {
16         this.username = username;
17         this.age = age;
18     }
19 
20     public String getUsername() {
21         return username;
22     }
23 
24     public void setUsername(String username) {
25         this.username = username;
26     }
27 
28     public Integer getAge() {
29         return age;
30     }
31 
32     public void setAge(Integer age) {
33         this.age = age;
34     }
35 }
View Code

测试方法编写,包含缓存字符实体

 1 package test.com.goku.demo;
 2 
 3 import com.goku.demo.DemoApplication;
 4 import org.junit.Test;
 5 import org.junit.runner.RunWith;
 6 import org.slf4j.Logger;
 7 import org.slf4j.LoggerFactory;
 8 import org.springframework.beans.factory.annotation.Autowired;
 9 import org.springframework.boot.test.context.SpringBootTest;
10 import org.springframework.data.redis.core.RedisTemplate;
11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12 import test.com.goku.demo.model.User;
13 
14 import java.io.Serializable;
15 
16 /**
17  * Created by nbfujx on 2017-12-07.
18  */
19 @RunWith(SpringJUnit4ClassRunner.class)
20 @SpringBootTest(classes = DemoApplication.class)
21 public class TestRedis implements Serializable{
22 
23     private final Logger logger = LoggerFactory.getLogger(getClass());
24 
25     @Autowired
26     private RedisTemplate redisTemplate;
27 
28     @Test
29     public void test() throws Exception {
30         // 保存字符串
31         redisTemplate.opsForValue().set("数字", "111");
32         this.logger.info((String) redisTemplate.opsForValue().get("数字"));
33     }
34 
35     @Test
36     public void testobject() throws Exception {
37         User user = new User("用户1", 20);
38         redisTemplate.opsForValue().set("用户1",user);
39         // 保存对象
40         User user2= (User) redisTemplate.opsForValue().get("用户1");
41         this.logger.info(String.valueOf(user2.getAge()));
42     }
43 
44 
45 }
View Code

8.查看测试结果

字符串测试

 

实体测试

 

 

9.GITHUB地址

https://github.com/nbfujx/springBoot-learn-demo/tree/master/spring-boot-redis

目录
相关文章
|
2月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
3月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
191 1
Redis专题-实战篇二-商户查询缓存
|
2月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
545 5
|
3月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
213 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
3月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
7月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
7月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
961 0
|
7月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
240 32
|
7月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
172 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡