Redis—SpringDataRedis

与其明天开始,不如现在行动!

文章目录

    • SpringDataRedis
    • RedisTemplate
      • 方案一
      • 方案二
  • 💎总结


SpringDataRedis

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

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

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

SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:

API返回值类型说明
redisTemplate.opsForValue()ValueOperations操作String类型数据
redisTemplate.opsForHash()HashOperations操作Hash类型数据
redisTemplate.opsForList()ListOperations操作List类型数据
redisTemplate.opsForSet()SetOperations操作Set类型数据
redisTemplate.opsForZSet()ZSetOperations操作SortedSet类型数据
redisTemplate通用的命令

快速入门:

  1. 引入依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.11.1</version>
    </dependency>
    
  2. 配置文件

    spring:data:redis:host: " 你的主机地址"port: 端口号password: "密码"lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 1000
    
  3. 注入RedisTemplate

    @Autowired
    private RedisTemplate redisTemplate;
    
  4. 编写测试

    @SpringBootTest
    class RedisDemoApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid contextLoads() {redisTemplate.opsForValue().set("name", "Lucy");Object name = redisTemplate.opsForValue().get("name");System.out.println("name" + name);}}
    

RedisTemplate

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

  1. 方案一
    1. 自定义RedisTemplate
    2. 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
  2. 方案二
    1. 使用StringRedisTemplate
    2. 写入Redis时,手动把对象序列化为JSON
    3. 读取Redis,手动把读取到的JSON反序列化为对象

方案一

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

> get "\xac\xed\x00\x05t\x00\x04name"
"\xac\xed\x00\x05t\x00\x04Lucy"

缺点:

  1. 可读性差
  2. 内存占用较大

修改序列化方式:

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

存储对象

User类:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {public String name;public int age;
}

测试:

@Test
void testUser() {redisTemplate.opsForValue().set("user:1000", new User("小明", 18));Object o = redisTemplate.opsForValue().get("user:1000");System.out.println("o = " + o);
}

方案二

  1. 注入StringRedisTemplate

    @Autowiredprivate StringRedisTemplate redisTemplate;
    
  2. 测试

    private static final ObjectMapper mapper = new ObjectMapper();@Testvoid testUser() throws JsonProcessingException {//创建对象User user = new User("胖虎", 20);//手动序列化String json = mapper.writeValueAsString(user);redisTemplate.opsForValue().set("user:2000", json);String jsonUser = redisTemplate.opsForValue().get("user:2000");//手动反序列化User user1 = mapper.readValue(jsonUser, User.class);System.out.println("user = " + user1);}
    

💎总结

本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


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

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

相关文章

C# 字符串格式化

写在前面 在日常编程中&#xff0c;经常需要对字符串进行格式化操作&#xff0c;以便呈现为不同的格式&#xff0c;满足各种各样的显示需求&#xff0c;C#的字符串格式化参数是非常丰富的&#xff0c;这里做个简单的列举&#xff0c;以供后续参考和延伸。 代码实现 var curr…

vite+vue3+electron搭建项目

编辑器使用vscode&#xff0c;打开一个空文件夹 第一步 初始化vite项目 初始化vite项目&#xff0c;命令 npm init vite 第二步 下载依赖 进入新建的项目&#xff0c;下载依赖&#xff0c;命令 cd vite-projec npm i第三步 使用cnpm下载 electron依赖 新建一个终端&#…

HTTP 408错误:请求超时,如何避免

大家好&#xff0c;今天我们来聊聊一个常见的问题——HTTP 408错误&#xff0c;也就是请求超时。这个错误就像是一个网络中的时间旅行者&#xff0c;总是不期而至&#xff0c;让人摸不着头脑。但是别担心&#xff0c;我有一些方法可以帮助你避免这个错误。 首先&#xff0c;我…

Python的模块与包

前言 当你编写Python程序时&#xff0c;你经常会引入别人编写好的模块。有的模块是Python自带的&#xff0c;你无需安装就能直接引用&#xff0c;而有的模块则是由Python生态系统里的第三方工程师提供的&#xff0c;你需要通过pip安装之后&#xff0c;才能进行使用。由…

Electron 跨平台打包

最近利用 Electron 制作跨平台安装包&#xff0c;记录步骤&#xff0c;踩坑多多。 首先&#xff0c;一步步搭建项目 一、搭建环境 初始化 package.json&#xff0c;这里要求 node 版本不低于14.16&#xff0c;我用的 v14.16.0&#xff0c;16版本在 Linux 下容易出现安装依赖…

js传递json数据过大的解决方案

protobufjs 使用protobuf&#xff0c;定义如下结构 Person.protobuf syntax "proto3";message Person {string name 1;int32 age 2; }Person.thrift namespace java com.example.Personstruct Person {1: required string name,2: required i32 age }使用bench…

教师考编需要什么条件

教师考编&#xff0c;了解考编需要什么条件是非常重要的。接下来&#xff0c;我来介绍几点教师考编的条件。 需要具备相应的学历背景。一般来说&#xff0c;考编需要具备本科或以上学历&#xff0c;并且所学专业与所报考的岗位相关。在某些特殊情况下&#xff0c;如报考幼儿园教…

【C语言(十一)】

C语言内存函数 一、memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果sourc…

什么是OPcache?它对性能有什么影响?

OPcache&#xff08;Opcode Cache&#xff09;是 PHP 的一个内置扩展&#xff0c;用于缓存 PHP 脚本的解释代码&#xff08;opcode&#xff09;&#xff0c;从而提高 PHP 应用程序的性能。当 PHP 脚本首次被解释执行时&#xff0c;PHP 将脚本编译成一组中间代码&#xff08;opc…

Spark Paimon 中为什么我指定的分区没有下推

背景 最近在使用 Paimon 的时候遇到了一件很有意思的事情&#xff0c;写的 SQL 居然读取的数据不下推&#xff0c;明明是分区表&#xff0c;但是却全量扫描了。 目前使用的版本信息如下: Spark 3.5.0 Paimon 0.6.0 paimon的建表语句如下&#xff1a; CREATE TABLE table_demo…

苍穹外卖项目笔记(12)— 数据统计、Excel报表

前言 代码链接&#xff1a; Echo0701/take-out⁤ (github.com) 1 工作台 需求分析和设计 产品原型 工作台是系统运营的数据看板&#xff0c;并提供快捷操作入口&#xff0c;可以有效提高商家的工作效率 接口设计 ① 今日数据接口&#xff1a; ② 订单管理接口&#xff1…

LeetCode Hot100 146.LRU缓存

题目&#xff1a; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&…

计算机组成原理—中央处理器CPU

文章目录 CPU的功能与架构CPU的组成运算器控制器 指令执行过程指令流程指令执行方案 数据通路单总线结构专用通路结构 硬布线控制器设计硬布线执行流程硬布线CU内部怎么设计微操作的组合电路 总结 微程序控制器设计微程序的基本理念微程序的基本结构 微指令设计微程序CU设计 指…

Python文本信息解析:从基础到高级实战‘[pp]]‘[

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python文本信息解析&#xff1a;从基础到高级实战&#xff0c;全文3600字&#xff0c;阅读大约10分钟。 文本处理是Python编程中一项不可或缺的技能&#xff0c;覆盖了广泛的…

Spark 单机搭建实战指南

摘要&#xff1a;本文将详细介绍如何在单台机器上搭建 Spark 分布式计算框架&#xff0c;涵盖环境准备、安装配置、运行测试等多个方面&#xff0c;帮助读者轻松上手 Spark 开发。 一、引言 Apache Spark 是一个开源的分布式计算系统&#xff0c;提供了强大的数据处理和分析能力…

2019年第八届数学建模国际赛小美赛D题安全选举的答案是什么解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 D题 安全选举的答案是什么 原题再现&#xff1a; 随着美国进入一场关键性的选举&#xff0c;在确保投票系统的完整性方面进展甚微。2016年总统大选期间&#xff0c;唐纳德特朗普因被指控受到外国干涉而入主白宫&#xff0c;这一问题再次成为…

资产侦查灯塔系统ARL部署

在docker和docker-compose都安装好的前提下进行部署 随便创建一个目录 mkdir docker_arl 切换到该目录 cd docker_arl 下面步骤是安装pip&#xff0c;如果已安装可以直接跳到wget命令下载灯塔系统文件 &#xff08;但是我不确定pip版本是否有影响&#xff0c;你也可以将命…

GAN的原理分析与实例

为了便于理解&#xff0c;可以先玩一玩这个网站&#xff1a;GAN Lab: Play with Generative Adversarial Networks in Your Browser! GAN的本质&#xff1a;枯叶蝶和鸟。生成器的目标&#xff1a;让枯叶蝶进化&#xff0c;变得像枯叶&#xff0c;不被鸟准确识别。判别器的目标&…

Java中的链表

文章目录 前言一、链表的概念及结构二、单向不带头非循坏链表的实现2.1打印链表2.2求链表的长度2.3头插法2.4尾插法2.5任意位置插入2.6查找是否包含某个元素的节点2.7删除第一次出现这个元素的节点2.8删除包含这个元素的所以节点2.9清空链表单向链表的测试 三、双向不带头非循坏…

【Python】人工智能-机器学习——不调库手撕深度网络分类问题

1. 作业内容描述 1.1 背景 数据集大小150该数据有4个属性&#xff0c;分别如下 Sepal.Length&#xff1a;花萼长度(cm)Sepal.Width&#xff1a;花萼宽度单位(cm)Petal.Length&#xff1a;花瓣长度(cm)Petal.Width&#xff1a;花瓣宽度(cm)category&#xff1a;类别&#xff0…