redis 有哪些功能?

Redis最常用的数据结构包括字符串、哈希、列表、集合和有序集合。字符串适合缓存和计数器;哈希用于存储对象,如用户信息;列表基于双向链表,适用于消息队列;集合支持去重和交并差运算,适用于关系分析;有序集合通过分数排序,广泛用于排行榜和范围查询。这些结构结合Redis的高性能内存操作,使其在缓存、会话管理、实时统计等场景中表现卓越。

redis 有哪些功能?

Redis不仅仅是一个简单的键值存储,它是一个多功能的数据结构服务器,能处理各种复杂的数据类型,提供闪电般的读写速度,并支持数据持久化、发布订阅、事务等高级特性,是许多现代应用不可或缺的组件。

说起Redis,我脑子里首先浮现的,可不是那种平铺直叙的数据库定义。它更像是个瑞士军刀,每种工具都有其独特的用武之地,而且用起来都快得离谱。它的核心能力,在于提供了多种内存中的数据结构,这才是它真正让人着迷的地方。

最基础的当然是字符串(Strings),这几乎是所有键值存储的标配,你可以存文本、数字,甚至二进制数据。但Redis的强大之处在于,它不仅仅是存取,还能对字符串进行原子性的增减操作,这在做计数器或者限流的时候,简直是神来之笔。

接着是哈希(Hashes),这玩意儿特别适合存储对象。想象一下,一个用户对象有姓名、年龄、邮箱等多个字段,你不用为每个字段都建一个独立的键,而是把它们都塞进一个哈希里,取出来也方便,一条命令就搞定。我个人在项目里,用得最多的就是Hash和Sorted Set。Hash用来存用户资料简直是天作之合,一条命令就能取全,比关系型数据库快太多了。

列表(Lists)则是一个双向链表,可以从两端快速添加或删除元素。这在构建消息队列或者实现最新N条数据的功能时,简直是完美契合。比如,一个用户动态流,新的动态总是加在前面,旧的就从后面弹出,Redis处理起来毫不费力。

集合(Sets)是无序的、不重复的字符串集合。它最棒的功能在于能够进行集合间的操作,比如交集、并集、差集。想知道两个用户共同关注了哪些人?或者找出哪些用户是VIP但又不是活跃用户?Set分分钟给你答案。

有序集合(Sorted Sets),这可是做排行榜的利器,简直是把复杂逻辑简化到了极致。每个成员都会关联一个分数,Redis会根据分数自动排序。你想要按点赞数排序的帖子列表,或者游戏里的玩家积分榜,用它来做,效率和便捷性都无可挑剔。

除了这些核心数据结构,Redis还提供了位图(Bitmaps)HyperLogLog,它们在处理海量数据统计时展现出惊人的效率,比如统计独立访客数量,用HyperLogLog能在极小的内存占用下给出近似值,这在大数据场景下非常实用。

当然,Redis的功能远不止数据存储。它支持发布/订阅(Pub/Sub)模式,可以轻松构建实时消息系统;事务(Transactions)可以保证一组命令原子性执行;Lua脚本则允许你在服务端执行复杂的逻辑,减少网络往返开销,同时保证操作的原子性。

有时候我会想,Redis是不是被低估了?它能做的远不止我们日常听到的那些。比如,你有没有想过用它来构建一个实时投票系统,或者一个限流器?这些都是它能轻松胜任的。

Redis在实际应用中,最常用的数据结构有哪些?

在我多年的开发经验里,Redis的魅力很大程度上就体现在它那些设计精巧、性能卓越的数据结构上。要说最常用的,那必然是字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)。它们各自都有独特的应用场景,而且在Redis的加持下,性能表现都非常出色。

有道小P 有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

有道小P 64 查看详情 有道小P

字符串(Strings):这是最基础也最万能的数据类型。它不仅仅是存储文本或数字那么简单。比如,你可以用它来做简单的缓存,直接

GET

SET

键值对。更高级一点的用法是原子计数器,通过

INCR

DECR

命令,在分布式环境下实现高并发的计数,比如秒杀系统中的商品库存,或者网站的访问量统计。这种原子性操作在多线程或多进程环境中避免了竞态条件,非常可靠。

哈希(Hashes):我个人认为,哈希是Redis在存储复杂对象时最优雅的解决方案。它就像是一个对象,里面可以包含多个字段(field)和对应的值(value)。举个例子,存储用户信息,一个用户ID作为键,用户的姓名、年龄、邮箱等信息作为哈希的字段,你可以一次性获取所有字段(

HGETALL

),也可以只更新某个特定字段(

HSET

)。这比把每个字段都存成单独的字符串键要高效得多,也更符合数据模型的直觉。在存储商品信息、配置数据等方面,哈希也是首选。

列表(Lists):它本质上是一个双向链表,这决定了它在两端操作(

LPUSH

/

RPUSH

LPOP

/

RPOP

)的效率极高。这使得列表成为构建消息队列(比如一个简单的生产者-消费者模型)、实现最新N条数据(如微博时间线、文章评论列表)的理想选择。你甚至可以用

BLPOP

/

BRPOP

实现阻塞式的消息消费,这在构建实时系统时非常有用。

集合(Sets):集合的特点是无序且元素唯一。它在处理“去重”和“关系”问题时表现出色。比如,统计网站的独立访客ID,每次访问都将用户ID添加到集合中,集合会自动去重。更强大的功能在于集合间的操作:

SINTER

(交集)可以找出共同关注的用户,

SUNION

(并集)可以获取所有标签,

SDIFF

(差集)可以找出某个用户未关注的人。这些操作在社交网络、推荐系统、用户权限管理等场景下极为便利。

有序集合(Sorted Sets):这个数据类型是集合和哈希的结合体,每个成员都有一个唯一标识符(member)和一个浮点数分数(score)。Redis会根据分数对成员进行排序。这使得它成为实现排行榜(游戏积分榜、热门文章榜)、延迟队列(根据时间戳排序)的完美选择。你可以轻松地获取某个分数范围内的成员,或者获取排名在前N位的成员。在需要排序和去重的场景下,它几乎是无出其右的。

选择哪种数据结构,往往取决于你的业务场景和数据访问模式。理解它们的底层原理和特性,能帮助你做出更明智的技术决策。

Redis的持久化机制是如何保障数据安全的?

说实话,刚接触Redis的时候,我总觉得内存数据库不靠谱,万一断电数据不就没了?后来才发现,Redis在这方面考虑得比我想象的要周全得多。RDB和AOF,这俩哥们儿就是Redis的“双保险”,它们各有侧重,但都能有效保障数据不丢失。

RDB(Redis Database)持久化:RDB是一种快照(snapshotting)方式的持久化。它会在指定的时间间隔内,将内存中的所有数据以二进制的形式写入磁盘,生成一个

.rdb

文件。这个文件是Redis在某个时间点的数据全量备份。

优点紧凑:RDB文件非常紧凑,适合用于备份和灾难恢复。性能高:生成RDB文件时,Redis主进程会fork一个子进程来处理,主进程可以继续处理客户端请求,对性能影响小。恢复快:恢复数据时,直接加载RDB文件到内存,速度非常快。缺点数据丢失风险:由于是间隔性保存,如果在两次RDB快照之间Redis崩溃,那么这期间的数据就会丢失。这对于对数据一致性要求极高的场景来说,可能不是最佳选择。Fork开销:对于大数据集,fork子进程可能会导致短暂的阻塞。

AOF(Append Only File)持久化:AOF持久化则完全不同,它记录的是Redis服务器接收到的每一个写操作命令。当Redis执行一个写命令时,这个命令会被追加到AOF文件的末尾。当Redis重启时,它会重新执行AOF文件中的所有命令来恢复数据。

优点数据安全性高:AOF可以配置为每秒同步一次(

appendfsync everysec

),甚至每个命令都同步(

appendfsync always

),这意味着即使Redis崩溃,也最多丢失一秒的数据,甚至零数据丢失。可读性好:AOF文件记录的是命令,理论上是可读的,方便进行数据恢复和故障排查。缺点文件体积大:随着写操作的增多,AOF文件会越来越大。虽然Redis提供了AOF重写(

BGREWRITEAOF

)功能来压缩文件,但重写过程本身也会消耗资源。恢复速度慢:相比RDB,AOF恢复数据需要重新执行所有命令,如果文件很大,恢复时间会相对较长。

RDB和AOF的结合使用:在实际生产环境中,我通常会建议同时开启RDB和AOF。这是一种非常稳妥的策略:

RDB作为主要备份:定期生成RDB快照,用于应对大规模的数据恢复和灾难恢复,因为它恢复速度快。AOF作为数据安全保障:将AOF配置为

everysec

,确保即使系统突然崩溃,也最多丢失一秒的数据。

当Redis重启时,如果RDB和AOF文件都存在,Redis会优先使用AOF文件来恢复数据,因为它能提供更高的数据完整性。这种组合方式,既保证了数据的高安全性,又兼顾了备份和恢复的效率。当然,任何持久化机制都不能完全替代完善的备份策略,定期的异地备份依然是保障数据安全的最后一道防线。

除了数据存储,Redis还能承担哪些非传统数据库角色?

很多人提到Redis,第一反应就是缓存,这当然没错。但我觉得,把它仅仅看作一个缓存工具,那真是太小瞧它了。它在很多地方都能发挥奇效,比如我之前做的一个实时系统,消息推送就是靠Pub/Sub来搞定的,那速度,简直了。Redis凭借其高性能和丰富的数据结构,在很多非传统数据库的场景中扮演着关键角色。

1. 高速缓存层(Caching Layer)这是Redis最广为人知的用途。将频繁访问的数据存储在内存中,可以显著降低数据库负载,提高应用响应速度。无论是全页缓存、对象缓存还是查询结果缓存,Redis都能轻松胜任。它的键过期(TTL)机制,使得缓存管理变得异常简单。

2. 消息队列/发布订阅系统(Message Queue / Pub/Sub)Redis的列表(Lists)数据结构可以很方便地实现一个简单的消息队列。生产者通过

LPUSH

RPUSH

将消息推入列表,消费者通过

LPOP

RPOP

阻塞式地拉取消息(

BLPOP

/

BRPOP

)。这在处理异步任务、解耦系统组件时非常有用。更强大的则是它的发布/订阅(Pub/Sub)功能。一个客户端可以订阅一个或多个频道,另一个客户端向这些频道发布消息。所有订阅了该频道的客户端都会实时收到消息。这在构建实时聊天室、实时通知系统、股票行情推送、直播弹幕等场景中,表现得非常出色,而且实现起来代码量极少。

3. 分布式锁(Distributed Locks)在分布式系统中,为了保证共享资源的并发安全,常常需要分布式锁。Redis提供

SETNX

(SET if Not eXists)命令,结合键的过期时间(

EXPIRE

),可以优雅地实现一个简单的分布式锁。当多个进程尝试获取锁时,只有一个能成功设置键,并给它一个过期时间,防止死锁。虽然在极端情况下需要考虑锁的可靠性(比如Redlock算法),但对于大多数场景,Redis提供的基本能力已经足够。

4. 实时排行榜/计数器(Real-time Leaderboards / Counters)有序集合(Sorted Sets)是构建实时排行榜的理想选择。用户每次得分,就更新其在Sorted Set中的分数,Redis会自动维护排序。获取前N名、获取某个用户排名,都非常高效。而字符串的

INCR

命令,则能原子性地实现高并发计数器,例如统计点赞数、文章阅读量、商品点击量等,性能远超传统数据库的行级锁。

5. 会话管理(Session Management)对于需要横向扩展的Web应用,将用户会话数据存储在Redis中是一个非常常见的做法。这样,无论用户请求被哪台服务器处理,都能访问到统一的会话数据,解决了传统会话存储在单台服务器内存中的问题。Redis的高速读写能力,确保了会话操作的低延迟。

6. 限流(Rate Limiting)结合字符串的

INCR

和键的过期时间,可以非常灵活地实现API接口的访问频率限制。例如,记录某个IP地址在单位时间内的访问次数,超过阈值则拒绝请求。这对于保护后端服务免受恶意攻击或滥用非常有效。

7. 地理空间索引(Geospatial Indexing)Redis 3.2版本引入了地理空间(Geospatial)功能,可以使用

GEOADD

存储地理位置信息(经度、纬度),并利用

GEORADIUS

GEODIST

等命令进行附近的人、距离计算等操作。这在LBS(Location Based Service)应用中非常实用,例如查找附近的用户或商家。

这些非传统角色,充分展现了Redis作为“数据结构服务器”的强大灵活性和多功能性。它不仅仅是存储数据,更是通过其独特的命令和数据结构,提供了解决复杂分布式系统问题的强大工具集。

以上就是redis 有哪些功能?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/594227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 17:24:21
官方回应小米汽车与特斯拉“撞图”:嫉妒使人面目全非
下一篇 2025年11月10日 17:24:24

相关推荐

  • 抖音加入企业微信有什么用?

    将抖音与企业微信打通,可实现高效引流与深度客户运营。借助抖音的内容曝光能力吸引用户,并将其沉淀至企业微信进行长期维护,有助于提升转化效率和用户忠诚度。本文将深入解析两者联动的核心优势及实际应用方式。 抖音与企业微信协同的价值 精准引流与客户沉淀:通过抖音短视频或直播内容吸引目标受众,在视频中嵌入企业…

    2026年8月25日
    000
  • 电脑网络连接图标不见了如何恢复 介绍多种方法

    电脑网络连接图标不见了如何恢复 介绍多种方法电脑网络连接图标不见了如何恢复 介绍多种方法电脑网络连接图标不见了如何恢复 介绍多种方法电脑网络连接图标不见了如何恢复 介绍多种方法

    不少用户会遭遇网络连接图标莫名消失的问题。尽管这看起来只是个小故障,但若未能及时处理,可能会影响日常上网和网络管理。下面将分享几种实用的方法,帮你找回丢失的网络图标。 一、重启Windows资源管理器 有时候,系统资源管理器(Explorer.exe)出现临时异常,会导致任务栏图标不显示。通过重启该…

    2026年8月25日 用户投稿
    200
  • MAC怎么强制显示或隐藏文件扩展名_macOS访达中文件后缀名显示设置

    1、通过系统设置可全局显示或隐藏文件扩展名;2、使用Command + I打开检查器可临时修改单个文件扩展名显示;3、终端命令可批量控制扩展名显示,需执行defaults write命令并重启访达。 如果您在使用Mac时发现文件的扩展名未显示或意外隐藏,可能导致无法准确识别文件类型。通过调整macO…

    2026年8月25日
    100
  • 抖音小店入驻流程是怎样的?详细入驻步骤

    抖音小店入驻全流程解析 想要成功开通抖音小店,需经历一系列系统化操作和平台审核。以下是完整的入驻流程说明: 一、进入抖音开放平台 注册开发者账号:进入抖音开放平台官网,注册一个开发者账户,并选择“本地自营商家”身份类型。完成相应的开发者认证与身份验证,包括提交企业相关资质文件及基础资料信息[1]“…

    2026年8月25日
    100
  • 告别手动配置!CodeIgniter4AppStarter助你快速搭建PHP应用

    作为一名 PHP 开发者,在开始新的 CodeIgniter4 项目时,我经常需要花费大量时间在配置环境、下载框架、调整目录结构等繁琐的准备工作上。这些重复性的工作不仅耗时,而且容易出错。为了解决这个问题,我发现了 CodeIgniter4 App Starter。 codeigniter4 app…

    用户投稿 2026年8月25日
    000
  • BOOTSQM.dat文件可以删除吗的介绍

    BOOTSQM.dat文件可以删除吗的介绍BOOTSQM.dat文件可以删除吗的介绍BOOTSQM.dat文件可以删除吗的介绍BOOTSQM.dat文件可以删除吗的介绍

    最近有用户反映,在使用windows 7系统时,发现c盘里经常会出现一个名为bootsqm.dat的文件。那么这个bootsqm.dat究竟是什么?是否可以安全地删除它呢?接下来我们就来详细探讨一下bootsqm.dat文件能否被删除。 首先,我们可以通过以下步骤检查系统是否存在相关问题,并尝试解决…

    2026年8月25日 用户投稿
    000
  • 体验至上 太原消费者可零距离与斐雪派克交互

    2024年,我国家电市场零售总额达6957亿元,同比微降0.4%。然而,在整体市场趋于平稳的背景下,高端家电却实现逆势增长,成为拉动行业发展的关键力量,其中以场景化创新为核心的趋势尤为突出。在此趋势下,顶奢家电品牌正通过重构用户体验场景,迈向与消费者深度互动的全新阶段。 8月8日,继半个月前银川门店…

    2026年8月25日
    100
  • 饿了么外卖满减券领取入口_饿了么满减优惠快速领取方法

    无法享受满减优惠可能因未领取满减券,可通过饿了么APP领券中心、限时活动、扫码及第三方平台如蜜源APP四种方式获取,按步骤领取后在支付时勾选使用,满足条件即可抵扣。 如果您在饿了么下单时发现无法享受满减优惠,可能是因为未正确领取或使用对应的满减券。通过合适的渠道和方法,可以快速获取适用于不同消费金额…

    2026年8月25日
    100
  • 电脑cpu温度多少正常 cpu温度标准温度科普

    电脑cpu温度多少正常 cpu温度标准温度科普电脑cpu温度多少正常 cpu温度标准温度科普电脑cpu温度多少正常 cpu温度标准温度科普电脑cpu温度多少正常 cpu温度标准温度科普

    cpu是计算机系统中至关重要的核心组件,其运行温度直接关系到整机的稳定性、性能表现以及硬件寿命。那么,我们该如何判断电脑cpu的温度是否处于正常状态?不同型号的cpu在温度标准上又有哪些差异?本文将为你详细解读,帮助你更好地掌握cpu温度管理知识。 一、影响CPU温度的主要因素 在了解正常温度范围前…

    2026年8月25日 用户投稿
    000
  • 开头抖音团购要的小程序是什么

    在抖音开展团购活动时,商家需借助专业的小程序工具来实现商品管理与交易闭环。这类小程序通常由有赞等第三方服务商提供,支持团购创建、订单处理和推广引流等功能。 作为主流短视频平台,抖音汇聚了庞大的用户群体,已成为品牌营销和商品销售的重要阵地。通过接入小程序,商家能够高效组织团购流程,提升运营效率,同时为…

    2026年8月25日
    000
  • 如何解决PHP8字符串与数字比较的陷阱,使用Psalm插件确保代码平稳升级

    Composer在线学习地址:学习地址 最近,我们团队计划将一个运行多年的老项目从 php 7 升级到 php 8。起初,我们信心满满,认为只要处理好一些明显的语法变动和废弃功能,升级就会一帆风顺。然而,很快我们就遇到了一个让人头疼的“隐形杀手”:php 8 对字符串和数字的比较逻辑进行了调整。 在…

    用户投稿 2026年8月25日
    000
  • 随便记录下系列 – node->express

    系列记录 – node.js到express的一站式指南 一、在Windows上安装Node.js环境:从官方网站下载Node.js,需替换下载链接 https://nodejs.org/dist/v6.2.0/node-v6.2.0-x64.msi 中的版本号6.2.0为所需版本即可。…

    2026年8月25日
    400
  • 音频格式转换方法

    音频格式转换方法音频格式转换方法音频格式转换方法音频格式转换方法

    当遇到音频格式不兼容的情况时,可以通过使用格式转换工具将文件转换为设备或软件支持的格式。 1、 打开格式工厂软件 2、 在软件左侧列表中选择音频类型,点击后选择目标格式(例如WMA),准备进行转换。 3、 添加需要转换的文件,并设置输出文件的保存路径。 4、 浏览并定位到原始音频文件所在的存储位置。…

    2026年8月25日 用户投稿
    100
  • MiaoLab妙莱安全插排:以创新安全与美学设计,重塑用电新体验

    MiaoLab妙莱安全插排:以创新安全与美学设计,重塑用电新体验MiaoLab妙莱安全插排:以创新安全与美学设计,重塑用电新体验MiaoLab妙莱安全插排:以创新安全与美学设计,重塑用电新体验MiaoLab妙莱安全插排:以创新安全与美学设计,重塑用电新体验

    在国民安全意识持续提升、家居审美需求日益增长的当下,家庭用电安全已然成为衡量“高品质生活”的重要标准。传统插排普遍存在设计简陋、重心偏高、插孔位置过低等问题,常被视作“安全隐患源头”和“桌面杂乱罪魁”。miaolab妙莱作为新兴的生活方式品牌,敏锐洞察这一用户痛点,推出全球首款不倒翁结构安全插排,以…

    2026年8月25日 用户投稿
    000
  • 瑞幸抖音小程序点单入口:便捷的咖啡点单新选择

    导语: 在咖啡行业竞争愈发激烈的当下,瑞幸抖音小程序点单入口应运而生,成为消费者享受高效、智能点单体验的新方式。本文将全面解析瑞幸抖音小程序点单入口的核心功能、操作流程及其独特优势,助您轻松掌握这一全新的咖啡下单渠道。 一、核心功能亮点 1.1 高效快捷的点单方式 瑞幸抖音小程序点单入口为用户打造了…

    2026年8月25日
    000
  • 更强大的PHP反射!wingu/reflection如何解决复杂类型分析难题

    在大型PHP项目中,类型信息的准确性和完整性至关重要。例如,在使用依赖注入容器时,我们需要准确地知道构造函数的参数类型,才能正确地注入依赖。又或者,在进行代码生成时,我们需要从DocBlock中提取信息,生成相应的代码。PHP原生的反射API在处理这些场景时,往往需要编写大量的代码,而且容易出错。 …

    用户投稿 2026年8月25日
    100
  • 电脑wifi连接不上怎么解决 6招轻松搞定

    电脑wifi连接不上怎么解决 6招轻松搞定电脑wifi连接不上怎么解决 6招轻松搞定电脑wifi连接不上怎么解决 6招轻松搞定电脑wifi连接不上怎么解决 6招轻松搞定

    有时候电脑无法连接wifi,确实会让人感到非常烦恼。实际上,造成wifi连接失败的原因多种多样,只要按步骤逐一排查,大多数问题都能迅速解决。接下来,我们就来系统地分析一下电脑连不上wifi的常见原因及对应的解决办法。 一、确认无线功能是否启用 首先应检查电脑的WiFi功能是否开启。部分笔记本电脑配备…

    2026年8月25日 用户投稿
    200
  • Java中如何实现链路追踪 掌握Sleuth

    Java中如何实现链路追踪 掌握SleuthJava中如何实现链路追踪 掌握SleuthJava中如何实现链路追踪 掌握SleuthJava中如何实现链路追踪 掌握Sleuth

    如何在spring boot项目中集成sleuth?首先,在pom.xml中添加sleuth依赖:spring-cloud-starter-sleuth;其次,如需对接zipkin,添加spring-cloud-sleuth-zipkin依赖;然后,在配置文件中设置zipkin服务器地址和应用名称。…

    2026年8月25日 用户投稿
    000
  • 硬件监控软件横评:HWiNFO64、AIDA64、CPU-Z 功能对比

    CPU-Z适合快速查看硬件配置,AIDA64提供全面信息与压力测试,HWiNFO64则以深度传感器数据成为专业监控首选,三者各有侧重,按需选用。 说到看电脑硬件信息和监控状态,HWiNFO64、AIDA64和CPU-Z是很多人会用的工具。它们都能告诉你电脑里有什么,但侧重点和功能深度差别不小。简单说…

    2026年8月25日
    100
  • Java中IoC是什么概念 图解控制反转和依赖注入的实现原理

    Java中IoC是什么概念 图解控制反转和依赖注入的实现原理Java中IoC是什么概念 图解控制反转和依赖注入的实现原理Java中IoC是什么概念 图解控制反转和依赖注入的实现原理Java中IoC是什么概念 图解控制反转和依赖注入的实现原理

    ioc反转的是对象的控制权。传统开发中对象自己管理依赖,而ioc将对象创建和依赖管理交给外部容器,从而实现控制权的反转。ioc是一种设计原则,di是其具体实现方式,通过构造器、setter或接口注入依赖。java中依赖注入主要有三种方式:1.构造器注入,通过构造函数传递依赖,优点是依赖明确且不可变;…

    2026年8月25日 用户投稿
    000

发表回复

登录后才能评论
关注微信