当前位置: 首页 > 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;…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...