【项目实践】公寓租赁项目(九):SpringBoot与Redis整合的快速入门使用

目录

[一、导入Spring Data Redis的依赖](#一、导入Spring Data Redis的依赖)

二、配置application.yml文件

三、RedisTemplate的使用

乱码原因:

使用StringRedisTemplate:


一、导入Spring Data Redis的依赖

由于我使用了依赖版本管理,所以我这里不需要声明dependency的version。

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、配置application.yml文件

在application.yml添加以下参数。

java 复制代码
spring:
  data:
    redis:
      host: 192.168.10.101  #这里改成自己服务器的ip地址
      port: 6379  #填入自己服务器redis配置的端口
      database: 0  #默认使用数据库0,可以选择0~15

三、RedisTemplate的使用

RedisTemplate封装了对redis对各种类型操作的方法,使得Java程序可以通过调用API来编写程序操作redis数据库。

|-----------------------------------|--------------------|
| 分组 | 说明 |
| redisTemplate.opsForValue() | 对string类型操作的方法 |
| redisTemplate.opsForList() | 对list类型操作的方法 |
| redisTemplate.opsForSet() | 操作set类型的方法 |
| redisTemplate.opsForHash() | 操作hash类型的方法 |
| redisTemplate.opsForZSet() | 操作zset类型的方法 |
| redisTemplate | 通用方法 |


测试RedisTemplate:

java 复制代码
@SpringBootTest
public class TestRedisTemplate {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void testSet(){
        redisTemplate.opsForValue().set("key1","value1");  //创建一个key1:"value1"的string类型的键值对
    }

    @Test
    public void testGet(){
        String result = (String)redisTemplate.opsForValue().get("key1");  //测试通过键获取值
        System.err.println(result);
    }

    @Test
    public void testDel(){
        redisTemplate.delete("key1");  //测试删除以key1为键的键值对
    }
}

测试结果:

查看结果我们会发现出现了乱码,那么这是为什么呢?那么会不会影响我们通过key来获取value呢?

获取value方法测试结果:

①通过程序获取:有结果!

②通过Redis客户端命令行获取:无结果!

乱码原因:

Redis中的key和value均是以二进制 的形式存储的,因此客户端输入的key和value都会经过序列化之后才发往Redis服务端。而RedisTemplate所使用序列化方式和命令行客户端采用序列化方式不相同,进而导致序列化之后的二进制数据不同,所以才会导致上述的现象。

RedisTemplate默认使用的是Jdk序列化方式,跟客户端的序列化不一样。

使用StringRedisTemplate:

为解决上述问题,可使用**StringRedisTemplate** 代替**RedisTemplate** ,因为**StringRedisTemplate**使用的序列化器和命令行所使用的序列化器是相同的。

对比RedisTemplate,StringRedisTemplate使用的序列化是Redis自带的序列化方式。

查看源码:

测试:

java 复制代码
@SpringBootTest
public class TestStringRedisTemplate {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    public void testSet() {
        redisTemplate.opsForValue().set("key4", "value4");
    }

    @Test
    public void testGet() {
        String result = redisTemplate.opsForValue().get("key4");
        System.out.println(result);
    }

    @Test
    public void testDel() {
        redisTemplate.delete("key4");
    }
}

测试set方法结果:成功创建key4:value4键值对,并且没有出现乱码。

测试get方法结果:成功获取value4。

测试客户端获取值:也成功,说明序列化问题解决了!

相关推荐
专业程序开发源2 分钟前
springboot外卖系统94294-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
FYKJ_201011 分钟前
springboot心理健康管理系统86254-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·mysql·django·课程设计
ShineWinsu14 分钟前
对于Redis:RDB持久化的解析
linux·数据库·redis·缓存·面试·持久化·rdb
Moshow郑锴2 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
\光辉岁月/11 小时前
5.java-数组
java·开发语言
谢亮_vipxieliang11 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
郑州光合科技余经理11 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_9620715711 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat12 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference