【Redis/2】核心特性、应用场景与安装配置

文章目录

  • 一、初识 Redis
    • 1.1 Redis 概述
      • 1. Redis 简介
      • 2. Redis 的发展历程
    • 1.2 Redis 核心特性
      • 1. 高性能
      • 2. 丰富的数据类型
      • 3. 持久化
      • 4. 原子操作
      • 5. 主从复制
      • 6. 高可用性与分布式
      • 7. 内存存储与低延迟
      • 8. 灵活的过期策略
      • 9. 事务支持
      • 10. 简单的 API
      • 总结
    • 1.3 Redis 应用场景
      • Redis 适用场景
      • Redis 不适用场景
    • 1.4 Redis 版本
  • 二、Redis 安装与基础操作
    • 2.1 安装 Redis
    • 2.2 支持远程连接
    • 2.3 Redis 基础控制
  • 三、Redis 重要文件 & 作用
    • 3.1 工具 & 脚本
    • 3.2 配置文件
    • 3.3 持久化文件存储目录
    • 3.4 日志文件目录
  • 四、Redis 命令行客户端
    • 4.1 连接Redis服务器的两种模式
      • 1. 交互式连接(推荐用于日常操作)
      • 2. 命令行模式(适合脚本调用)
    • 4.2 连接参数简化技巧
    • 4.3 高级连接技巧
    • 4.4 连接问题排查

一、初识 Redis

1.1 Redis 概述

1. Redis 简介

Redis(Remote Dictionary Server) 是一款高性能的 键值存储(Key-Value Store) 数据库,属于 NoSQL 数据库的一种。相较于传统键值数据库,Redis 的核心优势在于其支持 多种数据结构,包括:

  • String(字符串)
  • Hash(哈希表)
  • List(列表)
  • Set(集合)
  • Sorted Set(有序集合)
  • Bitmaps(位图)
  • HyperLogLog(基数统计)
  • GEO(地理空间索引)

由于 Redis 数据主要存储在内存中,其读写性能极高(可达 10万+ QPS)。同时,Redis 提供 持久化机制(RDB 快照和 AOF 日志),确保数据在宕机或故障时不会丢失。

此外,Redis 还支持:

  • 键过期(Key Expiration)
  • 发布订阅(Pub/Sub)
  • 事务(Transactions)
  • 流水线(Pipeline)
  • Lua 脚本(Lua Scripting)

2. Redis 的发展历程

  • 2008 年:Redis 由 Salvatore Sanfilippo(@antirez) 开发,最初用于优化其项目 LLOOGG 的队列性能(替代 MySQL)。
  • 2009 年:Redis 1.0 开源发布,迅速获得广泛关注。
  • 至今:Redis 已成为全球最受欢迎的 内存数据库 之一,被众多 大型互联网公司 采用。

1.2 Redis 核心特性

  • MySQL 主要通过 存储数据,“关系型数据库”
  • Redis 通过 键值对 存储数据,“非关系型数据库”

根据官方的介绍,Redis 具有以下特性和优点:

1. 高性能

  • Redis 提供极高的读写性能,能在毫秒级的时间内完成数据操作。
  • 支持单线程架构,利用事件循环处理多个客户端请求,避免了上下文切换的开销。
  • 从网络角度上,Redis 使用了IO多路复用的机制(epoll)
  • Redis是C语言开发的,从某种程度上也减少了延迟以及提高了处理速度

2. 丰富的数据类型

  • 除了传统的键值对数据存储,Redis 支持多种复杂的数据类型,如:
    • 字符串(String)
    • 哈希(Hash)
    • 列表(List)
    • 集合(Set)
    • 有序集合(Sorted Set)
    • 位图(Bitmap)
    • HyperLogLog(用于基数统计)
    • 地理空间(Geospatial)

3. 持久化

  • Redis 提供了两种持久化机制:
    • RDB(Redis 数据库快照):通过定期将数据保存到磁盘中来持久化数据。
    • AOF(追加文件):每次对 Redis 进行写操作时,将操作命令追加到日志文件中。
  • 这两种方式可以结合使用,以确保数据的持久性和高可用性。

4. 原子操作

  • Redis 提供对数据的原子操作支持,确保在并发情况下,数据的修改不会发生冲突或不一致。

5. 主从复制

  • Redis 支持主从复制机制,可以通过复制将数据同步到多个从节点,从而提高数据的可用性与读取性能。

6. 高可用性与分布式

  • Redis 通过 Redis Sentinel 实现高可用性,能够自动故障转移(failover),保证系统的持续可用性。
  • Redis Cluster 支持分布式部署,可以自动分片(sharding),以支持大规模的数据存储。

7. 内存存储与低延迟

  • Redis 完全基于内存(RAM)操作,具有极低的延迟。
  • 适用于高频的读写操作,如实时应用程序、缓存等。

8. 灵活的过期策略

  • Redis 支持键值对的过期时间设置,可以自动删除过期的数据。
  • 支持 LRU(Least Recently Used)算法来清除最少使用的键,帮助控制内存使用。

9. 事务支持

  • Redis 提供了事务机制,支持 MULTIEXECWATCH 等命令来实现一组操作的原子执行。

10. 简单的 API

  • Redis 提供了非常简单直观的 API,易于集成和使用,支持多种编程语言,如 Python、Java、C、Go 等。

总结

下图是总结了Redis的核心功能:

在这里插入图片描述

  • 速度快:由于是内存数据库,读取速度极快。
  • 数据结构丰富:支持多种数据结构,能够满足不同场景的需求。
  • 高可用性:通过复制和故障转移机制确保系统的高可用性。
  • 易于扩展:支持分片和分布式架构,能轻松扩展为大规模分布式系统。
  • 灵活性强:支持多种持久化方案和过期策略。

1.3 Redis 应用场景

Redis 适用场景

  1. 缓存

    • Web缓存:Redis 常被用作缓存系统,以提高Web应用的响应速度和减轻数据库的负载。它通过存储热数据,避免重复查询数据库。
    • 页面缓存:可以将渲染过的页面存储在 Redis 中,从而快速返回给用户,减少服务器端渲染负担。
    • 数据库查询结果缓存:将数据库查询结果缓存在 Redis 中,避免对数据库的重复查询,减少数据库负载。
  2. 会话存储(Session Store)

    • Redis 常被用作会话存储,尤其是在处理大量用户会话时。由于 Redis 支持键值对存储和高效的过期策略,非常适合存储用户会话数据。
    • 它能支持高并发的读写,并且提供自动过期功能,确保会话数据能在合理时间后自动清理。
  3. 实时数据分析

    • Redis 的快速读写能力使它非常适合做实时数据分析。例如,使用 Redis 存储网站的实时访问数据、用户活动数据等。
    • 计数器:利用 Redis 的自增操作,可以很方便地实现点击计数、PV(页面浏览量)和 UV(独立访客数)等功能。
    • 实时流数据处理:借助 Redis 的 列表集合 等数据结构,可以实时处理和分析大量流数据。
  4. 排行榜/计分系统

    • 有序集合(Sorted Set) 是 Redis 的一项强大功能,非常适合实现排行榜和计分系统。通过有序集合,可以高效地存储并排序用户分数。
    • 常见应用如在线游戏的排行榜、社交平台的用户积分等。
  5. 消息队列(Message Queue)

    • Redis 可以作为高效的消息队列系统,支持 发布/订阅(Pub/Sub) 模式以及 列表 结构作为队列实现。
    • 它可以用来在分布式系统中进行异步任务处理、事件通知等场景。其快速的生产者/消费者模型能够实现低延迟的消息传递。
  6. 实时聊天系统

    • Redis 的发布/订阅模型(Pub/Sub)常常用于实现实时消息推送系统。通过 Redis,用户可以在不同的聊天室中实时交换消息。
    • 该功能非常适合社交应用、即时通讯工具、在线客服等场景。
  7. 队列任务系统

    • Redis 的列表(List)数据结构非常适合用来实现任务队列,支持 LPUSHRPOP 等原子操作,可以高效地进行任务的推送和消费。
    • 例如,后台任务处理、异步任务分发等场景。
  8. 分布式锁

    • 在分布式系统中,Redis 可以作为分布式锁的实现方式。通过 Redis 提供的 SETNX 命令,多个进程可以竞争获取锁,确保资源在同一时刻只被一个进程访问。
    • 这种锁的机制可广泛应用于分布式系统中的资源控制、事务管理等场景。

Redis 不适用场景

站在数据规模的角度看,数据可以分为大规模数据和小规模数据;我们知道 Redis 的数据是存在内存中的,如果数据量过于大的情况下,使用Redis经济成分很高(内存的价格远高于磁盘)

站在数据冷热的角度看,数据分为热数据与冷数据;热数据通常指需要频繁操作的数据,反之为冷数据,对于一个视频网站来说,视频的基本信息就属于热数据,用户观看记录一般情况下不会经常访问,属于冷数据。
如果将这些冷数据放在Redis中,就浪费了其内存空间。这些冷数据就不适合放在Redis中。
即将那些要经常被访问的数据放到内存中,而不经常被访问的放在磁盘中存储。


1.4 Redis 版本

Redis 借鉴了 Linux 操作系统的版本号命名规则:如果版本号的第二位是奇数,则表示该版本为非稳定版本(例如 2.7、2.9、3.1);如果是偶数,则为稳定版本(例如 2.6、2.8、3.0、3.2)。当前的奇数版本是下一个稳定版本的开发版本,例如 2.9 是 3.0 版本的开发版本。因此,生产环境通常选择偶数版本的 Redis。如果希望提前体验新的特性,可以选择最新的奇数版本。


二、Redis 安装与基础操作

下面相关的安装与操作部分主要以Ubuntu系统为主进行介绍:

2.1 安装 Redis

  1. 在 Ubuntu 系统中,直接使用 apt 安装即可:
apt install redis -y # -y 自动确认安装过程中的提示
  1. Windows 系统安装reids:
    • https://github.com/tporadowski/redis/releases
    • 进入github对应的目录下,直接下载压缩包或安装包msi 在这里插入图片描述
    • 安装后reids目录内容如下:在这里插入图片描述

2.2 支持远程连接

  1. Ubuntu 系统 修改 /etc/redis/redis.conf
  • 修改 bind 127.0.0.1bind 0.0.0.0
  • 修改 protected-mode yes 改为 protected-mode no
    在这里插入图片描述
  1. Windows 系统修改下载目录下的 redis.windows-service.conf
    在这里插入图片描述

2.3 Redis 基础控制

  1. 启动 Redis 服务

    service redis-server start
    
  2. 停止 Redis 服务

    service redis-server stop
    
  3. 重启 Redis 服务

    service redis-server restart
    

三、Redis 重要文件 & 作用

3.1 工具 & 脚本

下面是一些Redis中重要的工具与脚本,用于服务器的管理、性能测试、监控、数据文件的检查与修复等功能:

文件路径解释作用
/usr/bin/redis-benchmarkRedis 基准测试工具用于测试 Redis 服务器性能。可以模拟大量并发操作来评估 Redis 的性能表现。
/usr/bin/redis-check-aofAOF 文件检查工具用于检查和修复 Redis 的 AOF(追加文件)日志。如果 Redis 崩溃或数据不一致,可以使用它来检查和修复 AOF 文件。
/usr/bin/redis-check-rdbRDB 文件检查工具用于检查和修复 Redis 的 RDB(数据库快照)文件。如果 RDB 文件损坏或不完整,可以使用该工具进行修复。
/usr/bin/redis-cliRedis 命令行客户端通过命令行连接到 Redis 服务器,允许用户发送 Redis 命令进行交互、管理 Redis 实例。
/usr/bin/redis-sentinelRedis Sentinel 监控工具用于管理 Redis 集群的高可用性。它监控主服务器的健康状态,并在主服务器发生故障时,自动切换到备用服务器。
/usr/bin/redis-serverRedis 服务器启动程序启动 Redis 服务器实例,处理所有客户端的请求并执行数据存储和查询操作。
/usr/libexec/redis-shutdownRedis 关闭服务脚本用于优关闭 Redis 服务器,确保数据被正确保存并释放资源。

3.2 配置文件

/etc/redis-sentinel.conf
/etc/redis.conf
  • /etc/redis.conf 是 Redis 服务器的配置文件。
  • /etc/redis-sentinel.conf 是 Redis Sentinel 的配置文件。

3.3 持久化文件存储目录

/var/lib/redis/

Redis 持久化生产的 RDB 和 AOF ⽂件都默认生成于该目录下。

3.4 日志文件目录

/var/log/redis/

该目录下会保存 Redis 运行期间 产生的日志文件,默认按照天数进行分割,并会将一定日期的日期文件使用gzip格式压缩保存。

四、Redis 命令行客户端

Redis客户端与服务端的交互过程如下图:
在这里插入图片描述

4.1 连接Redis服务器的两种模式

1. 交互式连接(推荐用于日常操作)

连接命令格式

redis-cli -h {host} -p {port}

典型使用场景

  • 需要连续执行多个命令
  • 调试和开发环境
  • 需要查看命令返回值的场景

操作示例

$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping  # 测试连接
PONG
127.0.0.1:6379> set user:1001 "张三"  # 设置键值
OK
127.0.0.1:6379> get user:1001  # 获取值
"张三"
127.0.0.1:6379> info memory  # 查看内存信息

2. 命令行模式(适合脚本调用)

命令格式

redis-cli -h {host} -p {port} {command}

适用场景

  • Shell脚本中调用Redis命令
  • 需要直接获取命令结果的场景
  • 自动化任务执行

使用示例

$ redis-cli ping  # 测试连接
PONG
$ redis-cli set counter 100  # 设置值
OK
$ redis-cli incr counter  # 原子递增
(integer) 101
$ redis-cli --raw get counter  # 原始格式输出
101

4.2 连接参数简化技巧

默认连接配置

  • 当连接本地服务器(127.0.0.1)和默认端口(6379)时,可省略参数:
redis-cli  # 等同于 redis-cli -h 127.0.0.1 -p 6379

常用连接选项

参数说明示例
-a认证密码redis-cli -a password
-n选择数据库redis-cli -n 1
–raw原始格式输出redis-cli --raw get key
–stat实时监控redis-cli --stat

4.3 高级连接技巧

1. 批量命令执行

$ redis-cli <<EOF
SET user:1002 "李四"
EXPIRE user:1002 3600
GET user:1002
EOF

2. 管道操作(提升批量操作性能)

$ echo -e "SET key1 value1\nGET key1" | redis-cli --pipe

3. TLS安全连接(Redis 6.0+)

redis-cli --tls --cert ./redis.crt --key ./redis.key

4.4 连接问题排查

常见错误处理

  1. 连接拒绝:

    $ redis-cli
    Could not connect to Redis at 127.0.0.1:6379: Connection refused
    

    解决方案

    • 确认Redis服务已启动:ps aux | grep redis
    • 检查防火墙设置
  2. 认证失败:

    (error) NOAUTH Authentication required
    

    解决方案

    redis-cli -a yourpassword
    
  3. 连接超时:
    解决方案

    redis-cli -h remote_host --timeout 5
    

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

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

相关文章

AI大模型在测试领域应用案例拆解:AI赋能的软件测试效能跃迁的四大核心引擎(顺丰科技)

导语 5月份QECon深圳大会已经结束&#xff0c;继续更新一下案例拆解&#xff0c;本期是来自顺丰科技。 文末附完整版材料获取方式。 首先来看一下这个案例的核心内容&#xff0c;涵盖了测四用例设计、CI/CD辅助、测试执行、监控预警四大方面&#xff0c;也是算大家比较熟悉的…

【HTML】HTML 与 CSS 基础教程

作为 Java 工程师&#xff0c;掌握 HTML 和 CSS 也是需要的&#xff0c;它能让你高效与前端团队协作、调试页面元素&#xff0c;甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML&#xff0c;网页骨架搭建 核心概念&#xff1a;HTML通过标签定义内…

Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot

Redis 集群报错 CROSSSLOT Keys in request dont hash to the same slot 的原因及解决方案 1. 错误原因 在 Redis 集群模式下&#xff0c;数据根据 哈希槽&#xff08;Slot&#xff09; 分散存储在不同的节点上&#xff08;默认 16384 个槽&#xff09;。当执行涉及多个 key …

.Net Framework 4/C# LINQ*

一、什么是 LINQ LINQ 是一种在 C# 等编程语言中集成的查询功能&#xff0c;它允许开发者使用编程语言本身的语法进行数据查询&#xff0c;而不是嵌入式的字符串 SQL 语句。LINQ 查询可以应用于对象、XML 和数据库等多种数据源。 二、LINQ 查询的基本构成 LINQ 查询通常包含以…

【docker】容器技术如何改变软件开发与部署格局

在当今数字化时代&#xff0c;软件开发与部署的效率和灵活性至关重要。就像古人云&#xff1a;“工欲善其事&#xff0c;必先利其器。”Docker 作为一款强大的容器技术&#xff0c;正如同软件开发领域的一把利器&#xff0c;极大地改变了应用的开发、交付和运行方式。本文将深入…

MySQL的优化部分介绍

1、定期维护表&#xff1a; ANALYZE TABLE t_order_package; OPTIMIZE TABLE t_order_package; -- 每月在低峰期执行 2、数据归档&#xff08;如果create_time较旧&#xff09;&#xff1a; -- 归档旧数据到历史表 INSERT INTO t_order_package_archive SELECT * FROM t_or…

Go基本语法——go语言中的四种变量定义方法

前言 在go语言中&#xff0c;定义一个变量有四种方式&#xff0c;本文单从语法的层面来介绍这几种方式 单变量定义方法 1.var 变量名 类型&#xff0c;不进行初始化 例如&#xff0c;定义一个变量a后为其赋值&#xff0c;并且打印其值&#xff0c;运行结果如下 //1.不进行…

C++ 对 C 的兼容性

C 对 C 语言的兼容性是有限且有条件的&#xff0c;并非完全无缝兼容。这种兼容性主要体现在语法、标准库和运行时特性上&#xff0c;但存在一些关键差异和不兼容点。以下是详细分析&#xff1a; 一、C 对 C 的兼容性表现 1. 语法兼容&#xff1a;大部分 C 代码可直接编译 基…

ES6 核心语法手册

ES6 核心语法手册 一、变量声明 关键字作用域是否可重定义是否可修改特性let块级作用域❌✅替代 var 的首选const块级作用域❌❌声明常量&#xff08;对象属性可修改&#xff09; // 示例 let name "Alice"; name "Bob"; // ✅const PI 3.14; // PI …

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…

gRPC协议

目录 1. gRPC协议介绍及构成 协议分层 协议关键字段 2. 示例&#xff1a;Greeter 服务 步骤1&#xff1a;定义 .proto 文件 步骤2&#xff1a;生成代码 3. Java代码示例 依赖配置&#xff08;Maven pom.xml&#xff09; 服务端实现 客户端实现 运行流程 关键机制 …

深度学习 w b

在深度学习中&#xff0c;权重 w 和 偏置 b 是神经网络的核心参数&#xff0c;它们的形态&#xff08;shape&#xff09;取决于网络结构和数据维度。以下是关于 w 和 b 的详细解析&#xff1a; 1. 数学表示与物理意义 权重 w&#xff1a; 连接神经元之间的强度&#xff0c;决定…

el-table 树形数据,子行数据可以异步加载

1、 <el-tableborder:header-cell-style"tableStyle?.headerCellStyle"ref"tableRef":data"tableData"row-key"id":default-expand-all"false" // 默认不展开所有树形节点:tree-props"{ children: children, hasC…

Vue中渲染函数的使用

Vue中渲染函数的使用 1. render函数2. h()的使用3. render函数和h函数的区分 vue中的渲染函数&#xff1a; 1.template2.render函数3.jsx -> js extension(jsx也是编译成render函数&#xff0c;可编程能力更强) 1. render函数 1.1. 认识h函数 1.1.1. Vue推荐在绝大多数情况…

【氮化镓】GaN HMETs器件物理失效分析进展

2021 年 5 月,南京大学的蔡晓龙等人在《Journal of Semiconductors》期刊发表了题为《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多种物理表征技术及大量研究成果,对 GaN HEMTs 的常见失效机制进行了系统分析。文中先介绍失效分析流程,包括使…

每日Prompt:治愈动漫插画

提示词 现代都市治愈动漫插画风格&#xff0c;现代女子&#xff0c;漂亮&#xff0c;长直发&#xff0c;20岁&#xff0c;豆沙唇&#xff0c;白皙&#xff0c;气质&#xff0c;清纯现代都市背景下&#xff0c;夕阳西下&#xff0c;一位穿着白色露脐短袖&#xff0c;粉色工装裤…

2025年牛客网秋招/社招高质量 Java 面试八股文整理

Java 面试 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。关键在于理解企业的需求&#xff0c;明确自己的定位&#xff0c;以及掌握一定的应试技巧。 笔试部分&#xff0c;通常是对基础知识、…

在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新

​原因​&#xff1a;未重新编译UI文件​​ Qt的UI文件&#xff08;.ui&#xff09;需要通过​​uic工具&#xff08;Qt的UI编译器&#xff09;​​生成对应的ui_*.h头文件。如果你在Qt Designer中修改了对象名&#xff0c;但没有​​重新构建&#xff08;Rebuild&#xff09;…

前端获取接口数据流程

一、Free-Table组件分析 <free-table v-show"showTable" v-model:page"params.pageNum" 双向绑定当前页大小&#xff0c;支持动态更新 v-model:limit"params.pageSize" 双向绑定每页大小&#xff0c;支持动态更新 v-loading&…

Linux系统防火墙之iptables

防火墙在一个系统中就好像是一个国家的军队&#xff0c;所谓国无军不安&#xff0c;在系统中也是这样&#xff0c;防火墙可以保护系统被别人攻击&#xff0c;过滤垃圾流量等&#xff0c;那么今天我们就来了解一下Linux系统中的一种防火墙iptables。 目录 iptables概述 规则 …