深圳住房和建设局网站认租申请专业网架公司

张小明 2025/12/31 22:35:58
深圳住房和建设局网站认租申请,专业网架公司,互联网app推广工作怎么样,qq空间转wordpressRedis 之所以被称为“高性能数据结构服务器”#xff0c;是因为它不仅提供了简单的键值对存储#xff0c;更在于它针对不同的应用场景#xff0c;在底层设计了多种极度精巧的数据结构。本文将针对 Redis 的 5 大基础数据结构 和 4 大高级数据结构 进行全方位的拆解。一、 字…Redis 之所以被称为“高性能数据结构服务器”是因为它不仅提供了简单的键值对存储更在于它针对不同的应用场景在底层设计了多种极度精巧的数据结构。本文将针对 Redis 的5 大基础数据结构和4 大高级数据结构进行全方位的拆解。一、 字符串 (String)Redis 的基石String 是 Redis 中最简单、也是最常用的类型。它是二进制安全的意味着你可以存储任何数据JSON、图片、序列化对象。1.1 基础用法设置与获取SET key value/GET key批量操作MSET k1 v1 k2 v2/MGET k1 k2计数操作INCR key原子加1、DECR key、INCRBY key increment生存时间SETEX key seconds value设置值的同时设置过期时间不存在才设置SETNX key value分布式锁的核心1.2 底层原理SDS (简单动态字符串)Redis 没有使用 C 语言传统的字符数组以\0结尾而是自己实现了SDSO(1) 获取长度内部有len属性不需要像 C 字符串那样遍历。空间预分配修改字符串时Redis 会多分配一些空闲空间减少内存重分配次数。二进制安全SDS 根据len判断结束而不是\0所以可以存二进制图片。1.3 内存编码int如果是 8 字节长整型直接存数字。embstr长度 ≤ 44 字节。RedisObject 头和 SDS 在一起分配速度极快。raw长度 44 字节。两次内存分配适合存大文本。二、 哈希 (Hash)对象存储的专家Hash 类似于 Java 的HashMap特别适合存储对象因为它不需要序列化整个对象就能修改其中的某个字段。2.1 基础用法设置字段HSET user:100 name Tom age 18获取字段HGET user:100 name获取全部HGETALL user:100字段增量HINCRBY user:100 age 1判断存在HEXISTS user:100 name2.2 底层原理Listpack (新版) / ZipList (旧版)当 Hash 的字段较少且值较小时Redis 使用紧凑的连续内存存储极其省内存。HashTable (哈希表)当数据量变大默认超过 512 个字段或单值超过 64 字节时转为真正的哈希表查询效率为 O(1。2.3 实战场景购物车以用户 ID 为 Key商品 ID 为 Field商品数量为 Value。这比用 String 存储整个序列化对象效率高得多。三、 列表 (List)高性能双端队列List 是简单的字符串列表按照插入顺序排序支持从两端插入或弹出。3.1 基础用法两端插入LPUSH key value左插、RPUSH key value右插两端弹出LPOP key、RPOP key范围查看LRANGE key start stop例如LRANGE key 0 -1查看全部阻塞弹出BLPOP key timeout队列为空时阻塞直到有数据消息队列神技剪裁列表LTRIM key start stop只保留指定区间常用于保留最新动态3.2 底层原理QuickList现在的 Redis List 统一采用QuickList结构。它是一个双向链表但链表中的每个节点都是一个Listpack紧凑列表。设计精髓单纯的链表指针开销大每个节点左右指针占 16 字节且容易产生内存碎片QuickList 结合了链表的灵活性和压缩列表的内存高效性。四、 集合 (Set)无序且唯一的去重专家Set 存储不重复的元素并提供了极其强大的集合运算交、并、差。4.1 基础用法添加/删除SADD key member/SREM key member判断存在SISMEMBER key member获取所有SMEMBERS key随机抽取SRANDMEMBER key count不删除、SPOP key删除集合运算SINTER k1 k2交集、SUNION k1 k2并集、SDIFF k1 k2差集4.2 底层原理IntSet如果元素全是整数且数量少Redis 使用有序数组存储查询用二分查找。HashTable一旦有字符串或元素多转为 DictValue 设为 NULL。4.3 实战场景共同好友利用SINTER命令可以瞬间算出两个用户的共同好友利用SADD可以轻松实现抽奖逻辑。五、 有序集合 (ZSet)Redis 的性能巅峰ZSet 在 Set 的基础上增加了一个score分数使得元素可以按分数排序。5.1 基础用法添加元素ZADD rank 100 Tom 90 Jerry获取排名ZRANGE rank 0 -1从小到大、ZREVRANGE rank 0 -1从大到小按分数取ZRANGEBYSCORE rank 80 100增加分数ZINCRBY rank 10 Tom统计数量ZCARD rank5.2 核心底层SkipList (跳跃表)ZSet 的核心是跳表。为什么快跳表通过在链表上建立多级索引实现了类似“二分查找”的效果。复杂度插入、删除、查询的时间复杂度均为 O(log N)。对比红黑树跳表实现更简单且在处理ZRANGE这种范围查询时跳表通过底层的双向链表横向遍历效率远超红黑树。六、 高级数据结构应对特殊场景6.1 Bitmaps (位图)用法SETBIT key offset value/GETBIT key offset原理利用 String 的 bit 位存储 0 或 1。场景1 亿用户每天的签到状态仅需 12.5MB 空间。6.2 HyperLogLog (基数统计)用法PFADD key element/PFCOUNT key原理基于概率算法。场景统计网站 UV独立访客。无论数据量多大只占 12KB误差仅 0.81%。6.3 Geospatial (地理位置)用法GEOADD city 116.40 39.90 beijing/GEODIST计算距离 /GEORADIUS附近的人。原理将经纬度转为 ZSet 的 Score。6.4 Streams (流)用法XADD/XREAD/XGROUP场景Redis 5.0 后提供的专业消息队列。支持多播、消费组、ACK 确认机制完美解决了 List 做消息队列时无法多播和数据丢失风险的问题。七、 总结如何选型需求场景推荐结构理由单值缓存/计数器String简单、原子性高存储对象信息Hash节省内存灵活修改字段消息队列/时间轴List双端操作有序去重/社交关系Set集合运算强大排行榜/延迟任务ZSet自动排序范围查询快海量状态统计Bitmap极致节省空间博主寄语选择 Redis 数据结构时不仅要看它的基础用法是否满足业务功能更要关注其底层编码和时间复杂度。在大数据量下一个 O(N) 命令如 HGETALL 或 SMEMBERS可能会导致整个 Redis 实例阻塞。希望这篇深度解析能帮你在面试和实战中游刃有余如果你有任何疑问欢迎在评论区留言讨论。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

园区建设网站的方案智能建站制作

用 awk 实现拼写检查器 在文本处理和编程中,拼写检查是一项常见且重要的任务。本文将详细介绍如何使用 awk 语言编写一个简单的拼写检查器,包括字典的加载、命令行选项的处理、后缀规则的应用等关键部分。 1. 字典的选择与加载 在编写拼写检查器时,字典的选择至关重要。如…

张小明 2025/12/31 1:18:08 网站建设

南昌网站优化咨询服务类公司

LangFlow Factory工厂模式创建组件实例 在构建大语言模型(LLM)应用的实践中,一个日益突出的问题是:如何让非程序员也能参与AI系统的原型设计?当产品经理需要快速验证一个智能客服流程、数据分析师想尝试不同的提示工程…

张小明 2025/12/30 23:21:28 网站建设

一个人可以建设几个网站软件下载网站怎么做

简介 文章系统剖析了驱动大语言模型的核心数学概念,包括线性代数、概率论和微积分等。通过生动类比,揭示了这些工具如何协同工作,使机器能够表示、处理和生成人类语言。文章还介绍了词嵌入、注意力机制和文本生成策略等关键架构组件&#xff…

张小明 2025/12/31 17:04:56 网站建设

深圳网站建设制作哪家好wordpress 语言选择

构建 Android 应用程序全攻略 1. 声明式用户界面定义 在设计 Android 应用的用户界面时,Xamarin.Android 会将设计内容转换为存储在 .axml 文件中的标记代码。这一特性非常实用,因为 Xamarin.Android 生成的标记代码与 Android Studio 生成的相同。所以,如果你有使用 And…

张小明 2025/12/31 17:04:55 网站建设

福建响应式网站制作常州建设工程质量监督网站

目录 这里写目录标题目录项目介绍项目展示详细视频演示技术栈文章下方名片联系我即可~解决的思路开发技术介绍性能/安全/负载方面python语言Django框架介绍技术路线关键代码详细视频演示收藏关注不迷路!!需要的小伙伴可以发链接或者截图给我 项目介绍 …

张小明 2025/12/31 12:51:22 网站建设

杭州 手机网站建设哈尔滨网站建设招聘

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整…

张小明 2025/12/31 17:04:57 网站建设