Redis 教程:从入门到入坑

目录

  • 1. Redis 安装与启动
    • 1.1. 安装 Redis
      • 1.1.1. 在Linux上安装
      • 1.1.2. 在Windows上安装
    • 1.2. 启动 Redis
      • 1.2.1. 在Linux上启动
      • 1.2.2. 在Windows上启动
    • 1.3. 连接Redis
      • 1.3.1. 连接本地Redis
      • 1.3.2. 连接远程Redis
        • 1.3.2.1. 服务器开放端口
        • 1.3.2.2. 关闭防火墙
        • 1.3.2.3. 修改配置文件
        • 1.3.2.4.重启Redis服务
  • 2. Redis数据结构详解
    • 2.1. 字符串(String)
    • 2.2. 列表(List)
    • 2.3. 集合(Set)
    • 2.4. 有序集合(Sorted Set)
    • 2.5. 哈希(Hash)
  • 3. Redis 高效管理数据有效期
    • 3.1. 设置数据有效期的方法
      • 3.1.1. EXPIRE 、 PEXPIRE 命令
      • 3.1.2. SET 命令的过期选项
      • 3.1.3. TTL & PTTL 命令
    • 3.2. 使用场景

Redis,全称为Remote Dictionary Server,是一种开源的、基于键值对的数据结构存储系统,以其高性能、低延迟和丰富的数据结构特性而广受欢迎。本教程旨在为初学者提供一个全面的Redis入门指南,涵盖安装、基本操作、数据类型以及实战应用,助读者快速上手并高效利用Redis提升应用性能。


Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

1. Redis 安装与启动

1.1. 安装 Redis

1.1.1. 在Linux上安装

对于Ubuntu/Debian系统,可以使用以下命令安装Redis:

sudo apt-get update
sudo apt-get install redis-server

而对于CentOS/RHEL系统,则使用:

sudo yum install redis

Redis 由四个可执行文件:

  • redis-server:Redis服务器的daemon启动程序
  • redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
  • redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
  • redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况

1.1.2. 在Windows上安装

官网: https://redis.io/download/
中文: http://www.redis.cn/
GitHub下载地址:https://github.com/MSOpenTech/redis/releases

Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis

image.png

1.2. 启动 Redis

1.2.1. 在Linux上启动

在大多数Linux发行版中,安装完成后Redis会自动启动。如果不行的话可以使用命令行,其中/etc/redis.conf是配置文件的地址。

redis-server /etc/redis.conf

你可以通过以下redis-cli命令来连接Redis:

[root@wujie ~]# redis-cli 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> 

1.2.2. 在Windows上启动

双击redis-server.exe即可运行,如下图所示,出现这个就好了哦。
image.png
可以通过redis-cli ping命令检查Redis是否正在运行:
image.png

1.3. 连接Redis

1.3.1. 连接本地Redis

一般都可以直接使用redis-cli命令来连接。

1.3.2. 连接远程Redis

这是一个真实的情况,在图文魔方小程序的开发中,我作为后端开发,把代码写好后丢给前端来写页面,但是前端没有安装redis服务,好吧,那我就直接用服务器上的redis好了,我先用自己的本地电脑去连接,结果是失败的。

1.3.2.1. 服务器开放端口

比如我使用的是阿里云的服务器,就要在安全组中开放6379端口。
image.png

1.3.2.2. 关闭防火墙

使用命令关闭防火墙

# 查看防火墙状态
sudo systemctl status firewalld
# 关闭防火墙
sudo systemctl disable firewalld
# 禁用防火墙(开机自动关闭)
sudo systemctl disable firewalld

1.3.2.3. 修改配置文件

配置文件名为redis.conf,这个文件就看你们的redis安装位置啦,这里我把bind注释掉了就好了。
image.png

  • bind 127.0.0.1, 只能在本地机器连接
  • bind 127.0.0.1 192.168.1.1, 可以通过 redis-cli -p 127.0.0.1 redis-cli -p 192.168.1.1 连接,多个IP用空格分隔就好。
  • bind 0.0.0.0 配置成 0.0.0.0 表示没有IP限制。和不填的效果一样。

以下是一些Redis的配置信息介绍

# 是否以守护进程启动 默认:no
daemonize no# 用于设置Redis绑定的网络接口(网卡)。如果不配置bind,默认情况下Redis监听所有可用的网卡,redis只接受来自绑定网络接口的请求。
# Redis的配置文件中一般默认有bind 127.0.0.1,只允许本地连接,如果想要被远程访问注释掉bind配置或者bind外网ip即可。
bind 127.0.0.1# 是否开启保护模式 默认:yes,是否有效会被bind和requirepass配置影响
## 当protected-mode为yes
### 注释bind和requirepass,redis的保护模式生效,只能通过本地连接
### 只注释bind,配置requirepass,redis的保护模式失效,可以通过密码远程连接
### 只注释requirepass,redis的保护模式失效,可以通过bind的ip无密码连接
## 当protected-mode为no
### 无论上面的哪种场景,客户端都可以根据 bind 及 requirepass 实际参数来连接到 redis
protected-mode yes# redis服务端口 默认:6379
port 6379# 客户端连接空闲时间单位秒,如果在指定时间内没有操作则会断开连接 默认:0(不超时)
timeout 0# tcp心跳检测时间单位秒,对访问客户端的一种心跳检测,每个n秒检测一次 默认:0(不检测),建议设置成60
tcp-keepalive 0# 客户端最大连接数,设置redis同时可以与多少个客户端进行连接 默认:10000
maxclients 10000# 日志级别配置 默认:notice
## debug:能设置的最高的日志级别,打印所有信息,包括debug信息。
## verbose:打印除了debug日志之外的所有日志。
## notice:打印除了debug和verbose级别的所有日志。
## warning:仅打印非常重要的信息。
loglevel notice# 日志文件输出路径配置
## 该路径默认为空。可以根据自己需要把日志文件输出到指定位置。
logfile ""# 数据库数量配置 默认:16
databases 16# 连接密码配置 默认无密码
requirepass 123456

1.3.2.4.重启Redis服务

然后使用命令来重启服务

# 重启Redis服务
sudo systemctl restart redis.service

一旦Redis服务器配置妥当,你就可以使用redis-cli命令来远程连接了。基本的命令格式如下:

redis-cli -h <host> -p <port> -a <password>
  • <host> 是Redis服务器的IP地址或域名。
  • <port> 是Redis服务器监听的端口,默认是6379。
  • <password> 是你的Redis服务器密码(如果设置了的话)。

image.png

2. Redis数据结构详解

Redis支持五种主要的数据类型:String(字符串)、List(列表)、Set(集合)、Hash(哈希)和Sorted Set(有序集合)。每种数据类型都有其独特的应用场景。

2.1. 字符串(String)

  • 特点:可以存储数字或文本,支持对其执行增加或减少操作。
  • 使用场景:计数器、用户会话信息、短文本存储等。
SET user:1 "wujie"		# 设置键值对
GET user:1 						# 获取键值,输出 "wujie"
INCR user:age					# 将键的值增加1,假设初始值为0
GET user:age					# 获取键值,输出 "1"

image.png

2.2. 列表(List)

  • 特点:双向链表实现,可以在列表两端进行插入或删除操作。
  • 使用场景:队列系统、微博的消息流、最近浏览记录等。
LPUSH mylist "apple"               # 左侧插入元素
RPUSH mylist "banana"              # 右侧插入元素
LRANGE mylist 0 -1                 # 获取列表所有元素,输出 ["apple", "banana"]

image.png

2.3. 集合(Set)

  • 特点:无序集合,每个元素独一无二,适合做去重处理或集合运算。
  • 使用场景:好友关系存储、标签分类、共同关注等。
SADD fruits "apple"                # 添加元素到集合
SADD fruits "orange"
SMEMBERS fruits                    # 获取集合所有元素,输出 ["apple", "orange"]

image.png

2.4. 有序集合(Sorted Set)

  • 特点:自动排序的集合,每个元素都与一个浮点数分数关联,用于排序。
  • 使用场景:排行榜、时间线索引、优先级队列等。
ZADD leaderboard 100 "player1"     # 添加元素到有序集合,并指定分数
ZADD leaderboard 50 "player2"
ZRANGE leaderboard 0 -1            # 获取有序集合的所有元素和分数,输出 ["player1", "player2"]

image.png

2.5. 哈希(Hash)

  • 特点:字段-值映射,适用于存储对象。
  • 使用场景:存储配置文件、用户信息、购物车等。
HMSET user:1 name "Tom" age 30      # 添加字段和值到哈希表
HGETALL user:1                     # 获取哈希表中的字段和值,输出 {"name": "Tom", "age": "30"}

image.png

3. Redis 高效管理数据有效期

在许多应用场景下,数据具有临时性,例如网页缓存、用户会话信息或限时消息。为这类数据设置有效期可以:

  • 节省资源:自动清理不再需要的数据,避免内存占用。
  • 保持数据新鲜度:确保获取的是最新的数据副本。
  • 提升安全性:限制敏感数据的生命周期。

3.1. 设置数据有效期的方法

3.1.1. EXPIRE 、 PEXPIRE 命令

  • **EXPIRE key seconds**:设置key在seconds秒后过期。
  • **PEXPIRE key milliseconds**:设置key在milliseconds毫秒后过期。
SET mykey "Hello"
EXPIRE mykey 10    # 设置mykey在10秒后过期

3.1.2. SET 命令的过期选项

在使用SET命令设置键值时,可以直接指定过期时间:

SET mykey "Hello" EX 10    # EX表示以秒为单位
SET mykey "Hello" PX 10000 # PX表示以毫秒为单位

3.1.3. TTL & PTTL 命令

  • **TTL key**:查询key的剩余生存时间,以秒为单位,如果已过期或不存在则返回-2或-1。
  • **PTTL key**:查询key的剩余生存时间,以毫秒为单位。
TTL mykey    # 返回mykey剩余的生存时间(秒)

3.2. 使用场景

设置数据有效时间在许多场景下非常有用,例如:

  • 缓存:在缓存服务器上存储的数据通常是暂时的,可以使用过期时间自动清除旧数据。
  • 会话管理:用户会话信息可以在用户登录后设置一个过期时间,以便在会话结束时自动清除。
  • 临时授权:如验证码等敏感信息,可以在验证后设置一个短时间的过期,确保它们不会长时间留在系统中。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

GESP CCF C++ 三级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级&#xff0c;那他可以选择的认证语言有&#xff08;&#xff09;种。 A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时&#xff0c;可以判定yr代表闰年&#xff0c;并输出 2月是29天 &#x…

【整体介绍】HTML和JS编写多用户VR应用程序的框架

一、Networked-Aframe是什么&#xff1f; 简称NAF&#xff0c;底层基于Mozilla的AFrame框架&#xff0c;用HTML和JS编写多用户VR应用程序的框架。 二、特性 支持 WebRTC 和/或 WebSocket 连接。 语音聊天。音频流让您的用户在应用程序内交谈&#xff08;仅限 WebRTC&#xff…

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中&#xff0c;权重m(x, y) is scaled by 64 以进行整数计算&#xff0c;R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…

Android安卓使用MQTT(JAVA)

一、app目录下添加 implementation org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0 1) 点击Sync Now更新依赖 2) AndroidManifest.xml文件添加网络权限 <uses-permission android:name"android.permission.INTERNET"/> 二、 使用 1) 创建MqttConn…

使用 ABBYY FineReader PDF 15 在创建或转换 PDF 时自动生成书签

使用 ABBYY 为 PDF 文件添加书签&#xff0c;可以帮助快速定位文档中的主要内容&#xff0c;也能更方便的梳理出一份文档大纲。 有很多 PDF 文件在创建时并没有编辑书签&#xff0c;这里介绍使用 ABBYY FineReader PDF 15&#xff08;Win 系统&#xff09;在 PDF 中自动添加书…

postMessageXss续2

原文地址如下:https://research.securitum.com/art-of-bug-bounty-a-way-from-js-file-analysis-to-xss/ 在19年我写了一篇文章&#xff0c;是基于postMessageXss漏洞的入门教学:https://www.cnblogs.com/piaomiaohongchen/p/14727871.html 这几天浏览mXss技术的时候&#xff…

第三周周三总结

1.给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&#xff1a; 输…

RuoYi-后端管理项目入门篇1

目录 前提准备 下载若依前后端 Gitee 地址 准备环境 后端数据库导入 1 克隆完成 若依后端管理后端 Gitte 地址 :若依/RuoYi-Vue 2.1 创建Data Source数据源 2.2 填写好对应的数据库User 和 Password 点击Apply 2.3 新建一个Schema 2.4 填写对应数据库名称 这边演示写的…

【I²C协议】STC89C51单片机IIC通信(代码+原理)

STC89C51单片机IIC通信 什么是IC协议特点构成 通信协议开始信号、结束信号、应答信号数据传输 代码示例 什么是IC协议 IIC,即IC&#xff0c;全称 Inter-Integrated Circuit&#xff0c;字面上的意思是集成电路之间&#xff0c;它其实是IC Bus简称&#xff0c;所以中文应该叫 集…

【Codeforces】Round 957 (Div. 3)_B. Angry Monk

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法刷题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录 题目题解try1代码正确题解贪心策略的解释为什么不是直接合并 总结 题目 题目链接 题解 try1代码 我的思路&#xff1a;单纯模拟 循环&a…

【字幕】字幕特效入门

前言 最近两周调研了一下字幕特效的底层程序逻辑&#xff0c;因为工作内容的原因&#xff0c;就分享几个自己找的链接具体细节就不分享了&#xff0c;CSDN也是我的个人笔记&#xff0c;只记录一些简单的内容用于后续自己方便查询&#xff0c;顺便帮助一下正在苦苦查阅资料入门…

基于STC89C51单片机的烟雾报警器设计(煤气火灾检测报警)(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于STC89C51单片机的烟雾报警器设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘要 原理图 实物图 仿真图 元件清单 代码 系统论文 资源下载 摘要 随着现代家庭用火、…

【高中数学/指数函数、幂函数】寻找曲线y=2^x与y=x^2的三个交汇点

【问题】 找到曲线y2^x与yx^2的三个交汇点。 【难点】 指数和二次函数摆在一起没法求解。 【解答】 y2^x与yx^2的交汇点&#xff0c;即曲线y2^x-x^2的零点&#xff0c;用Canvas作图就能清晰看到三个零点的存在&#xff0c;如图。 【图一】 其中&#xff0c;2&#xff0c;…

自制连点器

B站使用教程&#xff1a;https://www.bilibili.com/video/BV1SR85e4EKw/?vd_source47eba1800d831e86d4778a128740fe73 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Spv_yVPFB3zoS__VL-nhaQ?pwdyxo1 提取码&#xff1a;yxo1

排序算法(4)之快速排序(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序算法(4)之快速排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

langchain循序渐进之langchain 安装及使用

pip安装langchain pip install langchain安装langsmith(可选) langsmith官方提示是用来观察大模型复杂调用情况&#xff0c;可选项。 [LangSmith]点击注册然后把秘钥填进去就行&#xff0c;这里我略过了 export LANGCHAIN_TRACING_V2"true" export LANGCHAIN_A…

【C++】模版初阶以及STL的简介

个人主页~ 模版及STL 一、模版初阶1、泛型编程2、函数模版&#xff08;1&#xff09;概念&#xff08;2&#xff09;函数模版格式&#xff08;3&#xff09;函数模版的原理&#xff08;4&#xff09;函数模版的实例化①显式实例化②隐式实例化 &#xff08;5&#xff09;模版参…

精益六西格玛项目赋能,石油机械龙头企业质量效率双提升!

​国内某石油机械制造龙头&#xff0c;迎接挑战&#xff0c;迈向卓越&#xff0c;携手张驰咨询&#xff0c;启动精益六西格玛项目&#xff0c;开启管理革新新篇章。 在国家政策调整和市场竞争日益激烈的背景下&#xff0c;作为国内石油机械产品制造领域的龙头企业&#xff0c;…

算法 —— LRU算法

算法 —— LRU算法 LRULRU算法的工作原理&#xff1a;实现方法&#xff1a;性能考虑&#xff1a; 模拟过程splice函数对于std::list和std::forward_list基本语法&#xff1a;功能描述&#xff1a; 示例&#xff1a;注意事项&#xff1a; 如果大家已经学习过了Cache的替换算法和…

Linux——Shell脚本和Nginx反向代理服务器

1. Linux中的shell脚本【了解】 1.1 什么是shell Shell是一个用C语言编写的程序&#xff0c;它是用户使用Linux的桥梁 Shell 既是一种命令语言&#xff0c;有是一种程序设计语言 Shell是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问…