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

redis基础----通用命令

1.redis特性

Redis 作为一款高性能的内存数据库

1.高性能

内存存储为主:数据主要存于内存,规避磁盘 I/O 延迟,读写速度极快,单机可轻松支撑每秒数十万次操作。
• 高效 I/O 处理:采用 I/O 多路复用模型(如 epoll、kqueue 等),能同时高效处理大量客户端连接,在高并发场景下表现稳定。
• 单线程核心:核心操作由单线程执行,避免多线程切换的开销和锁竞争问题,同时保证了操作的原子性(无需担心并发修改导致的数据不一致)。

2.支持多种数据结构

  • 持久化机制
    • RDB(快照):在指定时间间隔生成内存数据的二进制快照,适合备份和灾难恢复(恢复速度快,但可能丢失最近数据)。
    • AOF(Append Only File):记录所有写操作到日志文件,重启时重新执行日志恢复数据(数据安全性更高,可配置每秒或每次操作同步)。
    • 支持 RDB+AOF 混合持久化,兼顾两者优势。
  • 过期键管理:通过惰性删除(访问时检查过期)+定期删除(周期性扫描部分过期键)结合,高效释放过期内存。
  • 内存淘汰策略:当内存达到上限(maxmemory),自动按策略淘汰数据,如 LRU(最近最少使用)、LFU(最不经常使用)、随机淘汰等,保障服务持续运行。
  • 主从复制(Master-Slave):从节点异步复制主节点数据,实现读写分离(主节点写,从节点读),提升读吞吐量,同时从节点可作为主节点的备份。
  • 哨兵(Sentinel):监控主从集群状态,当主节点故障时自动执行故障转移(将从节点升级为主节点),保证服务高可用,支持多哨兵部署以避免单点问题。
  • 集群(Cluster)
    • 数据分片存储:将数据按哈希槽(16384 个)分配到多个节点,实现水平扩展(突破单机内存和性能限制)。
    • 自动故障转移:节点故障时,集群自动检测并调整分片分布,保证服务可用性。
    • 跨节点操作支持:通过 HASHSLOT 机制实现多键操作(需指定相同哈希槽)。

2.通用命令

2.1连接redis本地服务器

无密码:

redis-cli

有密码:

# 语法:redis-cli -h 主机地址 -p 端口 -a 密码
redis-cli -h 192.168.1.100 -p 6380 -a your_password

redis的配置文件

2.2测试客户端和服务器是否连接正常

使用 redis-cli连接redis服务器后,使用ping命令,出现PONG则连接正常

2.2 get和set

get:

  • 键存在时返回对应的值(字符串形式)
  • 键不存在时返回 (nil)
  • 键存在但不是字符串类型时,返回错误(WRONGTYPE Operation against a key holding the wrong kind of value

set:

为指定键(key)设置对应的值(value),如果键已存在则覆盖原有值。

2.3keys

KEYS 是 Redis 中用于查找符合指定模式(pattern)的所有键的命令,在日常开发和调试中经常用于快速定位键,但在生产环境需谨慎使用。

1. 基本语法

redis

KEYS pattern
  • pattern:匹配模式,支持通配符,常用规则:
    • *:匹配任意多个字符(包括 0 个),例如 user:* 匹配所有以 user: 开头的键
    • ?:匹配单个字符,例如 id:? 匹配 id:1id:a 等(但不匹配 id:12
    • [abc]:匹配 abc 中的任意一个字符,例如 name:[xy] 匹配 name:xname:y
    • [^abc]:匹配除 abc 之外的任意字符
    • [a-z]:匹配 a 到 z 之间的任意字符(范围匹配)

2. 返回值

  • 一个列表,包含所有符合模式的键名(字符串形式)
  • 若没有匹配的键,返回空列表 (empty list or set)

注意:keys*谨慎使用,KEYS 命令会遍历 Redis 中的所有键,在数据量大(如百万级以上)的情况下,会阻塞服务器进程,导致其他请求超时。生产环境严禁使用,尤其是高峰期。

2.4exists

exists 是 Redis 中用于检查一个或多个键(key)是否存在的命令,在日常开发中常用于判断数据是否存在,避免对不存在的键进行无效操作。

2. 返回值

  • 整数类型,表示存在的键的数量
    • 0:所有指定的键都不存在;
    • 1:只有一个键存在;
    • N(N>1):指定的多个键中有 N 个存在。

高效性:exists 命令是 O (1) 时间复杂度,无论数据量多大,检查速度都很快。
• 原子性:同时检查多个键时,命令是原子执行的,不会受到其他操作的干扰。
• 常见场景:
◦ 判断键是否存在,避免对不存在的键执行 get 等无效操作;
◦ 批量验证多个键的存在性(如检查一批用户 ID 是否在缓存中);
◦ 结合其他命令实现业务逻辑(如先判断键存在再删除,if (exists key) then del key)。

2.5del

DEL 是 Redis 中用于删除一个或多个键(key)及其对应值的命令,是数据管理中常用的删除操作命令。

返回值:

  • 整数类型,表示成功删除的键的数量
    • 0:所有指定的键都不存在(未删除任何键);
    • N(N>0):成功删除了 N 个存在的键。

  • 高效性DEL 命令的时间复杂度为 O (N),其中 N 是被删除的键的数量(单个键删除时为 O (1)),执行速度快。
  • 原子性:删除多个键时,命令原子执行,要么全部删除成功,要么因错误(如中途断连)导致部分未删除,不会出现 “半删除” 状态。
  • 彻底性:删除键后,键及其对应的值(无论值的类型是字符串、哈希、列表等)会被完全从内存中移除,释放占用的空间。
  • 常见场景
    • 主动清理过期或无用的数据(如缓存失效时删除旧数据);
    • 批量删除特定前缀的键(结合 KEYS 或 SCAN 查找后删除,如 DEL $(redis-cli KEYS "user:tmp:*"));
    • 业务逻辑中需要删除数据(如用户注销时删除其相关缓存)。

5. 注意事项

  • 删除大键的风险:如果删除的键对应的值非常大(如包含百万级元素的列表或集合),DEL 命令可能会阻塞 Redis 服务器一段时间(因为需要释放大量内存),影响其他请求。此时建议:
    • 用 UNLINK 命令替代(非阻塞删除,Redis 会在后台异步删除大键,不阻塞主线程);
    • 避免在高峰期删除超大键。
  • 集群环境:如果删除的键分布在 Redis 集群的不同节点,DEL 会在所有相关节点执行删除操作,并返回总删除数量。
  • 不可恢复DEL 命令删除的键无法通过 Redis 自身机制恢复,需谨慎操作(重要数据建议先备份)。

2.6expire

EXPIRE 是 Redis 中用于为键(key)设置过期时间的命令,过期后键会被自动删除,常用于管理临时数据(如验证码、会话信息等),避免手动清理过期数据的麻烦。

EXPIRE key seconds#key:要设置过期时间的键名;
#seconds:过期时间(单位:秒),必须是正整数。

  • 自动清理:键过期后会被 Redis 自动删除,无需手动干预,节省内存。
  • 覆盖性:如果对已设置过期时间的键再次执行 EXPIRE,会覆盖原有的过期时间(更新为新的秒数)。
  • 修改键值会重置过期时间:如果用 SET 等命令修改了键的值,过期时间会被清除(键变为持久化)。

pexpire:

PEXPIRE key milliseconds:与 EXPIRE 功能相同,但过期时间单位为毫秒(更精确)。

PERSIST key:移除键的过期时间(将临时键转为持久化键)。

2.7ttl

TTL 是 Redis 中用于查询键(key)剩余过期时间的命令,全称为 "Time To Live",常与 EXPIRE 等设置过期时间的命令配合使用,用于了解键的存活状态。

TTL key

返回值:

  • 整数类型,有三种可能的结果:
    • 正数:键存在且有过期时间,返回剩余的秒数;
    • -1:键存在,但没有设置过期时间(持久化键);
    • -2:键不存在(或已过期被删除)。

2.8key的过期策略

当为键设置过期时间(如 EXPIRE 命令),Redis 会将键的过期时间单独存储在一个 “过期字典”(本质是哈希表)中,记录键与过期时间的映射,而非直接修改键的值。

核心过期策略:

1. 惰性删除(Lazy Expiration)
  • 原理:不主动删除过期键,而是在每次访问键时才检查是否过期。若过期则删除并返回 nil,否则正常返回值。
  • 优点:节省 CPU 资源,只在必要时才执行删除操作,不影响其他操作。
  • 缺点:可能浪费内存。如果过期键长期未被访问,会一直占用内存(如 “僵尸键”)。
2. 定期删除(Periodic Expiration)
  • 原理:Redis 每隔一段时间(默认 100 毫秒,可配置)主动扫描部分过期键并删除。具体流程:
    1. 从过期字典中随机抽取一定数量(默认 20 个)的键;
    2. 删除其中已过期的键;
    3. 如果过期键比例超过 25%,重复步骤 1(避免大量过期键堆积);
    4. 每次扫描不超过指定时间(默认 25 毫秒),防止阻塞服务器。
  • 优点:主动清理部分过期键,减少 “僵尸键”,平衡内存和 CPU 消耗。
  • 缺点:可能漏删部分过期键(因随机抽样),但概率较低。
3. 内存淘汰机制(Maxmemory Eviction)
  • 原理:当 Redis 内存使用达到 maxmemory 配置的上限时,触发内存淘汰策略,删除部分键(无论是否过期)释放空间。
  • 常见策略(通过 maxmemory-policy 配置):
    • allkeys-lru:删除所有键中最近最少使用的键;
    • volatile-lru:只删除设置了过期时间且最近最少使用的键;
    • allkeys-random:随机删除所有键中的键;
    • volatile-random:随机删除设置了过期时间的键;
    • volatile-ttl:删除设置了过期时间且剩余时间最短的键;
    • noeviction:不删除任何键,返回错误(默认策略)。
  • 适用场景:内存有限时,确保 Redis 不会因内存耗尽而崩溃。

2.9 type

TYPE 是 Redis 中用于查询指定键(key)所存储值的数据类型的命令,Redis 支持多种数据类型(如字符串、哈希、列表等),该命令可以帮助开发者了解键的类型,以便使用对应的操作命令。

注意:

  • TYPE 命令只返回最上层的数据类型,对于嵌套结构(如列表中包含字符串),仍返回外层类型(如 list)。
  • 若键已过期但未被删除(受过期策略影响),TYPE 仍会返回其类型(因为键在物理上仍存在),但 GET 等命令会返回 nil
http://www.dtcms.com/a/340105.html

相关文章:

  • 脑电分析——ICA原理、ICALabel成分与伪迹之间一对多的关系
  • 从合规到主动免疫:大模型内容风控的创新与实践
  • 【PyTorch】单对象分割项目
  • Seata笔记
  • Day22 顺序表与链表的实现及应用(含字典功能与操作对比)
  • 不同语言的并发模型对比:Go、Java与Python
  • Python脚本每天爬取微博热搜-终版
  • 重塑酒店投屏体验:私密投屏技术的革新应用
  • GStreamer无线图传:从树莓派到计算机的实现方案
  • 20250819 强连通分量,边双总结
  • 嵌入式-SPI的IO引脚初始化、模块初始化、数据的收发-Day16
  • Codeforces 盒装苹果
  • vLLM加载lora
  • CF266E More Queries to Array... Solution
  • GPFS不同存储方式的优劣
  • 2943. 最大化网格图中正方形空洞的面积
  • Manus AI 与多语言手写识别技术深度剖析
  • 不同的 Text2sql 方式优缺点探究
  • 智慧校园中IPTV融合对讲:构建高效沟通新生态
  • Unity常用工具及默认快捷键
  • PowerBI登录出错解决过程
  • YOLO多模态改进系列 | YOLOFuse:多模态融合的 Slim-Neck 改进
  • java面试——多线程
  • C++高频知识点(二十九)
  • HarmonyOS 中的 泛型类和泛型接口
  • 51单片机拼接板(开发板积木)
  • 爬小红书搜索详情软件:根据关键词采集笔记详情,包含正文内容、发布时间、转评赞藏等
  • C++开发基础之:队列用法与生产者消费者模型实战和可直接复用的线程安全的队列
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • 会话技术之<Cookie>和<Session>的区别联系