网站首页 > 精选文章 / 正文
结合SpringBoot2.xx使用Redis
创建Spring项目
官方网站https://start.spring.io/
创建完成后生成并解压,将解压后的文件用idea打开并把maven仓库配置好。
Spring整合Redis
SpringDataRedis配置RedisTemplate
@Configuration
public class RedisTemplateConfiguration {
/**
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置key和value的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置hashKey和hashValue的序列化规则
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
// 设置支持事物
//redisTemplate.setEnableTransactionSupport(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
RedisTemplate
- ValueOperation:简单的K-V操作
- SetOperations:set类型数据操作
- ZSetOperations:zset类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:list类型的数据操作
RedisTemplate与StringRedisTemplate区别:
- StringRedisTemplate继承RedisTemplate
- 两者数据不互通,无法互相使用
- StringRedisTemplate默认采用String的序列化策略
- RedisTemplate默认采用jdk序列化策略,会将数据先序列化成字节数组再存入Redis数据库
总结
- 当redis数据库里面本来操作的是字符串数据的时候,使用StringRedisTemplate即可
- 数据是复杂的对象类型,那么使用RedisTemplate是更好的选择
序列化
什么是序列化
- 把对象转换为字节序列的过程叫做对象的序列化
- 把字节序列恢复为对象的过程成成为对象的饭序列化
序列化的主要两种用途:
- 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件夹中
- 在网络上传送对象的字节序列
Redis为什么要序列化:
- 性能可以提高,不同的序列化方式性能不一样
- 可视化工具更好查看
- 采用默认的jdk方式会乱码,(POJO类需要实现Serializable接口)
- 采用JSON方式则不用,且可视化工具更好查看
自定义redis序列化方式,提供了多种可选择策略
- JdkSerializationRedisSerializer
- POJO对象的存取场景,使用JDK本身序列化机制,POJO实现Serializer
- 默认机制ObjectInputStream/ObjectOutputStream进行序列化操作
- StringRedisSerializer
- Key或者value为字符串
- Jackson2JsonRedisSerializer
利用Jackson- json工具,将pojo实力序列化成json格式存储
- GenericFastJsonRedisSerializer
另一种javabean与json之间的转换,同时也需要指定Class类型
SpringData
- 操作mysql/redis/elasticSeatch
- SpringDataRedis是专门操作redis的依赖。
- 添加依赖spring-boot-starter-data-redis:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
注意
- springboot2后默认使用Lettuce作为访问redis的客户端。
- 旧版本lettuce存在堆外内存溢出的bug,5.3修复了这个bug,并发量不高、内存足够大可能不会出现内存溢出的情况。
连接redis
server:
port: 8080
#链接redis配置
spring:
redis:
host: redis的host地址
port: 6379
password: redis的密码
测试连接是否成功
@SpringBootTest
class DemoApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void testStringSet() {
// ValueOperations valueOperations = redisTemplate.opsForValue();
// valueOperations.set("name", "tom");//与下方等价
redisTemplate.opsForValue().set("name", "tom");
}
@Test
void testStringGet() {
String str = (String) redisTemplate.opsForValue().get("name");
System.out.println(str);
}
}
Tags:hashoperations
猜你喜欢
- 2024-12-03 操作系统之文件管理,万字长文让你彻底弄懂
- 2024-12-03 数据异构优化:通过Redis缓存提升接口性能
- 2024-12-03 我从未见过的牛逼解说方式!Redis五种数据结构,看一遍就懂了
- 2024-12-03 .NET 9 的10 个必知亮点
- 2024-12-03 SpringBoot + Redis 实现点赞功能的缓存和定时持久化(附源码)
- 2024-12-03 接口也会累着!Spring Boot + Redis 实现接口限流和防刷
- 2024-12-03 SpringBoot中整合Redis(缓存篇)
- 2024-12-03 Springboot2.0学习12 使用Redis
- 2024-12-03 Redis 实现购物车(附源码)
- 2024-12-03 记一次因 Redis 使用不当导致应用卡死 bug 的排查及解决