Redis的java客户端

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis的java客户端

Jedis



快速入门


引入依赖


<groupId>redis.chlients</groupId>
<artifactId>jedis</xxx>


1.建立连接


void setUp(){
    jedis = new Jedis("IP地址" ,6379);
    jedsi.auth("密码"); 
    jedis.select("1"); //选择数据库
}


1.操作数据,测试String


void testString(){
  String result = jedis.set("name","张三");
    sout
    Sitrng name = jedis.get("name");
    sout
}


1.关闭连接


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工具类


1676608553685-762cc763-8a75-422c-9461-e569b8c6ee61.png

使用RedisTemplate统一API来操作Redis


1.导入依赖


<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对象

@Resource
private RedisTemplate redisTemplate;

1.实现对数据的操作


@Test
void testString() {
    //写入一条数据
     redisTemplate.opsForValue().set("name","虎哥");
    Object name = redisTemplate.opsForValue().get("name");
    System.out.println(name);
}


得到的结果:

1676609065382-4b9c84a7-071d-4e51-8d47-3bbe7bfb0169.png

1676609078844-5dd841c8-6729-4044-b63f-d457a3c62463.png


需要解决的问题


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


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


解决RedisTemplate序列化的两种方案


方案一:

  1. 自定义RedisTemplate
  2. 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer


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;
    }
}

得到的结果


1676609346379-4e1de992-af7b-42b7-a142-7b8980c7f921.png


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


方案二:

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


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


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


如下:


@Resource
private StringRedisTemplate stringRedisTemplate;


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
     * }
     */
}


1676610240800-380eb8b3-e710-463d-b3eb-b57cb3fdb867.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6天前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
17天前
|
NoSQL Java Redis
Spring Boot集成Redis全攻略:高效数据存取,打造性能飞跃的Java微服务应用!
【8月更文挑战第3天】Spring Boot是备受欢迎的微服务框架,以其快速开发与轻量特性著称。结合高性能键值数据库Redis,可显著增强应用性能。集成步骤包括:添加`spring-boot-starter-data-redis`依赖,配置Redis服务器参数,注入`RedisTemplate`或`StringRedisTemplate`进行数据操作。这种集成方案适用于缓存、高并发等场景,有效提升数据处理效率。
72 2
|
23天前
|
消息中间件 Java Kafka
Java 客户端访问kafka
Java 客户端访问kafka
29 9
|
26天前
|
存储 NoSQL Java
Java中使用redis的bitMap实现签到功能
这个实现示例提供了一种灵活、高效的方式,展示了如何使用Redis来解决现实中的问题。
28 2
|
5天前
|
Java
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
|
1月前
|
负载均衡 NoSQL Java
|
7天前
|
NoSQL 安全 Java
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
Java Spring Boot中使用Shiro、JWT和Redis实现用户登录鉴权
|
3月前
|
JSON NoSQL Java
【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)
【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)
91 0
|
1月前
|
Java Redis 数据安全/隐私保护
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
Redis14----Redis的java客户端-jedis的连接池,jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,最好用jedis连接池代替jedis,配置端口,密码
|
1月前
|
Java Redis 数据安全/隐私保护
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法
Redis13的Java客户端-Jedis快速入门,建立连接的写法,ip地址,设置密码密码,选择库的写法