昨天完成了 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
package com.hjljy.blog.redission;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Auther: 海加尔金鹰
* @Date: 2019年03月12日 17:47
* @Description:
*/
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient getRedisson(){
Config config = new Config();
//单机模式 依次设置redis地址和密码
config.useSingleServer().
setAddress("redis://IP地址:6379").
setPassword("你的密码");
return Redisson.create(config);
}
}
这里只配置了最基本的参数,redis 的配置方式有多种,配置参数也有很多,具体见官方参数配置说明(中文)
编写测试类进行测试
在进行测试之前,由于使用的是阿里云服务器,所以需要在安全组当中开放 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 官方文档的说明很详细,没事可以多看看。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于