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

【Redis入门到精通二】Redis核心数据类型(String,Hash)详解

目录

Redis数据类型

1.String类型

 (1)常见命令

(2)内部编码

2.Hash类型

(1)常见命令

(2)内部编码


Redis数据类型

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

1.String类型

       字符串类型是 Redis 最基础的数据类型,关于字符串需要特别注意:
  • ⾸先 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获取清晰度

先展示结果&#xff1a; 1.获取摄像头的分辨率 mResSize.clear();mResSize camera_->supportedViewfinderResolutions();ui->comboBox_resulation->clear();int i0;foreach (QSize msize, mResSize) {qDebug()<<msize;ui->comboBox_resulation->addItem(…...

生成式AI如何辅助医药行业智能营销

生成式AI在医药行业的智能营销中发挥着日益重要的作用&#xff0c;它通过多种方式辅助医药企业提升市场洞察能力、优化营销策略、增强客户互动和体验&#xff0c;从而推动销售增长和品牌价值的提升。以下是生成式AI如何辅助医药行业智能营销的具体方式&#xff1a;一、精准市场…...

演示:基于WPF的DrawingVisual开发的Chart图表和表格绘制

一、目的&#xff1a;基于WPF的DrawingVisual开发的Chart图表和表格绘制 二、预览 钻井井轨迹表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟井轨迹深度的绘制&#xff09; 饼图表格数据演示示例&#xff08;应用Table布局&#xff0c;模拟多个饼状图组合显示&am…...

汽车保养BBBBBBBBBBB

小保养就是机油和机滤&#xff0c;4s店比较贵&#xff0c;可以在京东上买机油&#xff0c;可以包安装 极护、磁护 两款机油配方不同&#xff0c;极护系列机油注入液钛配方&#xff0c;拥有特别的油膜自适应能力&#xff0c;在各种形式条件下均能有效减少金属间的直接接触&…...

H3C R4900 G3服务器上配置本地磁盘RAID

首先web登录HDM后,查看本地磁盘 开机后在如下界面中按F10 等待后如下截图:单击“系统安装” 如下截图。默认选择,单击“下一步” 如下RAID配置,选中2个同样大的磁盘,单击“创建” 在跳出界面中,配置为RAID 1,输入需要的...

HBase DDL操作代码汇总(namespace+table CRUD操作)

HBase DDL操作 DDL操作主要是关于命名空间和表格的内容增删改查。 注&#xff1a;如果出现无法连接到zookeeper等的相关错误&#xff0c;可以将以下代码打jar包&#xff0c;在HMaster节点上执行 错误提示&#xff1a; Exception in thread “main” java.net.SocketTimeoutExc…...

关于TCP的基础知识

关于TCP的基础知识 TCP 是 Transmission Control Protocol 的缩写&#xff0c;中文意思是传输控制协议。 TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;它位于 OSI 模型的第四层&#xff08;传输层&#xff09;。TCP 协议通过建立连接、维护连接状态、…...

MyBatis 中的类型别名配置详解

目录 1. 什么是类型别名&#xff1f; 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自动化的稳定性

用例层面&#xff1a; 1. 将用例设计成参数化&#xff0c;将测试数据通过参数进行传递 2. 对于一些可能会变化的参数&#xff0c;将其设计成全局变量&#xff0c;减少维护用例的成本 3. 对用例之间避免产生依赖&#xff0c;可以独立执行 框架层面&#xff1a; 1. 使用PO设…...

ubuntu如何开启和关闭图形界面

在Ubuntu中&#xff0c;你可以根据需要开启或关闭图形界面。以下是具体的方法&#xff1a; 关闭图形界面 方法一&#xff1a;使用 systemctl 命令 打开终端。输入以下命令切换到多用户目标&#xff08;相当于关闭图形界面&#xff09;&#xff1a;sudo systemctl set-defaul…...

从博客到ICT社区:深化学习与交流的桥梁

大家好&#xff0c;我是你们熟悉的云途-CloudJourney。在这个信息爆炸的时代&#xff0c;我一直致力于通过博客、公众号等平台&#xff0c;与大家分享关于Linux、K8S、Docker、网络、服务器以及OpenStack等前沿技术的见解与心得。然而&#xff0c;随着交流的深入&#xff0c;我…...

基于python+django+vue的旅游景点数据分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…...

C++简单缓冲区类设计

目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中&#xff0c;设计静态和动态缓冲区类时&#xff0c;需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…...

MySQL 数据库

1. MySQL 数据库的基础知识 这一部分将带你了解 MySQL 数据库的核心概念。无论你是初学者还是想要巩固基础&#xff0c;这部分内容将帮助你打下扎实的基础。 数据库的定义与作用&#xff1a;什么是数据库&#xff1f;MySQL 与其他数据库系统的比较。MySQL 安装与配置&#xf…...

基于单片机的智能校园照明系统

由于校园用电量较大&#xff0c;本设计可以根据实际环境情况的改变&#xff0c;实现实时照明的控制。本设计以单片机芯片为控制芯片&#xff0c;热释电传感器采集教室中学生出入的信息&#xff0c;并把信息传递给单片机芯片&#xff0c;单片机芯片根据传感器传递过来的信息来控…...

高性能分布式搜索引擎Elasticsearch详解

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…...

连锁收银系统的五大功能 选择开源收银系统三要素

连锁收银系统的五大功能&#xff0c;很多新手是不清楚的&#xff0c;老手也只是知道一些大概&#xff0c;今天&#xff0c;商淘云为大家分享收银系统的五大功能&#xff0c;尤其是第五个&#xff0c;大部分人不清楚&#xff0c;有的企业前面选了不合适的收银系统&#xff0c;导…...

虚幻引擎解决构建问题

1.Intermediate 文件夹 在 Unreal Engine中&#xff0c;Intermediate 文件夹扮演着构建过程中的临时存储角色。具体来说&#xff0c;Intermediate 文件夹用于存放在编译和构建项目过程中生成的中间文件&#xff0c;这些文件包括但不限于&#xff1a; 编译中间文件&#xff1a;…...

【CH32V307实战】4P OLED屏I2C驱动移植与快速显示指南

1. CH32V307与4P OLED屏的硬件连接指南 第一次拿到CH32V307开发板和4P OLED屏时&#xff0c;最让我头疼的就是接线问题。这种4线制OLED&#xff08;通常标注为4P或4PIN&#xff09;相比传统的7线制简化了不少&#xff0c;但引脚定义各家厂商可能略有差异。经过多次实测&#xf…...

婚礼技能库:用开源协作与项目管理思维打造个性化婚礼

1. 项目概述&#xff1a;婚礼技能库的诞生与价值婚礼&#xff0c;对大多数人来说&#xff0c;是人生中为数不多的、需要同时扮演项目经理、创意总监、财务主管和情感联络员的高压事件。筹备过程琐碎繁杂&#xff0c;从场地布置、流程设计&#xff0c;到妆发造型、摄影摄像&…...

qmcdump终极指南:三步解锁QQ音乐加密音频文件

qmcdump终极指南&#xff1a;三步解锁QQ音乐加密音频文件 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 还在为QQ音乐下…...

TPU柔性材料3D打印GoPro车载支架:从减震原理到实战拍摄全指南

1. 项目概述与设计思路我一直对第一人称视角&#xff08;FPV&#xff09;拍摄很着迷&#xff0c;尤其是那种能贴着地面、模拟小车视角疾驰的画面&#xff0c;动态感和沉浸感是手持拍摄无法比拟的。市面上的运动相机车载支架要么是硬连接&#xff0c;颠簸起来画面抖动得厉害&…...

番茄小说下载器:打造属于你的个人数字图书馆终极指南

番茄小说下载器&#xff1a;打造属于你的个人数字图书馆终极指南 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否曾经遇到过这样的场景&#xff1f;深夜追更小说时网络突然断线&…...

PCL2启动器离线登录按钮消失?5分钟快速修复指南

PCL2启动器离线登录按钮消失&#xff1f;5分钟快速修复指南 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher&#xff08;PCL&#xff09;。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 你是否遇到过PCL2启动器离线登录按钮突然消失的困扰&#xff1…...

Pandrator:基于Python的自动化内容生成与数据转换工具实践

1. 项目概述与核心价值最近在折腾一些自动化数据处理和内容生成的工作流&#xff0c;发现了一个挺有意思的开源项目&#xff0c;叫Pandrator。乍一看这个名字&#xff0c;可能会联想到“潘多拉”和“生成器”的结合&#xff0c;实际上它也确实是一个功能强大的内容转换与生成工…...

PromptCraft-Robotics:基于LLM的机器人任务规划与安全控制实践

1. 项目概述与核心价值最近在机器人编程和AI应用领域&#xff0c;一个名为“PromptCraft-Robotics”的项目在开发者社区里引起了不小的讨论。这个项目由微软开源&#xff0c;其核心目标直指一个困扰许多开发者和研究者的痛点&#xff1a;如何让大型语言模型&#xff08;LLM&…...

开源大语言模型实战指南:从部署到微调的全流程解析

1. 项目概述&#xff1a;一个为开源大语言模型而生的知识库最近在折腾各种开源大语言模型&#xff08;LLM&#xff09;的朋友&#xff0c;估计都遇到过类似的烦恼&#xff1a;模型太多了&#xff0c;从Meta的Llama系列、微软的Phi&#xff0c;到国内的一众优秀模型&#xff0c;…...

从开源项目到个人监控工具:clawmonitor的设计、部署与实战

1. 项目概述&#xff1a;从开源项目到个人监控工具的蜕变最近在折腾一个挺有意思的东西&#xff0c;叫clawmonitor。这名字乍一听有点怪&#xff0c;像是“爪子监控器”&#xff0c;但如果你对开源社区&#xff0c;特别是自动驾驶辅助系统领域有所关注&#xff0c;可能会觉得眼…...