前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Redis的java客户端

Redis的java客户端

作者头像
用户11097514
发布2024-05-30 17:29:44
发布2024-05-30 17:29:44
19400
代码可运行
举报
文章被收录于专栏:技术分享技术分享
运行总次数:0
代码可运行

Jedis

快速入门

  1. 引入依赖
代码语言:javascript
代码运行次数:0
复制
<groupId>redis.chlients</groupId>
<artifactId>jedis</xxx>
  1. 建立连接
代码语言:javascript
代码运行次数:0
复制
void setUp(){
    jedis = new Jedis("IP地址" ,6379);
    jedsi.auth("密码"); 
    jedis.select("1"); //选择数据库
	
}
  1. 操作数据,测试String
代码语言:javascript
代码运行次数:0
复制
void testString(){
	String result = jedis.set("name","张三");
    sout
    Sitrng name = jedis.get("name");
    sout
}
  1. 关闭连接
代码语言:javascript
代码运行次数:0
复制
void tearDown(){
	if(jedis != null){
        jedis.close();
    }
}

springDataRedis

SpringData是Spring中数据操作的模块,包含对各种数据库的集成

其中对Redis的集成模块就叫做SpringDataRedis

官网地址:https://spring.io/projects/spring-data-redis

  • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
  • 提供了RedisTemplate统一API来操作Redis
  • 支持Redis的发布订阅模型
  • 支持Redis哨兵和Redis集群
  • 支持基于Lettuce的响应式编程
  • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
  • 支持基于Redis的JDKCollection实现

RedisTemplate工具类

使用RedisTemplate统一API来操作Redis

  1. 导入依赖
代码语言:javascript
代码运行次数:0
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
  1. 创建RedisTemplate对象
代码语言:javascript
代码运行次数:0
复制
@Resource
private RedisTemplate redisTemplate;
  1. 实现对数据的操作
代码语言:javascript
代码运行次数:0
复制
@Test
void testString() {
    //写入一条数据
     redisTemplate.opsForValue().set("name","虎哥");

    Object name = redisTemplate.opsForValue().get("name");
    System.out.println(name);
}

得到的结果:

​ 需要解决的问题

因为使用redisTemplate.opsForValue().set(“name”,”虎哥”);得到的不是一个String 类型的字符串,而使一个Object对象

所以存入的就会是java对象,那么就需要对对象进行序列化,从而得到我们需要的类型

解决RedisTemplate序列化的两种方案

方案一:
  1. 自定义RedisTemplate
  2. 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
代码语言:javascript
代码运行次数:0
复制
package second.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;

/**
 * 创建配置文件的原因:
 * 但我们进行写入操作时,在redis数据库中存储的确实一段\xAC\xED\x00\x05t\x00\x06\xE8\x99\x8E\xE5\x93\xA5
 */
@Configuration
public class RedisTemplateConfig {

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        //创建redisTemplate对象
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
        //连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);

        //创建json序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        //设置key序列化
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());

        //设置value序列化
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        //返回
        return redisTemplate;
    }
}

得到的结果

这样就是我们所需要的结果,但是与此同时,他却不满足内存的要求,因为他多了一个@Class:”second.pojo.user” 这是我们自己定义的接收数据的实体类。他将会占用很大的内存。所以我们就不能这么做。就需要再次进行升级

方案二:
  1. 使用StringRedisTemplate
  2. 写入Redis时,手动把对象序列化为JSON
  3. 读取Redis时,手动把读取到的JSON反序列化为对象

通过这样得到的结果才是我们真正需要的结果

而Spring官方也同样推出了一个更为好用的**StringRedisTemplate统一API来操作Redis**

如下:

代码语言:javascript
代码运行次数:0
复制
@Resource
private StringRedisTemplate stringRedisTemplate;
代码语言:javascript
代码运行次数:0
复制
public ObjectMapper mapper = new ObjectMapper();
@Test
void getTest() throws JsonProcessingException {
    user usr1 = new user("小花", 21);
    //手动序列化  : 将java对象转换为json
    String s = mapper.writeValueAsString(usr1);
    //进行操作
    stringRedisTemplate.opsForValue().set("user:300",s);
    System.out.println("s==" + s);
    //读取数据
    String s1 = stringRedisTemplate.opsForValue().get("user:300");
    user user = mapper.readValue(s1, user.class);
    System.out.println("数据为 : " + user);
    /**
     * 得到的数据(在redis中存储的) :
     * {
     *   "name": "小花",
     *   "age": 21
     * }
     */
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jedis
    • 快速入门
  • springDataRedis
    • RedisTemplate工具类
    • 使用RedisTemplate统一API来操作Redis
    • 解决RedisTemplate序列化的两种方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档