Redis——基于Spring的开发示例(连接、序列化、high/low api)

本文详细介绍了如何在SpringBoot项目中集成Redis,包括建立连接、使用High/Low Level API,以及解决序列化问题。通过具体的代码示例展示了RedisTemplate和StringRedisTemplate的使用,探讨了自定义Template以提高开发效率。
摘要由CSDN通过智能技术生成

在前面的文章中,我们学习了有关 Redis 的几乎所有的重点内容,都属于理论内容,只有要掌握这些底层知识,这样我们才能设计出良好的系统架构;而且当系统出现问题的时候,我们只有熟知了各种场景可能会发生什么问题,这样才能快速的定位、排查以及解决问题

下面我们就来学习一下如何基于 SpringBoot 框架进行简单的 Redis 的 API 进行开发

SpringBoot 集成 Redis 官网教程:

https://docs.spring.io/spring-data/redis/docs/2.3.4.RELEASE/reference/html/#reference

一、基本开发

我们这里就不演示基于 spring mvc 的 web 访问方式,而是基于功能,简单的进行代码开发

1、建立spring boot项目

spring boot 项目中集成 redis

在这里插入图片描述

2、与vm中的redis建立连接

启动redis实例:端口号 8888

//随意创建一个目录
mkdir springboot

//切换到此目录
cd springboot/

//启动一个redis实例,端口号为 8888
redis-server --port 8888

修改远程访问安全策略级别

//连接redis
redis-cli
//临时修改安全策略,默认为 yes,修改为 no
config set protected-mode no

查看本机IP地址:192.168.159.111

[root@node01 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F0:66:24  
          inet addr:192.168.159.111  Bcast:192.168.159.255  Mask:255.255.255.0

在 application.properties 配置文件中统一配置连接信息

application.properties

spring.redis.host=192.168.159.111
spring.redis.port=8888

3、测试连接

TestRedis.java

@Component
public class TestRedis {
   

    @Autowired
    RedisTemplate redisTemplate;//注入 template

    public void testRedis(){
   
        //设置data
        redisTemplate.opsForValue().set("hello", "china");

        //获取data
        System.out.println(redisTemplate.opsForValue().get("hello"));
    }
}

DemoApplication.java

@SpringBootApplication
public class DemoApplication {
   

    public static void main(String[] args) {
   
        //获取 ctx
        ConfigurableApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);

        //获取容器中的bean对象
        TestRedis testRedis = ctx.getBean(TestRedis.class);

        testRedis.testRedis();
    }

}

运行结果:能够连接到本地虚拟机的 redis 服务实例,并且能够正常 set 和 get 数据

在这里插入图片描述

二、high/low API及序列化

在 Redis 支持的value类型中,其实可以分为两类,一类就是单值类型,比如 string,还有一类就是复值类型,即hash,对于不同的类型的操作是不一样的

1、high level api

RedisTemplate

在上面测试中,我们已经把数据写入了 Redis 中,所以 Redis 中应该存在数据,在 vm 中通过命令行获取 key,发现出现乱码,说明序列化的时候出现问题

127.0.0.1:8888> keys *
1) "\xac\xed\x00\x05t\x00\x05hello"

为什么会出现乱码?我们知道 Redis 是针对很多语言提供服务的,所以它是二进制安全的,只存储字节数组,任何一个客户端都应该注意:我的数据是怎么变成的字节数组?是怎么进行的序列化?

上面使用的高阶的 RedisTemplate 是面向基本的 JAVA 序列化方式,JAVA 序列化方式是要加一些东西,而不是字面意义上的编码,所以在 key 前面多出了一些乱码。

StringRedisTemplate

而我们在使用 Redis 的时候,更多的场景是基于 String 这种方式的,此时除了通用的 RedisTemplate,其实还有面向 String 的 StringRedisTemplate

TestRedis.java(使用StringRedisTemplate)

@Component
public class TestRedis {
   

    @Autowired
    RedisTemplate redisTemplate;
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值