Redis 学习日志之 SpringBoot2.0+ 整合 Redis(基于 Redission)

本贴最后更新于 2110 天前,其中的信息可能已经物是人非

海加尔金鹰 ———— 如野草般一岁一枯荣

昨天完成了 redis 的简单安装 Redis 学习日志之 Linux 下的安装,今天就在项目当中简单整合使用一下

整合环境说明

JDK1.8 版本
idea 开发工具
springboot2.1.0 版本

为什么选择 Redission?

springboot2.0 之前的版本默认支持的是 Jedis 但是在 2.0 后换成了 Lettuce。
java 连接 redis 最多的就是 Jedis,Redisson,Lettuce 这三种方式
简单说明介绍:Redis 的三个框架:Jedis,Redisson,Lettuce
最后选择了 Redission,因为 Redisson 的宗旨是促进使用者对 Redis 的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

在 POM 当中引入对应 JAR

根据 Redission 官方整合文档进行引入和使用:

        <!-- redisson -->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>3.10.4</version>
        </dependency>

创建配置类 RedissonConfig

官方参数配置说明(中文)

编写测试类进行测试

在进行测试之前,由于使用的是阿里云服务器,所以需要在安全组当中开放 6379 端口,不然连接不上。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class BlogApplicationTests {

    @Resource
    private RedissonClient redissonClient;

    @Test
    public void RedissionTest(){
        RBucket<String> key = redissonClient.getBucket("newday");
        key.set("新的数据");
        System.out.println("获取到新存入的数据:"+key.get());
        // 获取字符串格式的数据
        RBucket<String> keyObj = redissonClient.getBucket("myname");
        String s = keyObj.get();
        System.out.println("获取到昨天存入的数据:"+s);
    }
}

测试结果:

获取到新存入的数据:新的数据
[ ERROR] [2019-03-14 10:37:37] [redisson-netty-1-9] org.redisson.client.handler.CommandDecoder [204] - Unable to decode data. channel: [id: 0x704603a9, L:/192.168.0.147:10879 - R:47.94.139.213/47.94.139.213:6379], reply: ReplayingDecoderByteBuf(ridx=9, widx=9), command: (GET), params: [myname]
java.io.IOException: java.lang.NullPointerException

可以获取到项目当中新存入的数据,但是无法获取到昨天通过 redis-cli 存入的数据。
错误信息提示:无法解码数据,猜测可能是 redis-cli 存数据的编码和 redission 的编码不一致导致的。
最后网上找了很多的资料,找到了一个叫序列化策略的东西。大致的情况就是说 redis-cli 存数据时的序列化策略是 string,但是 redission 的默认序列化策略是 Jackson JSON 编码 Redission 官网配置参数序列化说明

修改配置类 RedissionConfig 如下

    @Bean
    public RedissonClient getRedisson(){
        Config config = new Config();
        //单机模式  依次设置redis地址和密码
        config.useSingleServer().
                setAddress("redis://IP地址:6379"). 
                setPassword("你的密码");
        config.setCodec(new StringCodec());
        return Redisson.create(config);
    }

最后结果如下:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.0.RELEASE)

获取到新存入的数据:新的数据
获取到昨天存入的数据:ycf

到这里简单的使用就完成了。

总结

1 RedissonClient 这个类很重要,可以看到数据的读取都是通过这个类进行的。
2 这么多种序列化方式,所以序列化可能是个坑,后面需要注意。
3 官方文档的说明很详细,没事可以多看看。

参考资料

Redission 官方文档
springboot 整合 redisson

  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 44 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...