当前位置: 首页 > news >正文

Redis的java客户端(SpringDataRedis)

SpringDataRedis

一、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
</dependency>

二、application.yml配置:我这里为集群配置

spring:redis:cluster:nodes:- 192.168.48.129:7001- 192.168.48.129:7002- 192.168.48.129:7003- 192.168.48.129:7004- 192.168.48.129:7005- 192.168.48.129:7006max-redirects: 3lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 100

上述阶段测试生成的数据没有序列化有问题

三、SpringDataRedis的序列化方式

自定义RedisTemplate的序列化方式

package com.kmt.redisdemo.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;/*** @Description:* @Created:* @author: 枯木堂* @createTime:**/
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){//创建redisTemplate的对象RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();//设置连接工厂redisTemplate.setConnectionFactory(connectionFactory);//创建json序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();//设置key的序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());//设置value的序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);//返回return redisTemplate;}}

上述序列化后能达到效果但是多增加了一个类信息,为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。

四、StringRedisTemplate

为了节省内存空间,我们并不会使用JSON序列化器来处理value,而是统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化。

Spring默认提供了一个StringRediTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:

创建个User对象

package com.kmt.redisdemo.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @Description:* @Created:* @author: 枯木堂* @createTime:**/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private String name;private Integer age;
}

使用StringRedisTemplate的测试类如下:

package com.kmt.redisdemo;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kmt.redisdemo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;@SpringBootTest
class RedisStringTests {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testvoid testString(){stringRedisTemplate.opsForValue().set("name","枯木堂");Object name = stringRedisTemplate.opsForValue().get("name");System.out.println("name:"+name);}private static final ObjectMapper mapper = new ObjectMapper();@Testvoid testSaveUser() throws JsonProcessingException {//创建User对象User user = new User("枯木堂", 20);//手动序列化String json = mapper.writeValueAsString(user);//写入数据stringRedisTemplate.opsForValue().set("user:100",json);//获取数据String jsonUser = stringRedisTemplate.opsForValue().get("user:100");//手动反序列化User user1 = mapper.readValue(jsonUser, User.class);System.out.println("user1:"+user1);}
}

五、查看redis中的存储信息

http://www.dtcms.com/a/390612.html

相关文章:

  • Amazon Aurora DSQL:分布式无服务器数据库的下一场革命
  • TVS管频繁损坏,是参数错选还是布局出问题?-ASIM阿赛姆
  • 论文阅读:TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GRAPHS
  • 医疗行业淘汰赛开始了?医疗器械售后维修是否会有影响?
  • 第二部分:VTK核心类详解(第40章 vtkIdList ID列表类)
  • Elasticsearch的自定义score评分
  • 【软考-系统架构设计师】架构权衡分析方法(ATAM)
  • 信息系统项目的成本管理
  • Python进阶指南7:排序算法和树
  • 深入理解 HashMap的数据结构
  • ArcGIS前后两期数据库对比工具
  • React18学习笔记(三) ReactRouter----React中的路由
  • [cesium] vue3 安装cesium方法
  • 埃文科技亮相华为全联接大会2025 联合鲲鹏发布AI使能平台解决方案 共筑AI产业新生态
  • Linux 桌面环境GNOME 49 释出
  • react/umi,浏览器tab设置
  • langchain-PipelinePromptTemplate
  • git 本地仓库与远程仓库链接
  • 绘想 - 百度推出的AI视频创作平台
  • 穿越像素的凝视:深度解析视频中的人物与动物识别算法技术
  • OpenHarmony 4.0 Release源码下载、编译及烧录
  • 大模型提示词Prompt工程:2-全攻略+最佳实践框架+原理解析+实战案例库+七招要诀
  • 大模型微调——Prompt-Tuning
  • code2prompt 快速生成项目 Markdown 文档(结合大模型进行问答)
  • UIKit-CAGradientLayer
  • K8s LoadBalancer服务深度解析
  • Windows 系统开发 iOS 与安卓应用全流程指南,附 PC 前端工具链
  • CentOS 7 系统 “cannot find a valid baseurl for repo base7x86_64” 报错完整解决方案
  • centos7通过kubeadm安装k8s1.27.1版本
  • kubesphere(k8s)如何设置存储类的默认路径