Redis客户端RedisTemplate入门学习

news/2024/4/30 6:51:12/文章来源:https://blog.csdn.net/weixin_53050118/article/details/127667456

Redis的Java客户端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxV4MxL7-1667447585968)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20221101232218071.png)]

Jedis客户端入门

1.引入依赖

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency>

2.建立连接并操作

//建立连接@BeforeEachvoid setUp() {//建立连接jedis = new Jedis("ip", 6379);//设置密码jedis.auth("redhat");//选择库jedis.select(0);}//测试string@Testpublic void testString() {//插入数据,方法名称就是redis命令名称,非常简单String result = jedis.set("name", "张三");System.out.println("result"+result);//获取数据String name=jedis.get("name");System.out.println("name = "+name);}@Testpublic void testHash(){//插入hashjedis.hset("zzx","age","18");jedis.hset("zzx","name","zzx");Map<String, String> map = jedis.hgetAll("zzx");Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String, String> entry : entries) {System.out.println("k:"+entry.getKey()+"   "+"v:"+entry.getValue());}}//释放资源@AfterEachvoid tearDown(){//释放资源if (jedis!=null){jedis.close();}}

Jedis连接池

jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此我们推荐大家使用Jedis连接池代替Jedis的直连方式。

连接对象工厂池

public class JedisConnectionFactory {private static final JedisPool jedisPool;static {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//最大连接数jedisPoolConfig.setMaxTotal(8);//最大空闲连接jedisPoolConfig.setMaxIdle(8);//最小空闲连接jedisPoolConfig.setMinIdle(0);//设置最长等待时间,msjedisPoolConfig.setMaxWaitMillis(200);jedisPool =new JedisPool(jedisPoolConfig,"ip",6379,1000,"redhat");}//获取Jedis连接对象public static Jedis getJedis(){return jedisPool.getResource();}
}

SpringDataRedis介绍

SpringData是spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis。

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

RedisTemplate工具类中的api:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ay8m61TE-1667447585970)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20221102135048331.png)]

SpringDataRedis快速入门

SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单

1.引入依赖

        <!--Redis依赖--><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>

2.配置文件

spring:redis:host: ipport: 6379password: redhatlettuce:pool:max-active: 8 #最大连接数max-idle: 8 #最大空闲连接min-idle: 0 #最小空闲连接max-wait: 100 #连接等待时间

SpringDataRedis的序列化方式

RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PaXa6EhQ-1667447585970)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20221102231405030.png)]

缺点:

  • 可读性差
  • 内存占用较大

改变RedisTemplate的序列化方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QvCQT2Ry-1667447585971)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20221102231844912.png)]

key一般用StringRedisSerializer

value一般用GenericJackson2JsonRedisSerializer

修改序列化方式

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){//创建TemplateRedisTemplate<String,Object> redisTemplate =new RedisTemplate<>();//设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);//设置序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer=new GenericJackson2JsonRedisSerializer();//key和hashKey采用String序列化redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());//value和hashValue采用JSON序列化redisTemplate.setValueSerializer(jsonRedisSerializer);redisTemplate.setHashValueSerializer(jsonRedisSerializer);return redisTemplate;}
}

StringRedisTemplate

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBDO74fe-1667447585971)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20221103111125978.png)]

在之前使用jsonRedisSerializer序列化器时产生的@class这个字段会造成资源浪费,为了节省内存空间,我们并不会使用JSON序列化器来处理Value,而是统一使用String序列化器,要求只能存储String的key和Value。当需要存储Java对象时手动完成对象的序列化和反序列化。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P4StB2fD-1667447585972)(C:\Users\20745\AppData\Roaming\Typora\typora-user-images\image-20221103111934779.png)]

StringRedisTemplate的作用

由于StringRedisTemplate的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:

总结RedisTemplate的两种序列化实践方案:

方案一:

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

方案二:

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

Redistemplate操作Hash类型

import com.alibaba.fastjson.JSON;
import com.cdcas.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;import java.util.Map;@SpringBootTest
class RedisDemoApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testvoid contextLoads() {//插入一条String类型数据redisTemplate.opsForValue().set("name","李四");//读取一条String类型数据Object name =redisTemplate.opsForValue().get("name");System.out.println("name = "+name);}@Testvoid testSaveUser(){//写入数据redisTemplate.opsForValue().set("user:100",new User("赵志鑫",21));//获取数据User user=(User) redisTemplate.opsForValue().get("user:100");System.out.println(user);}@Testvoid testStringTemplate(){//准备对象User user=new User("虎牙",18);//手动序列化String userJson= JSON.toJSONString(user);//写入json数据System.out.println(user);stringRedisTemplate.opsForValue().set("user",userJson);//获取json数据String userFromRedis = stringRedisTemplate.opsForValue().get("user");User parseObject = JSON.parseObject(userFromRedis, User.class);System.out.println("=============================");System.out.println("从redis中获取的对象"+parseObject);}@Testvoid testHash(){stringRedisTemplate.opsForHash().put("cdcas:user:100","name","赵志鑫");stringRedisTemplate.opsForHash().put("cdcas:user:100","forMe","哈哈");Map<Object, Object> entries = stringRedisTemplate.opsForHash().entries("cdcas:user:100");System.out.println("entries ="+entries);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_411611.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TIDB 性能测试(TIUP-TPCC)

New-Order&#xff1a;客户输入一笔新的订货交易&#xff1b; Payment: 更新客户账户余额以反映其支付状况; Delivery: 发货(模拟批处理交易); Order-Status: 查询客户最近交易的状态&#xff1b; Stock-Level: 查询仓库库存状况&#xff0c;以便能够及时补货。…

Android Studio入门之常用布局的讲解以及实战(附源码 超详细必看)(包括线性布局、权重布局、相对布局、网格布局、滚动视图 )

运行有问题或需要源码请点赞关注收藏后评论区留言 线性布局LinearLayout 顾名思义&#xff0c;线性布局像是用一根线把它的内部视图串起来&#xff0c;故而内部视图之间的排列顺序是固定的&#xff0c;要么从左到右&#xff0c;要么从上到下排列。通过属性android:orientation…

学完Python,不做程序员,只接兼职,哎,就是玩儿

现在这个时代&#xff0c;人人开始追求做斜杠青年&#xff0c;多方面开展副业&#xff0c;赚取几份工资。有很多朋友就抓住了Python的风口&#xff0c;靠着Python兼职月入一万。那么学完Python&#xff0c;有哪些可以做的兼职呢&#xff1f; 一、闲暇时间&#xff0c;接自由单…

DEFORMABLE DETR:用于端到端对象检测的可变形Transformer

论文&#xff1a;《DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION》 论文链接&#xff1a;https://arxiv.org/pdf/2010.04159.pdf 代码链接&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 最近在目标检测领域提出了DETR&…

猿创征文|keil和Proteus使用教程

&#x1f4ac;推荐一款模拟面试、刷题神器 、从基础到大厂面试题&#xff1a;&#x1f449;点击跳转刷题网站进行注册学习 目录 一、keil的使用教程 1、新建一个项目 2、选择单片机型号 3、新建工程文件 二、Proteus的使用教程 1、新建一个工程 2、单片机型号及元器件的…

海藻酸钠-四嗪|TZ-PEG-alginate|海藻酸钠-peg-四嗪TZ

海藻酸钠-四嗪|TZ-PEG-alginate|海藻酸钠-peg-四嗪TZ 中文名称&#xff1a;海藻酸钠-聚乙二醇-四嗪 英文名称&#xff1a;TZ-PEG-alginate 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 …

【Web-CSS基础】CSS的三大特性、定位方式、静态定位、相对定位、绝对定位、浮动定位、固定定位、设置缩放动画

目录 CSS的三大特性 定位方式 静态定位 相对定位 绝对定位(absolute) 固定定位 浮动定位 粘性定位(sticky) 定位总结 综合练习 效果展示 目录 CSS的三大特性 定位方式 静态定位 相对定位 绝对定位(absolute) 固定定位 浮动定位 粘性定位(sticky) 定位总…

高分辨空间代谢组学测试的样品要求以及常见问题

高分辨空间代谢组学可实现定量检测&#xff0c;亦可定性检测&#xff0c;且可一次可同时检出多种类型的化合物&#xff0c;包括脂类、小分子代谢物、蛋白质、药物及其载体等&#xff0c;并且能够呈现出这些物质的空间分布情况。高分辨空间代谢组学测试的样品要求&#xff1a; …

五高引动三层需求 华为全屋智能3.0引领智能家居新进化

昨天,华为全屋智能3.0发布。从2020年11月发布全屋智能开始,华为不断迭代产品和体验,是全屋智能快速进化的主要推动者之一。这一次华为全屋智能3.0带来“高可靠、高掌控、高感官、高心意、高智能”的五高理念,更清晰定义了全屋智能,或者说空间智能该有的样子,这也将引领产…

GitHub榜一竟是Alibaba内部被疯狂转载的Spring全能指南?

spring相信大家都不会陌生! Spring 是目前主流的 Java Web 开发框架&#xff0c;是 Java 世界上最为成功的框架。该框架是一个轻量级的开源框架&#xff0c;具有很高的凝聚力和吸引力。 Spring 由 Rod Johnson 创立&#xff0c;2004 年发布了 Spring 框架的第一版&#xff0c;其…

自动控制原理 - 2 控制系统的数学模型 节2.7-2.10

2 控制系统的数学模型2.7 结构图的等效变换准则2.8 结构图等效变换的应用2.9 信号流图2.10 梅逊公式 2 控制系统的数学模型 2.7 结构图的等效变换准则 结构图没有直接给出系统输入与输出之间的定量关系。如何得到系统输入输出之间的传递函数&#xff0c;从而便于进一步分析系…

【LeetCode】No.78. Subsets -- Java Version

题目链接&#xff1a; 1. 题目介绍&#xff08;Subsets&#xff09; Given an integer array nums of unique elements, return all possible subsets (the power set). 【Translate】&#xff1a; 给定一个包含多个唯一元素的整数数组&#xff0c;返回所有可能的子集(幂集)。…

内部在看的Tomcat笔记,真不愧是阿里技术官

前言 SpringBoot中的Tomcat容器 SpringBoot可以说是目前最火的Java Web框架了。它将开发者从繁重的xml解救了出来&#xff0c;让开发者在几分钟内就可以创建一个完整的Web服务&#xff0c;极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分&#xff0c;…

学弟:手工测试和自动化测试的区别是啥?

一、 手工测试 1、 什么是手工测试&#xff1f; 手工测试是由测试工程师手动测试软件各项功能以发现缺陷的过程。测试人员应该从最终用户的角度出发&#xff0c;并确保所有功能都按照项目的需求文档中的说明工作。在此过程中&#xff0c;测试人员执行测试用例 并手动生成报告…

Word控件Spire.Doc 【文本】教程(11) ;如何将文本分成两列并在它们之间添加行

列被广泛用于设置页面布局&#xff0c;它可以将文本分成两列或多列&#xff0c;以便文本可以在同一页面上从一列流到下一列。使用 Spire.Doc&#xff0c;我们可以实现此功能并同时在列之间添加一条线。本文将介绍如何将文本拆分为两列并在它们之间添加行。 Spire.Doc for.NET …

图解 Redis 分布式锁,写得太好了!

分布式锁的演进 基本原理 我们可以同时去一个地方“占坑”&#xff0c;如果占到&#xff0c;就执行逻辑。否则就必须等待&#xff0c;直到释放锁。“占坑”可以去redis&#xff0c;可以去数据库&#xff0c;可以去任何大家都能访问的地方。等待可以自旋的方式。 阶段一 publi…

上海各梯队IB学校怎么选?

近日&#xff0c;随着各大国际学校开始公布秋招信息&#xff0c;第一轮秋招考试也将在本周末正式到来。 除了春招主力军A-level学校以外&#xff0c;许多IB和AP美高学校的秋招都格外收到关注。上海到底有哪些优质的IB学校&#xff1f;学生的IB成绩和升学情况如何&#xff1f;什…

中国房车产业深度调研及未来发展现状趋势预测报告

高消费人群的房车旅行新宠&#xff0c;百亿规模产业正在爆发。 随着人们收入和消费水平的提高&#xff0c;具有移动性、独立性、私密性等特点的房车旅游正成为新的热门中高端旅游产品。在小红的书里&#xff0c;与房车相关的笔记有40多万条。在Tik Tok的“房车”和“房车旅行”…

日本知名汽车零部件公司巡礼系列之株式会社104

株式会社104 业务内容&#xff1a; 汽车部件制造(刹车零件、发动机支架、其他支架等) 房屋部件制造 复印机等零件制造 公司简介&#xff1a; 成立时间&#xff1a;1978年3月 资本金&#xff1a;1000万日元&#xff08;2022年汇率约50万人民币&#xff09; 员工数&#x…

BSA-PEI,牛血清白蛋白-聚乙烯亚胺,BSA-聚乙烯亚胺的保存

产品名称&#xff1a;牛血清白蛋白-聚乙烯亚胺&#xff0c;BSA-聚乙烯亚胺 英文名称&#xff1a;BSA-PEI 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 温馨提…