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

老榕树的Java专题:Redis 从入门到实践

一、引言

在当今的软件开发领域,数据的高效存储和快速访问是至关重要的。Redis(Remote Dictionary Server)作为一个开源的、基于内存的数据结构存储系统,因其高性能、丰富的数据类型和广泛的应用场景,成为了众多开发者的首选。本文将详细介绍 Redis 的基本概念、数据类型、使用场景以及实际操作示例,帮助你快速掌握 Redis 的使用。

二、Redis 简介

2.1 定义

Redis 是一个使用 ANSI C 编写的、开源的、支持网络、可基于内存也可持久化的日志型、Key - Value 数据库,并提供多种语言的 API。它以键值对的形式存储数据,键通常是字符串,而值可以是多种数据类型,如字符串、哈希、列表、集合和有序集合等。

2.2 特点

  • 高性能:Redis 将数据存储在内存中,因此读写速度非常快,能够处理大量的并发请求。官方提供的数据表明,Redis 能达到 10 万级别的 QPS(每秒查询率)。
  • 丰富的数据类型:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)等多种数据类型,满足不同场景的需求。
  • 持久化:Redis 提供了两种持久化机制,RDB(Redis Database)和 AOF(Append - Only File),可以将内存中的数据保存到磁盘上,防止数据丢失。
  • 分布式:支持主从复制、哨兵模式和集群模式,方便构建高可用、可扩展的分布式系统。
  • 原子性:Redis 的所有操作都是原子性的,这保证了操作的一致性和可靠性。

三、Redis 数据类型及操作

3.1 字符串(String)

字符串是 Redis 中最基本的数据类型,它可以存储任何类型的数据,如文本、整数、二进制数据等。

# 设置键值对
redis-cli set name "John"
# 获取键对应的值
redis-cli get name
# 对整数类型的键进行自增操作
redis-cli set age 20
redis-cli incr age

3.2 哈希(Hash)

哈希类型用于存储多个键值对,类似于 Python 中的字典。

# 设置哈希字段
redis-cli hset user:1 name "Alice"
redis-cli hset user:1 age 25
# 获取哈希字段的值
redis-cli hget user:1 name
# 获取哈希的所有字段和值
redis-cli hgetall user:1

3.3 列表(List)

列表是一个有序的字符串元素集合,可以在列表的两端进行插入和删除操作。

# 在列表头部插入元素
redis-cli lpush mylist "apple"
redis-cli lpush mylist "banana"
# 获取列表指定范围内的元素
redis-cli lrange mylist 0 -1
# 从列表尾部弹出元素
redis-cli rpop mylist

3.4 集合(Set)

集合是一个无序且唯一的字符串元素集合,支持交集、并集、差集等操作。

# 向集合中添加元素
redis-cli sadd myset "red"
redis-cli sadd myset "green"
# 获取集合中的所有元素
redis-cli smembers myset
# 判断元素是否在集合中
redis-cli sismember myset "red"

3.5 有序集合(Sorted Set)

有序集合与集合类似,但每个元素都关联了一个分数(score),通过分数对元素进行排序。

# 向有序集合中添加元素
redis-cli zadd myzset 10 "item1"
redis-cli zadd myzset 20 "item2"
# 获取有序集合中指定分数范围内的元素
redis-cli zrangebyscore myzset 0 20

四、Redis 持久化机制

4.1 RDB(Redis Database)

RDB 是 Redis 的一种快照持久化方式,它会在指定的时间间隔内将内存中的数据快照保存到磁盘上。RDB 的优点是文件紧凑,适合用于备份和灾难恢复;缺点是可能会丢失最后一次快照之后的数据。

# 在 redis.conf 中配置 RDB 规则
save 900 1     # 900 秒内至少有 1 个键被修改则进行快照
save 300 10    # 300 秒内至少有 10 个键被修改则进行快照
save 60 10000  # 60 秒内至少有 10000 个键被修改则进行快照

4.2 AOF(Append - Only File)

AOF 是 Redis 的另一种持久化方式,它会将所有的写操作以日志的形式追加到文件末尾。AOF 的优点是数据安全性高,最多只会丢失 1 秒的数据;缺点是文件体积较大,恢复速度相对较慢。

# 在 redis.conf 中开启 AOF
appendonly yes
# 配置 AOF 同步策略
appendfsync always  # 每次写操作都同步到磁盘
appendfsync everysec # 每秒同步一次
appendfsync no      # 由操作系统决定何时同步

五、Redis 使用场景

5.1 缓存

Redis 作为缓存可以大大提高应用程序的响应速度,减少对数据库的访问压力。例如,将经常访问的数据存储在 Redis 中,当应用程序需要这些数据时,首先从 Redis 中获取,如果 Redis 中没有,则从数据库中获取并将数据存入 Redis。

5.2 会话管理

在分布式系统中,Redis 可以用于存储用户的会话信息,实现会话的共享和管理。例如,将用户的登录状态、权限信息等存储在 Redis 中,不同的服务可以通过 Redis 来获取和验证用户的会话信息。

5.3 消息队列

Redis 的列表数据类型可以作为简单的消息队列使用。生产者将消息添加到列表的一端,消费者从列表的另一端获取消息进行处理。

5.4 排行榜

利用 Redis 的有序集合数据类型可以方便地实现排行榜功能。例如,根据用户的得分将用户添加到有序集合中,通过分数进行排序,就可以轻松实现排行榜的展示。

六、Java 中使用 Redis

6.1 添加依赖

如果你使用 Maven 项目,可以在 pom.xml 中添加 Jedis 依赖:

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

6.2 Java 代码示例

import redis.clients.jedis.Jedis;public class RedisExample {public static void main(String[] args) {// 连接 Redis 服务器Jedis jedis = new Jedis("localhost", 6379);// 设置键值对jedis.set("message", "Hello, Redis!");// 获取键对应的值String value = jedis.get("message");System.out.println(value);// 关闭连接jedis.close();}
}

七、总结

Redis 作为一个高性能、功能丰富的内存数据库,在现代软件开发中有着广泛的应用。通过本文的介绍,你应该对 Redis 的基本概念、数据类型、持久化机制、使用场景以及在 Java 中的使用有了更深入的了解。希望你能将 Redis 应用到实际项目中,发挥它的优势,提高系统的性能和可靠性。在实际使用过程中,还需要根据具体的业务需求和场景进行合理的配置和优化。

相关文章:

老榕树的Java专题:Redis 从入门到实践

一、引言 在当今的软件开发领域&#xff0c;数据的高效存储和快速访问是至关重要的。Redis&#xff08;Remote Dictionary Server&#xff09;作为一个开源的、基于内存的数据结构存储系统&#xff0c;因其高性能、丰富的数据类型和广泛的应用场景&#xff0c;成为了众多开发者…...

123,【7】 buuctf web [极客大挑战 2019]Secret File

进入靶场 太熟悉了&#xff0c;有种回家的感觉 查看源代码&#xff0c;发现一个紫色文件 点下看看 点secret 信息被隐藏了 要么源代码&#xff0c;要么抓包 源代码没有&#xff0c;抓包 自己点击时只能看到1和3处的文件&#xff0c;点击1后直接跳转3&#xff0c;根本不出…...

微服务知识——微服务拆分规范

文章目录 一、微服务拆分规范1、高内聚、低耦合2、服务拆分正交性原则3、服务拆分层级最多三层4、服务粒度适中、演进式拆分5、避免环形依赖、双向依赖6、通用化接口设计&#xff0c;减少定制化设计7、接口设计需要严格保证兼容性8、将串行调用改为并行调用&#xff0c;或者异步…...

docker数据持久化的意义

Docker 数据持久化是指在 Docker 容器中保存的数据不会因为容器的停止、删除或重启而丢失。Docker 容器本身是临时性的&#xff0c;默认情况下&#xff0c;容器内的文件系统是临时的&#xff0c;容器停止或删除后&#xff0c;其中的数据也会随之丢失。为了确保重要数据&#xf…...

双目标定与生成深度图

基于C#联合Halcon实现双目标定整体效果 一&#xff0c;标定 1&#xff0c;标定前准备工作 &#xff08;获取描述文件与获取相机参数&#xff09; 针对标准标定板可以直接调用官方提供描述文件&#xff0c;也可以自己生成描述文件后用PS文件打印 2&#xff0c;相机标定 &…...

【SQL】count(1)、count() 与 count(列名) 的区别

在 SQL 中&#xff0c;COUNT 函数用于计算查询结果集中的行数。COUNT(1)、COUNT(*) 和 COUNT(列名) 都可以用来统计行数&#xff0c;但它们在实现细节和使用场景上有一些区别。以下是详细的解释&#xff1a; 1. COUNT(1) 定义: COUNT(1) 计算查询结果集中的行数。 实现: 在执…...

使用bucardo实现postgresql数据库双主同步

使用bucardo实现postgresql数据库双主同步 方案优缺点 优点 pg数据库只支持单向数据复制&#xff0c;双机部署一般只能使用主&#xff08;读写&#xff09;备&#xff08;只读&#xff09;模式。而使用bucardo能实现pg数据库双机的双主模式&#xff0c;支持同时双写&#xf…...

在 Navicat 17 中扩展 PostgreSQL 数据类型 | 创建自定义域

定义域 以适当的格式存储数据可以确保数据完整性&#xff0c;防止错误&#xff0c;优化性能&#xff0c;并通过实施验证规则和支持高效数据管理来维护系统间的一致性。基于这些原因&#xff0c;顶级关系数据库&#xff08;如PostgreSQL&#xff09;提供了多种数据类型。此外&a…...

【Apache Paimon】-- 15 -- 利用 paimon-flink-action 同步 postgresql 表数据

利用 Paimon Schema Evolution 核心特性同步变更的 postgresql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工消息通知,然后手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hi…...

获取 ARM Cortex - M 系列处理器中 PRIMASK 寄存器的值

第一种实现&#xff08;纯汇编形式&#xff09; __ASM uint32_t __get_PRIMASK(void) {mrs r0, primaskbx lr }代码分析 __ASM 关键字&#xff1a;这通常是特定编译器&#xff08;如 ARM GCC 等&#xff09;用于嵌入汇编代码的指示符。它告诉编译器下面的代码是汇编代码。mrs …...

Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 替代】

&#x1f380;&#x1f380;Shell语法入门篇 系列篇 &#x1f380;&#x1f380; LinuxDocer 容器化部署之 Shell 语法入门篇 【准备阶段】LinuxDocer 容器化部署之 Shell 语法入门篇 【Shell变量】LinuxDocer 容器化部署之 Shell 语法入门篇 【Shell数组与函数】LinuxDocer 容…...

如何处理网络连接错误导致的fetch失败?

处理由于网络连接错误导致的 fetch 失败通常涉及捕获网络错误并提供适当的用户反馈。以下是如何在 Vue 3 中实现这一点的步骤和示例。 一、更新 useFetch 函数 在 useFetch 函数中,需要捕获网络错误,并设置相应的错误信息。网络错误通常会抛出一个 TypeError,可以根据这个…...

PHP PDO 教程

PHP PDO 教程 概述 PHP PDO&#xff08;PHP Data Objects&#xff09;扩展为PHP提供了数据访问抽象层。PDO可以让你使用相同的接口访问多种数据库系统&#xff0c;这大大简化了数据库操作。本文将详细介绍PHP PDO的基本用法、优势以及在实际开发中的应用。 ##PDO 简介 PDO是…...

离线统信系统的python第三方库批量安装流程

一、关于UOS本机 操作系统&#xff1a;UOS&#xff08;基于Debian的Linux发行版&#xff09; CPU&#xff1a;海光x86 二、具体步骤 1、在联网的电脑上用控制台的pip命令批量下载指定版本的第三方库 方法A cd <目标位置的绝对路径> pip download -d . --platform many…...

IDEA+DeepSeek让Java开发起飞

1.获取DeepSeek秘钥 登录DeepSeek官网 : https://www.deepseek.com/ 进入API开放平台&#xff0c;第一次需要注册一个账号 进去之后需要创建一个API KEY&#xff0c;然后把APIkey记录保存下来 接着我们获取DeepSeek的API对话接口地址&#xff0c;点击左边的&#xff1a;接口…...

mysql的原理及经验

1. 存储引擎 存储引擎是MySQL的核心组件之一&#xff0c;它负责数据的存储和检索。MySQL支持多种存储引擎&#xff0c;每种引擎都有其独特的特点和适用场景。 InnoDB&#xff1a;这是MySQL的默认存储引擎&#xff0c;支持事务处理&#xff08;ACID特性&#xff09;、行级锁定和…...

苹果公司宣布正式开源 Xcode 引擎 Swift Build145

2025 年 2 月 1 日&#xff0c;苹果公司宣布正式开源 Xcode 引擎 Swift Build145。 Swift 是苹果公司于 2014 年推出的一种开源编程语言&#xff0c;用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 等平台的应用程序。 发展历程 诞生&#xff1a;2014 年&#xff0c;苹果在全球…...

怀旧经典:1200+款红白机游戏合集,Windows版一键畅玩

​沉浸在怀旧的海洋中&#xff0c;体验经典红白机游戏的魅力&#xff01;我们为您精心准备了超过1200款经典游戏的合集&#xff0c;每一款都是时代的印记&#xff0c;每一场都是回忆的旅程。这个合集不仅包含了丰富的游戏资源&#xff0c;还内置了多个Windows版的NES模拟器&…...

《解锁GANs黑科技:打造影视游戏的逼真3D模型》

在游戏与影视制作领域&#xff0c;逼真的3D模型是构建沉浸式虚拟世界的关键要素。从游戏中栩栩如生的角色形象&#xff0c;到影视里震撼人心的宏大场景&#xff0c;高品质3D模型的重要性不言而喻。随着人工智能技术的飞速发展&#xff0c;生成对抗网络&#xff08;GANs&#xf…...

【漫话机器学习系列】083.安斯库姆四重奏(Anscombe‘s Quartet)

安斯库姆四重奏&#xff08;Anscombes Quartet&#xff09; 1. 什么是安斯库姆四重奏&#xff1f; 安斯库姆四重奏&#xff08;Anscombes Quartet&#xff09;是一组由统计学家弗朗西斯安斯库姆&#xff08;Francis Anscombe&#xff09; 在 1973 年 提出的 四组数据集。它们…...

kafka消费端之分区分配策略

文章目录 概述分区分配策略RangeAssignor分配策略RoundRobinAssignor分配策略StickyAssignor自定义分区分配策略 总结 概述 我们知道kafka的topic可以被分成多个分区&#xff0c;消费者在集群模式下消费时一个消费组内的每个消费者实例只能消费到一个分区的消息&#xff0c;那…...

e2studio开发RA2E1(9)----定时器GPT配置输入捕获

e2studio开发RA2E1.9--定时器GPT配置输入捕获 概述视频教学样品申请硬件准备参考程序源码下载选择计时器时钟源UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()printf输出重定向到串口定时器输入捕获配…...

【Elasticsearch】分桶聚合功能概述

这些聚合功能可以根据它们的作用和应用场景分为几大类&#xff0c;以下是分类后的结果&#xff1a; 1.基础聚合&#xff08;Basic Aggregations&#xff09; • Terms&#xff08;字段聚合&#xff09; 根据字段值对数据进行分组并统计。 例子&#xff1a;按产品类别统计销…...

开源安全一站式构建!开启企业开源治理新篇章

在如今信息技术日新月异、飞速发展的数字化时代&#xff0c;开源技术如同一股强劲的东风&#xff0c;为企业创新注入了源源不断的活力&#xff0c;然而&#xff0c;正如一枚硬币有正反两面&#xff0c;开源技术的广泛应用亦伴随着不容忽视的挑战。安全风险如影随形&#xff0c;…...

功能架构元模型

功能架构的元模型是对功能架构进行描述和建模的基础框架,它有助于统一不同团队对系统的理解,并为系统的设计和开发提供一致的标准和规范。虽然具体的元模型可能因不同的应用领域和特定需求而有所差异,但一般来说,功能架构的元模型可以涵盖以下几个方面: 组件/模块元模型:…...

Node.js 与 npm 版本兼容性问题详解:如何避免版本冲突

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…...

鸿蒙开发中 SaveButton 按钮 保存按钮点击后权限授权失败。

原因分析 查看官方文档的解释 在 控制台中 过滤这个字段 过滤关键字"SecurityComponentCheckFail"可以获取具体原因。 得到 产生的原因 是 因为层叠的原因 savebutton 组件必须的 在屏幕的最高层 不能有任何的覆盖和遮挡 通过这样书写就解决了 // 下面是安…...

胜任力冰山模型:深入探索职业能力的多维结构

目录 1、序言 2、什么是胜任力&#xff1f; 3、任职资格和胜任力的区别 4、胜任力冰山模型&#xff1a;职场能力的多维展现 4.1、冰山水面上的部分 4.2、冰山水面下的部分 4.3、深层的个人特质与价值观 5、如何平衡任职资格与胜任能力 6、结语 1、序言 在快速发展的I…...

C#面试常考随笔12:游戏开发中常用的设计模式【C#面试题(中级篇)补充】

C#面试题&#xff08;中级篇&#xff09;&#xff0c;详细讲解&#xff0c;帮助你深刻理解&#xff0c;拒绝背话术&#xff01;-CSDN博客 简单工厂模式 优点&#xff1a; 根据条件有工厂类直接创建具体的产品 客户端无需知道具体的对象名字&#xff0c;可以通过配置文件创建…...

gst_pad_add_probe使用笔记

gst_pad_add_probe 是 GStreamer 中的一个函数&#xff0c;用于在 pad 上添加探针&#xff08;probe&#xff09;函数&#xff0c;以便监控或者修改流经该 pad 的数据。通过探针&#xff0c;可以在数据流的不同阶段执行自定义操作&#xff0c;如修改、丢弃或分析数据。 函数原…...