Redis 哈希表

python 操作Redis 哈希表 哈希表是一种数据结构,无论有多少键值对,查询时间都不会变。Redis中的哈希表可以保存43亿个键值对。 一、案例:Redis记录用户在线状态 如果使用字符串记录用户在线状态,那么有多少个用户在线,就有多少个Key。如果在绑定用户积分,那么就需要更多的key做更多的操作。所以我们引入了哈希表,使用哈希表只需要一个key即可记录用户的在线状态,如果要记录用户的积分信息,只需要再多一个key。 impo... 阅读详情

前言

redis 哈希表相关操作命令

设值操作

hset 命令

hset hash field value 将 hash 中的 field 的值设置为 value,如果 hash 不存在,就会执行新增操作,如果已经存在,那就会覆盖原来的旧值。

127.0.0.1:6379> hset website google "www.google.cn"
(integer) 1
127.0.0.1:6379> hget website google
"www.google.cn"
127.0.0.1:6379> hset website google "www.gg.cm"
(integer) 0
127.0.0.1:6379> hget website google
"www.gg.cm"

hsetnx 命令

hsetnx hash field value 表示只有当 field 不存在时,才会设置为 value。如果已经存在,则不会设置新值。

127.0.0.1:6379> hsetnx database key-value-store redis
(integer) 1
127.0.0.1:6379> hget database key-value-store
"redis"
127.0.0.1:6379> hsetnx database key-value-store Redis
(integer) 0
127.0.0.1:6379> hget database key-value-store
"redis"

hget 命令

hget hash field 返回给定的 field 的值,如果 field 不存在,返回 (nil)。

127.0.0.1:6379> hset homepage redis redis.com
(integer) 1
127.0.0.1:6379> hget homepage reids
(nil)
127.0.0.1:6379> hget homepage redis
"redis.com"

hexists 命令

hexists hash field 查看对应的 field 是否存在。

127.0.0.1:6379> hexists phone iphone
(integer) 0
127.0.0.1:6379> hset phone iphone iphone 14 pro max
(error) ERR wrong number of arguments for 'hset' command
127.0.0.1:6379> hset phone iphone "iphone 14 pro max"
(integer) 1
127.0.0.1:6379> hexists phone iphone
(integer) 1

hdel 命令

hdel key field ... 删除哈希表中一个或者多个指定的 field,如果不存在则忽略。

127.0.0.1:6379> hset abbr a apple b banana c cat d dog
(integer) 4
127.0.0.1:6379> hgetall
(error) ERR wrong number of arguments for 'hgetall' command
127.0.0.1:6379> hgetall abbr
1) "a"
2) "apple"
3) "b"
4) "banana"
5) "c"
6) "cat"
7) "d"
8) "dog"
127.0.0.1:6379> hdel abbr a
(integer) 1
127.0.0.1:6379> hdel abbr not-exists-field
(integer) 0
127.0.0.1:6379> hdel abbr b c
(integer) 2
127.0.0.1:6379> hgetall abbr
1) "d"
2) "dog"

hlen 命令

hlen key 返回哈希表中 key 的数量。

127.0.0.1:6379> hset db redis redis.com mysql mysql.com
(integer) 2
127.0.0.1:6379> hlen db
(integer) 2
127.0.0.1:6379> hset db mongodb mongodb.org
(integer) 1
127.0.0.1:6379> hlen db
(integer) 3

hstrlen 命令

hstrlen key field 返回指定 hash 表中对应 field 的值的长度,如果不存在,返回 0。

127.0.0.1:6379> hmset myhash f1 helloworld f2 99 f3 -256
OK
127.0.0.1:6379> hstrlen myhash f1
(integer) 10
127.0.0.1:6379> hstrlen myhash f2
(integer) 2
127.0.0.1:6379> hstrlen myhash f3
(integer) 4

hincrby 命令

hincrby key field increment 在指定的 field 上加上 increment,可以为负数。如果 field 不存在,则先初始化值为 0,再加上 increment。

127.0.0.1:6379> hexists counter page_view
(integer) 0
127.0.0.1:6379> hincrby counter page_view 200
(integer) 200
127.0.0.1:6379> hincrby counter page_view 2
(integer) 202
127.0.0.1:6379> hget counter page_view
"202"

// 为负数时
127.0.0.1:6379> hincrby counter page_view -30
(integer) 172
127.0.0.1:6379> hget counter page_view
"172"

// 对字符串操作
127.0.0.1:6379> hset myhash string hello,world
(integer) 1
127.0.0.1:6379> hget myhash string
"hello,world"
127.0.0.1:6379> hincrby myhash string 1
(error) ERR hash value is not an integer

hincrbyfloat 命令

hincrbyfloat key field increment 在指定的哈希表 key 中 field 加上浮点数 increment。如果 field 不存在,设置为 0,然后再执行加法操作。

127.0.0.1:6379> hset mykey filed 10.50
(integer) 1
127.0.0.1:6379> hset mykey field 5.0e3
(integer) 1
127.0.0.1:6379> hincrbyfloat mykey field 2.0e2
"5200"

// 不存在的键执行
127.0.0.1:6379> exists price
(integer) 0
127.0.0.1:6379> hincrbyfloat price milk 3.5
"3.5"
127.0.0.1:6379> hgetall price
1) "milk"
2) "3.5"

// 对不存在的域执行
127.0.0.1:6379> hgetall price
1) "milk"
2) "3.5"
127.0.0.1:6379> hincrbyfloat price coffee 4.5
"4.5"
127.0.0.1:6379> hgetall price
1) "milk"
2) "3.5"
3) "coffee"
4) "4.5"

hmset 命令

hmset key field value 将多个键值对设置到 key 中,如果 key 已存在,则会覆盖原来的域。

127.0.0.1:6379> hmset website google www.google.com yahoo www.yahoo.com
OK
127.0.0.1:6379> hget websit google
(nil)
127.0.0.1:6379> hget websit yahoo
(nil)
127.0.0.1:6379> hget website google
"www.google.com"
127.0.0.1:6379> hget website yahoo
"www.yahoo.com"

hmget 命令

hmget key field 返回 key 中一个或者多个给定的 field,如果对应的 field 不存在,返回 nil,如果 key 不存在,返回 nil。

127.0.0.1:6379> hmget pet dog
1) (nil)
127.0.0.1:6379> hmset pet dog "one one" cat "maomao"
OK
127.0.0.1:6379> hmget pet dog cat fake_pet
1) "one one"
2) "maomao"
3) (nil)

hkeys 命令

hkeys key 返回 key 中所有的域,如果 key 不存在时,返回一个空表

127.0.0.1:6379> hkeys website
1) "google"
2) "yahoo"
127.0.0.1:6379> exists fake_key
(integer) 0
127.0.0.1:6379> hkeys fake_key
(empty array)

hvals 命令

hvals key 返回 key 对应的所有值,当不存在时,返回一个空表。

127.0.0.1:6379> hvals website
1) "www.google.com"
2) "www.yahoo.com"
127.0.0.1:6379> exists not_exists
(integer) 0
127.0.0.1:6379> hvals not_exists
(empty array)

hgetall 命令

hgetall key 返回 key 中所有的域和值,不存在返回空表。

127.0.0.1:6379> hgetall people
(empty array)
127.0.0.1:6379> hset people jack "Jack Sparrow"
(integer) 1
127.0.0.1:6379> hset people gump "Forrest Gump"
(integer) 1
127.0.0.1:6379> hgetall people
1) "jack"
2) "Jack Sparrow"
3) "gump"
4) "Forrest Gump"
Amos实战:如何用Bootstrap法检验中介效应?附完整操作步骤 本文详细介绍了如何使用Amos软件通过Bootstrap法检验中介效应,包括模型设定、参数配置和结果解读。Bootstrap方法因其不依赖正态分布假设、统计功效高等优势,成为中介效应分析的首选方法。文章提供了完整的操作步骤和实用建议,帮助研究者准确评估变量间的中介作用机制。 阅读详情

相关推荐

华为od统一考试B卷【宜居星球改造计划】Java&Go 实现

XXX年,人类通过对火星的大气进行宜居改造分析,使得火星已在理论上具备人类宜居的条件,由于技术原因,无法一次性将火星大气全部改造,只能通过局部处理形式,假设将火星待改造的区域为row * column的网格每个网格有3个值,宜居区、可改造区、死亡区,使用YES、NO、NA代替,YES表示该网格已经完成大气改造,NO表示该网格未进行改造,后期可进行改造,NA表示死亡区,不作为判断是否改造完成的宜居,无法穿过 初始化下,该区域可能存在多个宜居区,并且每个宜居区能同时在每个太阳日单位向上下左右四个方向的相邻格子进

MISAYAONE的博客 1万+

Redis实战】认识Redis中的全局哈希表

一谈到Redis,马上能想到的就是:“快”,那么,Redis之所以快,一方面是因为Redis的所有操作都在内存中完成,内存操作本身就很快,另一方面就要归功于它的数据结构了,高效的数据结构是Redis快的基石。当然,提到哈希表,肯定少不了哈希冲突的问题,Redis中采用的方式和Java中的HashMap一样,都是链式哈希的方式,所以一旦冲突变多,就会导致链表过长,最终退化为。中,既然保存的是指针,所以也就能保存任何类型的数据结构(String,Hash,List,Set)的方式,实际上Redis每次在进行。.

自律使我自由 1532

气体设备目标检测数据集.zip

数据集介绍:气体设备目标检测数据集一、基础信息数据集名称:气体设备目标检测数据集图片数量:训练集:171张图片验证集:57张图片测试集:40张图片总计:268张图片分类类别:球阀、锅炉、锅炉、燃烧器、丁烷、燃烧器、保险旋塞、燃气加热器、燃气灶、软管、I、液化气罐、仪表、储罐、阀门(基于原始分类信息,包含常见气体相关设备)。标注格式:YOLO格式,包含边界框坐标和类别索引,适用于目标检测任务。数据格式:来源于实际场景的图片数据。二、适用场景工业气体安全监控系统开发:用于构建AI模型自动检测和识别工厂或家庭环境中的气体设备,如阀门、锅炉和液化气罐,支持泄漏风险预警和设备状态评估。能源与公用事业管理:在燃气站、发电厂等设施中,实现设备自动化巡检和异常检测,提升运营效率。制造与建筑安全应用:在工业生产线或建筑工地,检测设备(如仪表、储罐)的安全合规性,辅助风险评估和预防性维护。三、数据集优势类别覆盖全面:包含15种气体相关设备类别,如球阀、燃气灶、液化气罐等,覆盖常见工业和生活场景,提升模型的泛化能力和识别多样性。标注实用高效:YOLO格式标注兼容主流目标检测框架(如YOLO系列),便于快速集成和训练,支持高效模型开发。真实场景适配:数据来源于实际应用环境,适用于工业监控、安全系统等现实任务,具有较强的实用性和迁移价值。

Redis】深入探索 Redis 的数据类型 —— 哈希表 Hash

在构建和优化应用程序时,数据缓存是提高性能和降低数据库负载的关键策略之一。Redis(Remote Dictionary Server)是一个高性能的内存数据库,广泛用于数据缓存和快速数据访问。其中,哈希类型(Hash)是 Redis 中的一种强大数据结构,通常用于存储对象、映射关系和键值对等数据。在本文中,我们将深入探讨Redis中的哈希类型。我们将从哈希类型的基本命令入手,逐步介绍它们的使用方法、内部编码方式以及在实际应用场景中的应用。

qq_61635026的博客 2667

Redis数据结构篇-全局Hash表

那么为了实现链式哈希, Redis 在每个 dictEntry 的结构设计中,除了包含指向键和值的指针,还包含了指向下一个哈希项的指针。当然,当字符串大于 44 字节时,SDS 的数据量就开始变多了,Redis 就不再把 SDS 和 RedisObject 布局在一起了,而是会给 SDS 分配独立的空间,并用指针指向 SDS 结构。一方面,当保存的是 Long 类型整数时,RedisObject 中的指针就直接赋值为整数数据了,这样就不用额外的指针再指向整数了,节省了指针的空间开销。

meser88的博客 1344

Redis数据结构」哈希表(Dict)

哈希表中的每一个key 都是独一无二的,程序可以根据 key 查找到与之关联的 value,或者通过 key 来更新 value,又或者根据 key 来删除整个 key-value等等。哈希表优点在于,它能以 O(1) 的复杂度快速查询数据。怎么做到的呢?将 key 通过 Hash 函数的计算,就能定位数据在表中的位置,因为哈希表实际上是数组,所以可以通过索引值快速查询到数据。但是存在的风险也是有,在哈希表大小固定的情况下,随着数据不断增多,那么哈希冲突的可能性也会越高。解决哈希冲突的方式,有很多种。

frozenpenguin的博客 3999

Redis哈希表结构

redis中的hashtable(哈希表)是一种高效的键值对存储结构,主要用于实现redis的字典类型,接下来就来讲解一下hashtable(redis版本6.2.18)的底层实现。在redis的hashtable实现中,哈希冲突发生在两个或多个不同的键(key)被哈希函数映射到同一个哈希桶(bucket)的情况。1、扩容条件:当负载因子(哈希表已使用的节点数量/哈希表大小)> 1时,且服务器没有执行RDB快照或AOF重写。1、哈希函数的输出空间(哈希值范围)通常小于输入空间(可能的键数量)

qq_45795794的博客 1544

Redis散列表(hash)使用

Redis的散列(hash)表会将一个键和一个散列表在数据库中关联起来,用户可以在散列表中为任意多个字设置值。与字符键一样,散列的字段和值既可以是文本数据,可以是二进制数据。 通过使用散列表,用户可以把相关联的多项数据存储到同一个散列里面,以便对这些数据进行管理,或者针对他们进行批量操作。 与之前使用字符串键存储文章数据的做法相比,使用散列存储文章数据只需要在数据库里面创建一个键,并且因为散列的字段名不需添加任何前缀,所以他们可以直接反映字段值存储的是什么数据。Redis为散列舰提供了一

蜗牛学习笔记 4881

Redis数据结构总结-哈希表

Hash 表是一种非常关键的数据结构。比如在数据库系统中,Hash 表被用来辅助 SQL 查询。而对于 Redis 键值数据库来说,Hash 表既是键值对中的一种值类型,同时,Redis 也使用一个全局 Hash 表来保存所有的键值对,从而既满足应用存取 Hash 结构数据需求,又能提供快速查询功能。Hash 表应用如此广泛的一个重要原因,就是从理论上来说,它能以 O(1) 的复杂度快速查询数据。

左灯右行的爱情 1217

什么是Redis哈希表

Redis哈希表是一种高效、灵活的数据结构,广泛用于Redis的各种数据类型和操作。理解哈希表的内部机制和工作原理,对于优化Redis性能和设计高效的数据结构至关重要。

专业深耕,技术前沿 495

Redis 哈希表核心机制:扩缩容与渐进式 Rehash

Redis哈希表采用“数组+链表”结构,通过哈希函数和拉链法解决冲突。动态扩缩容机制根据负载因子调整表大小,采用渐进式rehash避免阻塞主线程,迁移过程分步执行。源码分析展示了dictEntry、dictht等核心结构体,以及扩容触发条件判断逻辑。

平平无奇的小甜菜 1274

Redis 数据结构之哈希表

Redis 的字典底层使用哈希表实现,说到哈希表大家应该能联想到 HashMap 或者是 Hashtable,也应该能联想到 key、value 的存储形式,以及哈希表扩容,哈希算法等知识点。那么 Redis 字典是否也是通过这种形式实现的呢?带着这些疑问下面我们就来了解一下 Redis 中的哈希表。 一、 哈希表结构 table:用于存储键值对 size:表示哈希表的数组大小 used:表示...

点滴记录 5294

Redis100篇 - Redis哈希表为什么快 扩容和缩容机制详解

Redis哈希表高效的关键在于其精心设计的底层结构、渐进式rehash机制和负载因子控制。哈希表使用链地址法解决冲突,并通过SipHash算法保证均匀分布。当负载因子超过阈值时,Redis会触发渐进式扩容/缩容,分步迁移数据到新哈希表,避免服务中断。核心优化包括:快速索引计算(位运算替代取模)、双哈希表设计(实现平滑rehash)以及动态调整大小(2的幂次扩容)。这些特性共同确保了Redis哈希表在O(1)时间复杂度下的稳定性能。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

redis数据结构—哈希表

redis的底层数据结构——hash table

欢迎指正、交流 3794

[Redis] 哈希表的Rehash机制

哈希表的完整结构 , 因为他是多个哈希一层层嵌套的 , 所以会是这样的结构 触发rehash的时机 字典类型容量变化过程叫做rehash,需要满足一定的条件才能触发扩容机制服务器当前没有进行BGWRITEAOF或者BGSAVE命令,且当前键值对个数超过一维数组的大小,才会触发扩容。 如果当前键值对个数超过一维数组大小的五倍,无论是否在进行BGWRITEAOF或者BGSAVE命令,都会强...

程序员老狼专注开发aigc或客服系统应用 1102

Redis底层详解(一) 哈希表和字典

一文读懂哈希表

英雄哪里出来 33万+

Redis 哈希表结构详解

Redis哈希表实现基于链表法解决冲突,并采用渐进式 rehash策略。其核心结构体包括dictEntrydictht和dict,三者协作实现高效的键值对存储。结构体核心作用关键字段dictEntry存储键值对,解决哈希冲突keyvnextdictht管理哈希桶数组和统计信息tablesizesizemaskdict控制渐进式 rehash 和多表协作ht[2]rehashidx•哈希计算:通过快速定位桶。•冲突解决:链表法,同一桶内节点用next指针连接。•渐进式 rehash。

batman_curry的博客 1364

Redis哈希表的理解

Hash表使用

weixin_43743711的博客 255

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表

zyh20050430的博客 1130

redis 系列——3、redis 哈希表原理

概述 上篇博客我简单整理了 redis 中链表的实现原理。本篇博客我打算就哈希类型简单整理一下。 redis 数据类型 redis 有以下五种常用的数据类型: String:字符串类型 Hash:哈希类型 list:链表类型 set:集合类型 zSet:有序集合类型 1、哈希表 redis 哈希表使用头文件 dict.h 中的 dictht 接口定义: typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小

meiyongdesan的博客 710

揭秘Redis哈希表底层实现

因为在进行渐进式 rehash 的过程中, 字典会同时使用 ht[0] 和 ht[1] 两个哈希表, 所以在渐进式 rehash 进行期间, 字典的删除(delete)、查找(find)、更新(update)等操作会在两个哈希表上进行: 比如说, 要在字典里面查找一个键的话, 程序会先在 ht[0] 里面进行查找, 如果没找到的话, 就会继续到 ht[1] 里面进行查找, 诸如此类。每个 dictType 结构保存了一簇用于操作特定类型键值对的函数, Redis 会为用途不同的字典设置不同的类型特定函数。

newbietao的博客 1534
上一篇: Redis 字符串命令
yutanbo123
博客等级 码龄16年 2粉丝 · 27原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值