Springboot中Redis的使用

本文深入探讨了NoSQL数据库的概念及其解决高并发、高可扩展性的能力,特别聚焦于Redis——一个高性能的键值对数据库。文章介绍了Redis的安装、使用方法,以及如何在Spring Boot项目中集成Redis,并解决了数据存储时可能出现的乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是NoSQL

为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方案,就是NoSQL数据库。

NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。Redis是NoSQL中的一种。

什么是redis

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如 字符串类型、散列类型、列表类型、集合类型、有序集合类型

redis有什么用

缓存(数据查询、短连接、新闻内容、商品内容等等)(最多使用)

分布式集群架构中的session分离

聊天室的在线好友列表

任务队列(秒杀、抢购、12306等等)

应用排行榜

网站访问统计

数据过期处理(可以精确到毫秒)

redis使用入门

1、下载

当前为Mac环境

官网下载安装包

或使用命令下载并解压

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
2、编译
$ cd redis-5.0.5
$ make
3、启动
$ src/redis-server
4、使用

通过redis自带的客户端来使用redis命令

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

springboot集成redis

1、添加依赖pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、设置属性application.properties
#Redis数据库索引(默认为0)
spring.redis.database=0
#Redis服务器地址
spring.redis.host=localhost
#Redis服务器连接端口
spring.redis.port=6379
### Redis服务器连接密码(默认为空)
spring.redis.password=123456
3、基础使用

spring-boot提供了两个类来直接操作redis,RedisTemplate和StringRedisTemplate。RedisTemplate的范型是<Object,Object>,而StringRedisTemplate是RedisTemplate的子类,其范型是<String, String>。两者相互独立,操作的数据互不相干,且不能操作另一方的数据。

@Autowired
private RedisTemplate redisTemplate;
@Autowired
private StringRedisTemplate stringRedisTemplate;@RequestMapping("/hello")
public String hello() {
  redisTemplate.opsForValue().set("user.001", "Jackson");
  stringRedisTemplate.opsForValue().set("user.002", "Jackson");
  return "hello";
}

通过可视化客户端查看保存的数据如下:
RedisTemplate
StringRedisTemplate

4、解决乱码

从上图可以看出,通过RedisTemplate保存的数据出现了乱码,这是因为RedisTemplate默认使用的是JDK序列化的方式,数据是被序列化成16进制后进行保存的。可以自定义RedisTemplate并添加到Spring的bean容器中来代替默认的RedisTemplate对象。

@Configuration  // 通过Configuration+Bean来添加到Spring容器中。
public class RedisConfig {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
​
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
​
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
​
        jackson2JsonRedisSerializer.setObjectMapper(mapper);
​
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
​
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}
 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌影~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值