【Redis入门到精通二】Redis核心数据类型(String,Hash)详解
目录
Redis数据类型
1.String类型
(1)常见命令
(2)内部编码
2.Hash类型
(1)常见命令
(2)内部编码
Redis数据类型
查阅Redis官方文档可知,Redis提供给用户的核心数据类型有以下九个,从上到下依次是字符串,哈希,列表,集合,有序集合,流,位图,位域,地址空间。因为Redis本身就是通过键值对的方式存储数据,这些数据类型都存在于Redis的value中 ,不同的数据类型,所需要的插入命令也不相同。下面我将依据官方文档对这九种数据类型依次进行介绍,本篇文章将着重对String,Hash两种数据类型进行介绍。

1.String类型
- ⾸先 Redis 中所有的键的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型。
- 其次,字符串类型的值实际可以是字符串,包含⼀般格式的字符串或者类似 JSON、XML 格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最⼤值不能超过 512 MB。
tips:
由于 Redis 内部存储字符串完全是按照⼆进制流的形式保存的,所以 Redis 是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码。处理中文乱码问题可以在启动Redis客户端时加上一个 --raw命令就可以使redis客户端自动把二进制的数据尝试翻译。
(1)常见命令
Redis操作字符串类型常见的有以下命令set,get,mget,mset,setnx,setxx,incr,incrby,decr,decrby,incrbyfloat,append,getrange,setrange,strlen。下面将按顺序依次介绍用法。
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
时间复杂度O(1),set命令可添加的选项:
- EX seconds⸺使⽤秒作为单位设置 key 的过期时间。
- PX milliseconds⸺使⽤毫秒作为单位设置 key 的过期时间。
- NX ⸺只在 key 不存在时才进⾏设置,即如果 key 之前已经存在,设置不执⾏。
- XX ⸺只在 key 存在时才进⾏设置,即如果 key 之前不存在,设置不执⾏。
get key
时间复杂度O(1),get命令返回key对应的value(value只能是字符串类型),key不存在时返回nil 。
MGET key [key ...]
时间复杂度O(N), mget命令用于一次查询多个key值,因为Redis是客户端-服务器结构,每条命令都需要经过网络传递到服务器执行,把多条命令结合在一次执行能很大程度减少因为网络传递消耗的时间。
MSET key value [key value ...]
时间复杂度O(N),mset的设计初衷与mget相似。
INCR key
时间复杂度O(1),incr返回 key的值加一。
INCRBY key decrement
时间复杂度O(1),incrby返回key的值加decrement。
DECR key
时间复杂度O(1),decr返回 key的值减一。
DECRBY key decrement
时间复杂度O(1),decrby返回key的值减decrement。
INCRBYFLOAT key increment
时间复杂度O(1),incrbyfloat返回key的值加decrement。(可以是浮点数类型)
APPEND KEY VALUE
时间复杂度O(1),append把value 追加到原有 string 的后边。
GETRANGE key start end
时间复杂度O(N),getrange类似于切片,返回key对应string的子串,左右区间均为闭区间,可以用负数表示从后往前数。
SETRANGE key offset value
时间复杂度O(N),setrange命令从offset位置开始用value覆盖原字符串后面的内容。
STRLEN key
时间复杂度O(1),strlen用于返回字符串的长度。
(2)内部编码
Redis的字符串类型在内存中存储时有三种编码方式,分别是int,embstr和raw三种类型,Redis会根据当前值的类型和长度动态决定使用哪种内部编码实现,可以通过object encoding key 命令来查看编码方式。
- int:8 个字节的⻓整型。
- embstr:⼩于等于 39 个字节的字符串。
- raw:⼤于 39 个字节的字符串。
2.Hash类型
Redis本身就是依据键值对进行数据存储的,所谓哈希类型指的是在Redis的值当中又存在多个键值对结构。形如 key = "key",value = { { field1, value1 }, ..., {fieldN, valueN } }。
(1)常见命令
hash类型的常见命令有hset,hget,hexists,hdel,hkeys,hvals,hgetall,hmget,hlen,hsetnx,hincrby,hincrbyfloat,hstrlen。下面将按顺序依次介绍用法。
HSET key field value [field value ...]
时间复杂度为O(N), hset命令负责插入N组键值对,返回添加字段个数。
HGET key field
时间复杂度为O(1), hget命令返回字段对应的值或者nil。
HEXISTS key field
时间复杂度为O(1), hexists负责判断字段是否存在。
HDEL key field [field ...]
时间复杂度为O(N), hdel命令用来删除指定字段。
HKEYS key
时间复杂度为O(N), hkeys用来获取hash中的所有字段。
HVALS key
时间复杂度为O(N), hvals用来获取hash中所有的值。
HGETALL key
时间复杂度为O(N), hgetall用来获取hash中所有字段以及对应的值。
HMGET key field [field ...]
时间复杂度为O(N), hmget用于一次性获取多个字段的值。
HLEN key
时间复杂度为O(1), hlen用于获取hash中的所有字段的个数。
HSETNX key field value
时间复杂度为O(1),hsetnx在字段不存在的情况下,设置hash中的字段和值。
HINCRBY key field increment
时间复杂度为O(1), hincrby将hash中字段对应的数值添加指定的值。
HINCRBYFLOAT key field increment
时间复杂度为O(1), hincrbyfloat与hincrby相似不过添加的值为浮点数。
HSTRLEN key field
时间复杂度为O(1),hstrlen命令用于计算value的字符串的长度。
(2)内部编码
hash类型在内存中的编码方式有两种,分别是ziplist和hashtable类型。Redis会根据当前值的类型和长度动态决定使用哪种内部编码实现,可以通过object encoding key 命令来查看编码方式。
- ziplist(压缩列表):当哈希类型元素个数⼩于 hash-max-ziplist-entries 配置(默认 512 个)、 同时所有值都⼩于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使⽤ ziplist 作为哈希的内部实现,ziplist 使⽤更加紧凑的结构实现多个元素的连续存储,所以在节省内存⽅⾯⽐hashtable 更加优秀。
- hashtable(哈希表):当哈希类型⽆法满⾜ ziplist 的条件时,Redis 会使⽤ hashtable 作为哈希 的内部实现,因为此时 ziplist 的读写效率会下降,⽽ hashtable 的读写时间复杂度为 O(1)。
❤️😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍😍
🍔我是小皮侠,谢谢大家都能看到这里!!
🦚主页已更新Java基础内容,数据结构基础,数据库,算法
🚕未来会更新Java项目,SpringBoot,Redis以及各种Java路线会用到的技术。
🎃求点赞!求收藏!求评论!求关注!
🤷♀️谢谢大家!!!!!!!!
相关文章:
【Redis入门到精通二】Redis核心数据类型(String,Hash)详解
目录 Redis数据类型 1.String类型 (1)常见命令 (2)内部编码 2.Hash类型 (1)常见命令 (2)内部编码 Redis数据类型 查阅Redis官方文档可知,Redis提供给用户的核心数据…...
如何快速免费搭建自己的Docker私有镜像源来解决Docker无法拉取镜像的问题(搭建私有镜像源解决群晖Docker获取注册表失败的问题)
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Docker无法拉取镜像 📒📒 解决方案 📒🔖 方法一:免费快速搭建自己的Docker镜像源🎈 部署🎈 使用🔖 备用方案⚓️ 相关链接 🚓️📖 介绍 📖 在当前的网络环境下,Docker镜像的拉取问题屡见不鲜(各类Nas查询…...
QT 获取视频帧Opencv获取清晰度
先展示结果: 1.获取摄像头的分辨率 mResSize.clear();mResSize camera_->supportedViewfinderResolutions();ui->comboBox_resulation->clear();int i0;foreach (QSize msize, mResSize) {qDebug()<<msize;ui->comboBox_resulation->addItem(…...
生成式AI如何辅助医药行业智能营销
生成式AI在医药行业的智能营销中发挥着日益重要的作用,它通过多种方式辅助医药企业提升市场洞察能力、优化营销策略、增强客户互动和体验,从而推动销售增长和品牌价值的提升。以下是生成式AI如何辅助医药行业智能营销的具体方式:一、精准市场…...
演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制
一、目的:基于WPF的DrawingVisual开发的Chart图表和表格绘制 二、预览 钻井井轨迹表格数据演示示例(应用Table布局,模拟井轨迹深度的绘制) 饼图表格数据演示示例(应用Table布局,模拟多个饼状图组合显示&am…...
汽车保养BBBBBBBBBBB
小保养就是机油和机滤,4s店比较贵,可以在京东上买机油,可以包安装 极护、磁护 两款机油配方不同,极护系列机油注入液钛配方,拥有特别的油膜自适应能力,在各种形式条件下均能有效减少金属间的直接接触&…...
H3C R4900 G3服务器上配置本地磁盘RAID
首先web登录HDM后,查看本地磁盘 开机后在如下界面中按F10 等待后如下截图:单击“系统安装” 如下截图。默认选择,单击“下一步” 如下RAID配置,选中2个同样大的磁盘,单击“创建” 在跳出界面中,配置为RAID 1,输入需要的...
HBase DDL操作代码汇总(namespace+table CRUD操作)
HBase DDL操作 DDL操作主要是关于命名空间和表格的内容增删改查。 注:如果出现无法连接到zookeeper等的相关错误,可以将以下代码打jar包,在HMaster节点上执行 错误提示: Exception in thread “main” java.net.SocketTimeoutExc…...
关于TCP的基础知识
关于TCP的基础知识 TCP 是 Transmission Control Protocol 的缩写,中文意思是传输控制协议。 TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议,它位于 OSI 模型的第四层(传输层)。TCP 协议通过建立连接、维护连接状态、…...
MyBatis 中的类型别名配置详解
目录 1. 什么是类型别名? 2. 类型别名的配置方法 2.1 使用单个标签 2.2 使用标签批量扫描 2.3 使用Alias注解 3. 注意事项 4. 相关知识拓展 4.1 MyBatis的映射文件 4.2 MyBatis的动态SQL 4.3 MyBatis与Spring的整合 4.4 性能优化 5. 结论 在现代Java开发…...
如何提高UI自动化的稳定性
用例层面: 1. 将用例设计成参数化,将测试数据通过参数进行传递 2. 对于一些可能会变化的参数,将其设计成全局变量,减少维护用例的成本 3. 对用例之间避免产生依赖,可以独立执行 框架层面: 1. 使用PO设…...
ubuntu如何开启和关闭图形界面
在Ubuntu中,你可以根据需要开启或关闭图形界面。以下是具体的方法: 关闭图形界面 方法一:使用 systemctl 命令 打开终端。输入以下命令切换到多用户目标(相当于关闭图形界面):sudo systemctl set-defaul…...
从博客到ICT社区:深化学习与交流的桥梁
大家好,我是你们熟悉的云途-CloudJourney。在这个信息爆炸的时代,我一直致力于通过博客、公众号等平台,与大家分享关于Linux、K8S、Docker、网络、服务器以及OpenStack等前沿技术的见解与心得。然而,随着交流的深入,我…...
基于python+django+vue的旅游景点数据分析系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...
C++简单缓冲区类设计
目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中,设计静态和动态缓冲区类时,需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…...
MySQL 数据库
1. MySQL 数据库的基础知识 这一部分将带你了解 MySQL 数据库的核心概念。无论你是初学者还是想要巩固基础,这部分内容将帮助你打下扎实的基础。 数据库的定义与作用:什么是数据库?MySQL 与其他数据库系统的比较。MySQL 安装与配置…...
基于单片机的智能校园照明系统
由于校园用电量较大,本设计可以根据实际环境情况的改变,实现实时照明的控制。本设计以单片机芯片为控制芯片,热释电传感器采集教室中学生出入的信息,并把信息传递给单片机芯片,单片机芯片根据传感器传递过来的信息来控…...
高性能分布式搜索引擎Elasticsearch详解
♥️作者:小宋1021 🤵♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油!…...
连锁收银系统的五大功能 选择开源收银系统三要素
连锁收银系统的五大功能,很多新手是不清楚的,老手也只是知道一些大概,今天,商淘云为大家分享收银系统的五大功能,尤其是第五个,大部分人不清楚,有的企业前面选了不合适的收银系统,导…...
虚幻引擎解决构建问题
1.Intermediate 文件夹 在 Unreal Engine中,Intermediate 文件夹扮演着构建过程中的临时存储角色。具体来说,Intermediate 文件夹用于存放在编译和构建项目过程中生成的中间文件,这些文件包括但不限于: 编译中间文件:…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
