redisredis哈希hash键值对集合操作(哈希hash键值对集合简介|查询操作|增加操作|修改操作)(代码片段)

韩曙亮 韩曙亮     2023-03-04     675

关键词:

文章目录





一、哈希 Hash 键值对集合



Redis 中的 Hash 数据 是一个 键值对集合 , 类似于 Java 中的 Map 集合 ;


Hash 数据底层数据结构是 :

  • 压缩列表 ZipList : Hash 中的 键值对 长度较短时 使用 压缩列表 ;
  • 哈希表 HashTable : Hash 中的 键值对 长度较长时 使用 哈希表 ;

Redis 中存储对象的方式 :

  • 存储序列化之后的数据 : 将 对象 序列化为 json 字符串 , 然后 存储到 Redis 键值对 的 Value 值中 ;

    • 如果要修改对象中的数据 , 要 先将对象反序列化 , 然后修改对象中的值 , 最后将对象序列化并保存 ;
  • 直接存储对象字段 : 将每个对象的字段拆开 , 进行分开存储 , 非常繁琐 ;

    • 每个 Redis 的 键 都保存一个 对象字段 , 一个对象可能要消耗多个 键 ;
  • 使用 Hash 存储 ( 推荐 ) : 将 对象 的 字段 , 都以 Hash 的 键值对 形式存储起来 , 可以直接访问修改对应的对象字段 ;

    • 每个 Redis 键 保存一个对象 , 对象的属性 由 Hash 键值对 保存 ;

键值对区分 : Redis 中的键值对 一般称为 Key=Value , 在 Hash 中的键值对 一般称为 Field=Value ;





二、查询操作




1、Redis 中查询 Hash 键值对数据


执行

hget student name

命令 , 可以 获取 Redis 中 student 键 对应的 Hash 数据中的 name 键 对应的 值 ;


代码示例 :

127.0.0.1:6379> hset student name Tom
(integer) 1
127.0.0.1:6379> get student
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> hget student
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget student name
"Tom"
127.0.0.1:6379>

注意 : 读取该 Hash 的 name=Tom 键值对 时 , 需要使用 hget student name 命令 ;


2、查询 Hash 键是否存在


执行

hexists student name

命令 , 可以 获取 Redis 中 student 键 对应的 Hash 数据中的 name 键 是否存在 ;

  • 如果存在 , 返回 1 ;
  • 如果不存在 , 返回 0 ;

代码示例 :

127.0.0.1:6379> hexists student name
(integer) 1
127.0.0.1:6379> hexists student name1
(integer) 0
127.0.0.1:6379>


3、查询 Hash 中所有的键 Field


执行

hkeys student

命令 , 可以 获取 Redis 中 student 键 对应的 Hash 数据中的 所有 键 Field ;


代码示例 :

127.0.0.1:6379> hkeys student
1) "name"
2) "age"
127.0.0.1:6379>


4、查询 Hash 中所有的值


执行

hvals student

命令 , 可以 获取 Redis 中 student 键 对应的 Hash 数据中的 所有 值 ;


代码示例 :

127.0.0.1:6379>
127.0.0.1:6379> hvals student
1) "Tom"
2) "18"
127.0.0.1:6379>





三、增加操作




1、Redis 中插入 Hash 键值对数据


执行

hset student name Tom

命令 , 可以 给 键 student 中的 Hash 数据值 添加 name=Tom 键值对 ;


代码示例 :Redis 的 student 键值 插入 name=Tom 键值对 ;

127.0.0.1:6379> hset student name Tom
(integer) 1
127.0.0.1:6379> get student
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> hget student
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget student name
"Tom"
127.0.0.1:6379>

注意 : 读取该 Hash 的 name=Tom 键值对 时 , 需要使用 hget student name 命令 ;


2、批量插入 Hash 键值对数据


执行

hmset student name Tom age 18

命令 , 可以 给 键 student 中的 Hash 数据值 添加 name=Tom 和 age=18 键值对 ;


代码示例 :Redis 的 student 键值 插入 name=Tom 和 age=18 键值对 ;

127.0.0.1:6379> hmset student name Tom age 18
OK
127.0.0.1:6379> hget student age
"18"
127.0.0.1:6379> hget student name
"Tom"
127.0.0.1:6379>





四、修改操作




1、Hash 中 Field 键对应值增减值


执行

hincrby student age -5

命令 , 可以 给 键 student 中的 Hash 数据值 age=18 数据中的值 -5 操作 ;


代码示例 :

127.0.0.1:6379>
127.0.0.1:6379> hincrby student age -5
(integer) 13
127.0.0.1:6379> hvals student
1) "Tom"
2) "13"
127.0.0.1:6379>


2、设置 Hash 中 Field 键对应值


执行

hsetnx student weight 85

命令 , 可以 在 键 student 中的 Hash 数据值 如果不存在 weight 键 , 则 添加 weight=85 键值对数据 ;


代码示例 :

127.0.0.1:6379>
127.0.0.1:6379> hsetnx student weight 85
(integer) 1
127.0.0.1:6379> hkeys student
1) "name"
2) "age"
3) "weight"
127.0.0.1:6379>

在哈希中条件包含键值对[关闭]

】在哈希中条件包含键值对[关闭]【英文标题】:Conditionalinclusionofakey-valuepairinahash[closed]【发布时间】:2012-12-2000:03:14【问题描述】:有人可以帮我缩短以下方法吗?我从这个开始,我很喜欢:defself.some_hash"foo"=>"bar"end现在我... 查看详情

redis(代码片段)

Redis什么是RedisRedis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的API。Redis通常被称为数据结构服务器,因为值(value)... 查看详情

redis五大常见的数据类型之hash

...富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。今天我们就来详细的聊聊Redis这五大常见的数据类型之一​​Hash​​;结构类型结构存储的值结构读写能力​​Hash... 查看详情

perl怎么增加hash键值对

就是哈希之前已经定义了,然后现在需要再增加一些键值对,怎么输入?比如通过某个循环得到一个key和一个value,怎么把这一对加进去?另外最好再回答下怎么对hash的values进行排序,得到的结果存进另一个数组呃,没大明白,... 查看详情

redisredis数据库安装配置访问(redis简介|下载redis安装包|安装redis数据库|命令行访问redis|使用可视化工具访问redis)(代码片段)

文章目录一、Redis数据库简介二、Redis数据库操作场景实例三、下载Redis安装包1、Windows安装包下载2、Linux安装包下载四、Windows中安装Redis五、Windows中配置Redis1、配置访问密码2、重启Redis服务六、命令行访问Redis1、打开Redis客户端2... 查看详情

redisredis字符串数据操作②(多个数据操作|值的范围操作|值的时间操作|简单动态字符)(代码片段)

文章目录一、多个数据操作1、设置多个键值对2、获取多个键对应的值3、当键不存在时设置多个键值对二、值的范围操作1、获取值的范围内容2、设置值的范围内容三、值的时间操作1、设置键值对同时设置过期时间2、设置新值... 查看详情

hashmaphashtableconcurrenthashmap详解

...索引,Entry对象则是数组中对应的值。Key通过Hash算法得到哈希码(HashCode),通过哈希码与数组中的索引对应。因此所有的键值对Hash表都是无序储存的。键值对的查找过程:(hashCode()计算出索引,通过键的equals方法找到对应的... 查看详情

如果键存在,向哈希值添加一些东西?

】如果键存在,向哈希值添加一些东西?【英文标题】:Addsomethingtohashvalueifkeyexists?【发布时间】:2014-05-0202:11:10【问题描述】:我在Ruby中有一个哈希:hash=Hash.new里面有一些键值对,比如:hash[1]="One"hash[2]="Two"如果哈希包含一个... 查看详情

map

...Map集合中常用子类   1.HashMap集合介绍     底层是哈希表结构     无序的   2.LinkedHashMap集合的介绍     底层是链表+哈希表结构     有序的   3.Map接口中通用的方法     增:publicput(K键,V值)... 查看详情

哈希表

namespace_02Hashtable{classProgram{staticvoidMain(string[]args){//哈希表类似于字典,在查找元素的时候很快//键值对是根据算法算出来的,键根据算法找到值Hashtablehash=newHashtable();//通过键值来添加hash.Add("撒旦发个","第三个");//都是object类型,... 查看详情

常见集合类

...复杂度为O(n),指定位置插入数据复杂度为O(1)。 2Map2.1哈希表2.1.1哈希表定义 哈希表本质是一个数组,数组中每一个元素称为一个箱子,箱子中存放的是键值对。哈希表的存储过程如下:根据key结合hashCode方法计算它的哈... 查看详情

面试题

...2.面试题:当两个对象的hashCode相等时会怎么样?会产生哈希碰撞,若key值内容相同则替换旧的value.不然连接到链表后面,链表长度超过阈值8就转换为红黑树存储。3.面试题:何时发生哈希碰撞和什么是哈希碰撞,如何解决哈希碰... 查看详情

map集合:hashmap、treemap

参考技术AHashMap是基于哈希表的Map接口的非同步实现。实现HashMap对数据的操作,允许有一个null键,多个null值。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。数组+链表结构,新建一个HashMap的时候,就会初始化一... 查看详情

冷知识:数据结构如何造就redis的快?

...持五种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、SortedSet(有序集合,也叫Zset)。键与值构成一个键值对,即key-value对,key-value对是Redis中数据存... 查看详情

hashmap源码详细分析(jdk1.8)

...于散列算法实现。HashMap允许null键和null值,在计算哈键的哈希值时,null键哈希值为0。HashMap并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序可能会发生变化。另外,需要注意的是,HashMap是非线程安全类,在... 查看详情

hashsethastabledictionaryconcurrentdictionary区别

1.HashTable  哈希表(HashTable)表示键/值对的集合。在.NETFramework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于k... 查看详情

redis数据操作笔记

...符串注意:键不能重复,值的类型分为五种:字符串string哈希hash列表list集合set有序集合zset一.stringstring是redis最基本的类型,最大能存储512MB数据,string类型是二进制安全的,可以存储任何数据,比如数字、图片等。[redis中SDS的... 查看详情

ios字典的实现原理

...tforKey:(id)aKey;2.Objective-C中的字典NSDictionary底层其实是一个哈希表,实际上绝大多数语言中字典都通过哈希表实现.二、哈希的原理1.根据key计算出它的哈希值h。2.假设箱子的个数为n,那么这个键值对应该放在第(h%n)个箱子中。3.如... 查看详情