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

老榕树的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;成为了众多开发者…...

【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十五章 API 接口性能测试1 性能负载的类型2 Postman 负载配置3 Postman 性能测试实战3.1 Fixed 型负载下的性能测试3.2 基于数据驱动的 Postman 接口性能测试 4 性能测试的注意事项 写在前面 终于来到了…...

在 Qt 开发中,可以将 QML 封装成库

在 Qt 开发中&#xff0c;可以将 QML 封装成库&#xff0c;以便在多个项目中复用 QML 组件或模块。下面通过一个简单的例子说明如何将 QML 封装成库并在其他项目中使用。 1. 创建 QML 库项目 首先&#xff0c;我们创建一个新的 Qt 项目&#xff0c;专门用于封装 QML 组件。假…...

换电脑了如何快速导出vscode里的插件

当你换电脑了&#xff0c;之前vscode里的插件又不想全部手动重装&#xff0c;那么恭喜你&#xff0c;刷到了这篇文章。 1. 将 VSCode 添加到系统路径 macOS 打开 VSCode。按下 Command Shift P 打开命令面板。 3。 输入 Shell Command: Install ‘code’ command in PATH …...

点大商城V2-2.6.6源码全开源uniapp +搭建教程

一.介绍 点大商城V2独立开源版本&#xff0c;版本更新至2.6.6&#xff0c;系统支持多端&#xff0c;前端为UNiapp&#xff0c;多端编译。 二.搭建环境&#xff1a; 系统环境&#xff1a;CentOS、 运行环境&#xff1a;宝塔 Linux 网站环境&#xff1a;Nginx 1.21 MySQL 5.…...

9 Pydantic复杂数据结构的处理

在构建现代 Web 应用时&#xff0c;我们往往需要处理复杂的输入和输出数据结构。例如&#xff0c;响应数据可能包含嵌套字典、列表、元组&#xff0c;甚至是多个嵌套对象。Pydantic 是一个强大的数据验证和序列化库&#xff0c;可以帮助我们轻松地处理这些复杂的数据结构&#…...

springboot+redis实现将树形结构存储到redis

1.pom配置redis <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.yml文件配置&#xff1a; spring:redis:database: 0host: 1.1.1.1port: 6379timeout:…...

6、使用one-api管理统一管理大模型,并开始使用本地大模型

文章目录 本节内容介绍集中接入&#xff1a;将大模型统一管理起来当使用了大模型代理大模型代理示例 开源模型&#xff1a;如何使用Hugging Face上的模型modelscope使用 pipeline 调用模型用底层实现调用模型流式输出 如何在项目中使用开源模型使用 LangChain使用集中接入开始使…...

Windows安装Lyx

Lyx介绍 LyX 是一个基于 LaTeX 的可视化编辑器&#xff0c;可以让在不编写 LaTeX 代码的情况下使用 LaTeX 的排版功能。 需要依赖Latex环境&#xff0c;如Tex live 或者 MiKTeX Lyx 官网 Lyx官网 安装包下载 点击download默认进入最新版本下载界面 在Recent News/ News里可选…...

一文讲透大模型部署工具ollama--结合本地化部署deepseek实战

Ollama 是一个开源的人工智能平台&#xff0c;专注于在本地高效运行大型语言模型&#xff08;LLMs&#xff09;。通过 Ollama&#xff0c;开发者可以在自己的机器上运行多种大规模语言模型&#xff0c;而不必依赖于云端服务。它支持对大模型的管理和本地化部署&#xff0c;并且…...

网络防御高级

接口配置&#xff1a; SW2: [sw2]vlan 10 [sw2]vlan 20 [sw2]interface GigabitEthernet 0/0/1 [sw2-GigabitEthernet0/0/1]port link-type trunk [SW2-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 [sw2]interface GigabitEthernet 0/0/2 [sw2-GigabitEthernet0/0/…...

使用PyCharm进行Django项目开发环境搭建

如果在PyCharm中创建Django项目 1. 打开PyCharm&#xff0c;选择新建项目 2.左侧选择Django&#xff0c;并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一&#xff1a; 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…...

如何定义“破坏环境”

当我们谈论破坏环境时&#xff0c;通常会从人类活动对自然生态造成负面影响的角度来定义。例如&#xff0c;大规模的森林砍伐、工业污染排放、温室气体增加等&#xff0c;都是典型的破坏环境的行为。我们常常看到这些行为导致了生态系统的破坏、物种灭绝、气候变化等问题&#…...

现代前端开发的演进与未来趋势:从工具革新到技术突破

在过去的十年中&#xff0c;前端开发经历了翻天覆地的变化。从最初的静态页面到如今复杂的单页应用&#xff08;SPA&#xff09;&#xff0c;从手动操作 DOM 到基于虚拟 DOM 的高效渲染&#xff0c;从前端“三剑客”&#xff08;HTML/CSS/JS&#xff09;到全栈框架的兴起&#…...

活动预告 |【Part1】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识

课程介绍 通过参加“Microsoft 安全在线技术公开课&#xff1a;安全性、合规性和身份基础知识”活动提升你的技能。在本次免费的介绍性活动中&#xff0c;你将获得所需的安全技能和培训&#xff0c;以创造影响力并利用机会推动职业发展。你将了解安全性、合规性和身份的基础知识…...

idea Ai工具通义灵码,Copilot我的使用方法以及比较

我用过多个idea Ai 编程工具&#xff0c;大约用了1年时间&#xff0c;来体会他们那个好用&#xff0c;以下只是针对我个人的一点分享&#xff0c;不一定对你适用 仅作参考。 介于篇幅原因我觉得能说上好用的 目前只有两个 一个是阿里的通义灵码和Copilot&#xff0c;我用它来干…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter8-对象、类与面向对象编程

八、对象、类与面向对象编程 ECMA-262 将对象定义为一组属性的无序集合。严格来说&#xff0c;这意味着对象就是一组没有特定顺序的 值。对象的每个属性或方法都由一个名称来标识&#xff0c;这个名称映射到一个值。正因为如此&#xff08;以及其他还未讨论的原因&#xff09;&…...

介绍下SpringBoot常用的依赖项

Spring Boot 是一个用于快速开发 Spring 应用程序的框架&#xff0c;它通过自动配置和依赖管理简化了开发过程。以下是一些 Spring Boot 项目中常用的依赖项&#xff1a; 1. Spring Boot Starter Web 作用: 用于构建 Web 应用程序&#xff0c;包括 RESTful 服务。依赖项: spr…...

深度解析策略模式:从理论到企业级实战应用

一、策略模式的本质&#xff1a;面向接口的算法工厂 策略模式&#xff08;Strategy Pattern&#xff09;是行为型设计模式的典型代表&#xff0c;其核心思想是将算法族抽象为独立对象&#xff0c;使其能够相互替换。这种模式完美体现了以下面向对象设计原则&#xff1a; 开闭原…...

【Linux】深入理解linux权限

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...