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。
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
即可运行,如下图所示,出现这个就好了哦。
可以通过redis-cli ping
命令检查Redis是否正在运行:
1.3. 连接Redis
1.3.1. 连接本地Redis
一般都可以直接使用redis-cli
命令来连接。
1.3.2. 连接远程Redis
这是一个真实的情况,在图文魔方小程序的开发中,我作为后端开发,把代码写好后丢给前端来写页面,但是前端没有安装redis服务,好吧,那我就直接用服务器上的redis好了,我先用自己的本地电脑去连接,结果是失败的。
1.3.2.1. 服务器开放端口
比如我使用的是阿里云的服务器,就要在安全组中开放6379端口。
1.3.2.2. 关闭防火墙
使用命令关闭防火墙
# 查看防火墙状态
sudo systemctl status firewalld
# 关闭防火墙
sudo systemctl disable firewalld
# 禁用防火墙(开机自动关闭)
sudo systemctl disable firewalld
1.3.2.3. 修改配置文件
配置文件名为redis.conf
,这个文件就看你们的redis安装位置啦,这里我把bind注释掉了就好了。
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服务器密码(如果设置了的话)。
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"
2.2. 列表(List)
- 特点:双向链表实现,可以在列表两端进行插入或删除操作。
- 使用场景:队列系统、微博的消息流、最近浏览记录等。
LPUSH mylist "apple" # 左侧插入元素
RPUSH mylist "banana" # 右侧插入元素
LRANGE mylist 0 -1 # 获取列表所有元素,输出 ["apple", "banana"]
2.3. 集合(Set)
- 特点:无序集合,每个元素独一无二,适合做去重处理或集合运算。
- 使用场景:好友关系存储、标签分类、共同关注等。
SADD fruits "apple" # 添加元素到集合
SADD fruits "orange"
SMEMBERS fruits # 获取集合所有元素,输出 ["apple", "orange"]
2.4. 有序集合(Sorted Set)
- 特点:自动排序的集合,每个元素都与一个浮点数分数关联,用于排序。
- 使用场景:排行榜、时间线索引、优先级队列等。
ZADD leaderboard 100 "player1" # 添加元素到有序集合,并指定分数
ZADD leaderboard 50 "player2"
ZRANGE leaderboard 0 -1 # 获取有序集合的所有元素和分数,输出 ["player1", "player2"]
2.5. 哈希(Hash)
- 特点:字段-值映射,适用于存储对象。
- 使用场景:存储配置文件、用户信息、购物车等。
HMSET user:1 name "Tom" age 30 # 添加字段和值到哈希表
HGETALL user:1 # 获取哈希表中的字段和值,输出 {"name": "Tom", "age": "30"}
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. 使用场景
设置数据有效时间在许多场景下非常有用,例如:
- 缓存:在缓存服务器上存储的数据通常是暂时的,可以使用过期时间自动清除旧数据。
- 会话管理:用户会话信息可以在用户登录后设置一个过期时间,以便在会话结束时自动清除。
- 临时授权:如验证码等敏感信息,可以在验证后设置一个短时间的过期,确保它们不会长时间留在系统中。
相关文章:

Redis 教程:从入门到入坑
目录 1. Redis 安装与启动1.1. 安装 Redis1.1.1. 在Linux上安装1.1.2. 在Windows上安装 1.2. 启动 Redis1.2.1. 在Linux上启动1.2.2. 在Windows上启动 1.3. 连接Redis1.3.1. 连接本地Redis1.3.2. 连接远程Redis1.3.2.1. 服务器开放端口1.3.2.2. 关闭防火墙1.3.2.3. 修改配置文件…...

计算机图形学入门31:动画与模拟的求解
1.前言 上一篇介绍了动画与模拟的很多方法、模拟各种运动、基本知识。定义一个物体的速度和加速度,算出物体在任何时刻的位置,但是没有介绍具体怎么实现。这篇文章就是从上一篇的概念出发,介绍怎么把一个物体或多个物体运动的位置、不同时间出…...
Jmeter-单用户单表查询千条以上数据,前端页面分页怎么做
这里写自定义目录标题 单用户单表查询千条以上数据 单用户单表查询千条以上数据 对于单用户查询千条以上数据,但是前端页面做了分页的情况下 可以直接把查询接口下的分页限制去掉,便可查询出当前页面查询条件下的全部数据 例如去掉如下内容࿱…...

夏日养猫攻略!你家猫咪缺水了吗?补水罐头秘籍大公开
炎炎夏日,高温来袭,这几天又有几只猫咪因为中暑被送到我们医院了,经过诊断,发现猫咪体温超过40C,而且严重缺水。 各位铲屎官真的得注意,酷暑炎热,给猫咪补水很重要。猫咪的汗腺数量远远不及人类…...

生成名片格式
/*** 生成名片* param array arr2 卡片素材* param array strs 素材文字 数组* param function successFn 回调函数* * */PosterCanvasCard: function(arr2, strs, successFn, errFun) {let that this;const ctx uni.createCanvasContext(myCanvas);ctx.clearRect(0, 0, 0, 0…...
Linux常用命令(简要总结)
Linux常用命令 Linux 是一个强大的操作系统,广泛应用于服务器、开发和嵌入式系统中。掌握一些常用的 Linux 命令对于高效地使用系统至关重要。以下是一些常用的 Linux 命令及其简要说明: 文件和目录操作 ls:列出目录内容 ls ls -l # …...

从挑战到实战!TDengine 新能源行业研讨会要点回顾
近年来,随着全球对可再生能源需求的不断增长,新能源行业迎来了前所未有的发展机遇。然而,伴随着行业的快速发展,海量数据的管理和高效利用成为了行业面临的重要挑战。如何通过先进的数据管理技术提升新能源系统的效率和可靠性&…...
Linux 之 设置环境变量
设置环境变量 启动帐号后自动执行的是 文件为 .bashrc,然后通过这个文件可设置自己的环境变量; 临时设置环境变量: 在终端中使用 export 命令可以临时设置环境变量,例如:export PATH$PATH:/your/custom/path这种方法设…...

postgresql删除用户
背景 **角色与用户**:在 PostgreSQL 中,用户和组的概念是通过“角色”来统一实现的。角色可以有登录权限(在这种情况下,它们通常被称为“用户”),也可以没有(在这种情况下,它们通常用…...
【java深入学习第5章】Spring Boot 统一功能的实现及处理方式
Spring Boot 统一功能处理 在开发 Web 应用程序时,为了提高代码的可维护性和可扩展性,我们通常会采用一些统一的功能处理方式。本文将介绍如何在 Spring Boot 中实现统一的数据返回格式、异常处理和功能处理,并通过一个图书管理系统的案例来…...

【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)
目录: 目录: 一、什么是单项散列函数? 1.1 如何验证文件是否被修改过 1.2 单项散列函数: 二、单向hash抗碰撞 2.1 弱抗碰撞(Weak Collision Resistance) 2.2 强抗碰撞(Strong Collision Resista…...
获取不重复流水号(java)
一:概述 很多业务场景都需要获取不重复的业务流水号,当微服务项目或服务多节点部署时,获取流水号场景使用分布式锁性能低下,可以基于数据库行锁实现获取不重复流水号。 二:创建流水号数据库 CREATE TABLE serial (i…...

【python虚拟环境管理】【mac m3】 使用pipx安装poetry
文章目录 一. 安装 pipx二. 安装Poetry1. 安装2. advanced 操作 官网文档:https://python-poetry.org/docs/ pipx介绍文档:https://blog.51cto.com/u_15064632/2570626 一. 安装 pipx pipx 用于全局安装 Python 命令行应用程序,同时在虚拟环…...

git使用以及理解
git练习网站 Learn Git Branching git操作大全Oh Shit, Git!?! git commit git branch name git merge bugFix 合并俩个分支 git rebase main git checkout headgit switch head 会导致HEAD分离 ,就是指head->HEAD->c1 相对引用 ------------------- …...

openlayers 3d 地图 非三维 立体地图 行政区划裁剪 地图背景
这是实践效果 如果没有任何基础 就看这个专栏:http://t.csdnimg.cn/qB4w0 这个专栏里有从最简单的地图到复杂地图的示例 最终效果: 线上示例代码: 想要做这个效果 如果你的行政区划编辑点较多 可能会有卡顿感 如果出现卡顿感需要将边界点相应…...

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南
0. 综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频: https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解: https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…...

我想我大抵是疯了,我喜欢上了写单元测试
前言 大家好我是聪。相信有不少的小伙伴喜欢写代码,但是对于单元测试这些反而觉得多此一举,想着我都在接口文档测过了!还要写什么单元测试!写不了一点!! 由于本人也是一个小小程序猿🙉…...

【Visual Studio】Visual Studio使用技巧及报错解决合集
目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法,包括Visual Studio报错问题及解决方法、Visua…...

服务器数据恢复—raid5阵列热备盘同步失败导致lun不可用的数据恢复案例
服务器存储数据恢复环境: 华为S5300存储中有一组由16块FC硬盘组建的RAID5磁盘阵列(包含一块热备盘)。 服务器存储故障: 该存储中的RAID5阵列1块硬盘由于未知原因离线,热备盘上线并开始同步数据,数据同步到…...

算法题目整合
文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b,她仅可以执行一次以下翻转操作:选择a数组中的一个区间[i, j]&…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...