news 2026/7/16 11:30:10

Redis数据类型和编码方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis数据类型和编码方式

value类型

字符串,哈希,列表,集合,有序集合

相对于集合来说,增加了权重

举个例子

该有序集合里面存储的是学生的成绩,该成绩就是权重

Redis在底层实现上述数据结构时,会在源码层面,针对上述实现进行特定优化,来达到节省时间/节省空间的效果,它保证了在应用层展现的是上述类型的特点,但并不保证在底层使用的就是该类型

string类型内部编码

raw:最基本的字符串底层就是一个char数组

int:redis通常也会实现一些计数功能,当value是一个整数的时候,此时redis会直接用int来保存embstr:针对短字符串进行优化

hash内部编码

hashable:最基本的哈希表,redis内部的哈希表的实现,虽然这里的实现方式可能不太一样,但是整体思路和之前学的一致

ziplist:在哈希表里面元素比较少的时候,可能就变成了ziplist(压缩列表),这样可以节省空间,但这样就不会向哈希表那样定值那么快,因为列表需要遍历,所以只适合元素比较少的情况下

为什么在这个位置要选择压缩列表?
因为value可能还是个哈希结构,但是这时的哈希结构并不大,如果采用常用的哈希结构就会出现大量内存浪费的问题,所以引入了这个结构,当哈希不大的时候采取压缩列表,并不会很影响效率,虽然需要遍历压缩列表,但是压缩列表并不大,遍历很快就结束了

list内部编码

linkedlist:正常链表结构

ziplist

从redis3.2开始,引入了新的实现先方式quicklist取代上述两种结构

quick list大概实现方式:
本质还是一个链表,只是链表的每个元素是一个ziplist,把空间和效率都折中的兼顾到,类似于C++中的std::deque

set内部编码

hashable

intset:对特定场景进行优化,该场景为集合中都是整数

zset内部编码

skiplist:跳表,跳表也是链表,不同于普通链表,每个节点上有多个指针域,巧妙的搭配了这些指针域的指向,就可以做到从跳表上查询元素的时间复杂度为O(lo0gN)

ziplist

object encoding

查看key对应的实际编码方式

操作格式

object encoding key

举个例子

object encoding key1

redis会根据实际情况,自动选择内部的编码方式

redis单线程模型

redis只使用一个线程,来处理所有请求,不是说redis进程真的只有一个线程,多线程部分用来处理网络IO

问题:两个客户端同时发起请求,相当于“并发”,当两个请求同时请求同一个数据,时候会造成“线程安全”的问题呢?
并不会,因为是单进程执行处理请求,所以当两个请求都来的时候,在redis内部也是要“排队”的,所以他俩并不会同时对一个数据产生影响,所以不会出现“并发”的问题。

为什么这里不选择多线程执行?
redis选择单线程执行任务主要原因就是,redis核心业务都是短平快的,不太消耗CPU资源。也就不吃多核,反而频繁切换线程,加锁解锁,反而是种负担,可能还会影响效率。

redis虽然是单线程模型,为什么效率还这么高?

这里效率高,是相对于关系型数据库来讲的(Mysql,oracl,sql server)

redis访问内存,mysql访问硬盘

redis核心功能比mysql核心功能更加简单

mysql对于核心的插入删除都有复杂的功能支持,这样势必会增大开销,比如针对插入删除,mysql各种约束,都会使mysql做额外的工作

单线程模型,避免了一些不必要的开销

处理网络IO的时候,使用了epoll这样的IO多路复用机制

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 11:30:01

Lenovo Legion Toolkit:技术架构解析与高级硬件控制实现

Lenovo Legion Toolkit:技术架构解析与高级硬件控制实现 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit Lenovo …

作者头像 李华
网站建设 2026/7/16 11:29:19

Claude桌面端第三方AI模型接入实战指南

1. Claude桌面端第三方模型配置指南最近在AI工具圈里,Claude桌面端的热度持续攀升。作为一名长期关注AI工具落地的开发者,我发现很多同行都在寻找突破官方限制的方法,希望能在这个轻量级客户端上调用更多第三方模型。今天我就来分享一套经过实…

作者头像 李华
网站建设 2026/7/16 11:27:52

解决抖音内容管理难题:douyin-downloader 批量下载方案深度解析

解决抖音内容管理难题:douyin-downloader 批量下载方案深度解析 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallb…

作者头像 李华
网站建设 2026/7/16 11:27:40

OpenClaw云容器化部署:技能引擎的生产级落地实践

1. 这不是又一个“一键部署”幻觉:OpenClaw在云容器里到底要解决什么真实问题? 你搜“openclaw安装教程”,页面刷出来几十个标题党——“三分钟跑通”“保姆级教学”“小白秒变大神”。我点开三个,两个卡在 openclaw : 无法将“o…

作者头像 李华
网站建设 2026/7/16 11:27:26

RePKG逆向工具:解析Wallpaper Engine的PKG与TEX文件格式

1. 项目概述:为什么我们需要RePKG?如果你和我一样,是个喜欢折腾桌面美化的玩家,那对Wallpaper Engine一定不陌生。它那海量的动态壁纸库,从赛博朋克夜景到唯美二次元,总能找到让你眼前一亮的作品。但不知道…

作者头像 李华