[转帖]redis数据结构详解之Hash(四)

redis,数据结构,详解,hash · 浏览次数 : 0

小编点评

## Hash数据结构的理解与操作 Hash数据结构是一种键值对的映射,它将键映射到相应的值。由于键和值之间没有直接的关联,因此查找某个元素的速度与直接访问该元素的速度无关。 **Hash的实现方式:** 1. **哈希函数:** 将键转换成一个唯一的索引值。常用的哈希函数包括 MD5、SHA1 和 SHA256。 2. **散列数组:** 基于哈希函数,将所有键映射到散列数组中的某个位置。散列数组的元素之间之间有间隔,方便快速查找某个元素。 3. **哈希表:** Hash表是一个包含键值对的链表结构。键值对被存储在散列数组中的对应位置。 **Hash的常用操作:** * **hset()**: 设置键值对,如果键不存在,创建键。 * **hget()**: 从键值对中获取指定字段的值。 * **hdel()**: 从键值对中删除指定字段的值。 * **hmset()**: 批量设置键值对。 * **hmget()**: 批量获取键值对。 * **hkeys()**: 获取所有键的集合。 * **hvals()**: 获取所有值的集合。 **Hash的示例:** ```python # 创建一个哈希表 hash_table = redis.Hash() # 设置键值对 hash_table.set('name', 'Jim') # 获取指定键的值 name = hash_table.get('name') # 删除键值对 hash_table.delete('name') # 批量设置键值对 hash_table.hmset({ 'age': 31, 'issingle': False }) # 批量获取键值对 results = hash_table.hmget(['name', 'age']) # 打印结果 print(results) ``` **结论:** Hash数据结构是一种非常高效的数据结构,可以用来存储和检索数据。通过使用哈希函数和散列数组,Hash可以快速找到数据。

正文

https://www.cnblogs.com/Alex80/p/5320091.html

 

序言

Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个元素,所耗费的时间都是一样的,但是数组中的索引却没有实际意义,他只是一个位置而已。而我们在查找某个元素时,一般都会使用有意义的字段来做索引,这就产生啦dictionary。其实dictionary的实现,就是让key跟下标索引有一定的关系,所实现的,让他的查找算法复杂度变为常数O(1)。

扯完上面的蛋,我来说下今天要说redis中的Hash命令,如果你不懂redis,就从第一篇看跟着来敲一边,别懒,懒啦别人装逼你就装不了啦,哈哈。

redis中hash对单个key/value操作的命令演示

redis中hash的添加命令hset,如果key不存在,创建key,存在,则覆盖原有值

redis 127.0.0.1:6379>hset myhash name Jim  ----给key为myset的键值设置键为name值为Jim

redis中hash的查看命令hget

redis 127.0.0.1:6379>hget myhash name   ----输出: "Jim",获取key为myset,键为name的value

redis 127.0.0.1:6379>hset myhash name zlh   ----覆盖原有值,值改为zlh替换Jim 

redis 127.0.0.1:6379>hget myhash name   ---输出:"zlh"

redis中hash的获取key包含的field数量的命令hlen

redis 127.0.0.1:6379>hset myhash age 31 --- 设置key为myset键为age的value=31

redis 127.0.0.1:6379>hlen myhash   ---输出为2,key为myset的field数量为2

redis中判断指定key中指定field是否存在的命令hexists,存在返回1,不存在返回0

redis 127.0.0.1:6379>hexists myhash name   ---返回1,说明存在

redis 127.0.0.1:6379>hexists myhash name1  ---返回0,说明不存在

redis中hash删除命令hdel,删除一个或多个指定的字段

redis 127.0.0.1:6379>hset myhash sex nan   ----添加数据

redis 127.0.0.1:6379>hset myhash issingle yes  ----添加数据

redis 127.0.0.1:6379>hset myhash hobby sports  ----添加数据

redis 127.0.0.1:6379>hdel myhash hobby  ----删除单个数据,filed为hobby的数据

redis 127.0.0.1:6379>hdel myhash issingle sex   ---删除多个数据,filed为issingle和sex的两条数据

redis中hash如果key或field不存在插入有效,否则不采取操作的命令hsetnx

redis 127.0.0.1:6379>hsetnx myhash sex nan   ---设置myhash,field为sex的value为nan,成功返回1,因为原来不存在sex这个字段

redis 127.0.0.1:6379>hsetnx myhash sex nv   ---设置myhash,field为sex的value为nv,不成功返回0,因为原来存在sex这个字段并且有值

redis 127.0.0.1:6379>hget myhash sex   --输出"nan"

redis中hash中的value为数值时操作增减的命令hincrby

redis 127.0.0.1:6379>del myhash  ---删除该键

redis 127.0.0.1:6379>hset myhash age 31  ---设置key为myhash的键为age值为31

redis 127.0.0.1:6379>hincrby myhash age 10   ---给key为myhash,键为age的值加10,输出结果为41

redis 127.0.0.1:6379>hincrby myhash age -10   ---给key为myhash,键为age的值减去10,输出结果为31

redis中hash批量操作key/value的命令演示

批量添加key/value的命令hmset

redis 127.0.0.1:6379>del myhash  --删除该键

redis 127.0.0.1:6379>hmset myhash name zlh age 31 issingle no ----给key为myhash的hash添加name=zlh,age=31,issingle=no的多个键值

批量获取key/value的命令hmget

redis 127.0.0.1:6379>hmget myhash name age issingle   ----输出结果为:zlh 31 no

根据myhash键获取所有的字段及value的命令hgetall

redis 127.0.0.1:6379>hgetall myhash   ----输出结果为:name age issingle zlh 31 no

获取所有的field的命令hkeys

redis 127.0.0.1:6379>hkeys myhash   ---输出结果为:name age issingle

获取所有字段的值的命令hvals

redis 127.0.0.1:6379>hvals myhash  ----输出结果为:zlh 31 no

 
原文地址:https://www.cnblogs.com/Alex80/p/5320091.html

与[转帖]redis数据结构详解之Hash(四)相似的内容:

[转帖]redis数据结构详解之Hash(四)

https://www.cnblogs.com/Alex80/p/5320091.html 序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个元素,所耗费的时间都是一样的,但是数组中的索引却没有实

[转帖]Redis学习笔记--Redis数据过期策略详解

本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存session,又或者只存放日行情股票数据)那么就会出现一下几个问题了 Redis会自己回收清理不用的数据吗?

[转帖]Redis命令详解:Keys

https://jackeyzhe.github.io/2018/09/22/Redis%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3%EF%BC%9AKeys/ 介绍完Redis连接相关命令后,再来介绍一下与Key相关的命令,Redis作为一个key-value数据库,对

[转帖]Redis入门(数据结构基础,分布式锁,性能调优)

目录 1、Redis基础 1.1 Redis是啥?能干啥? 1.2 安装Redis 1.3 Redis集成Spring 入门Demo 1.4 Redis支持数据类型 2、分布式锁解决方案-Redis(略) 3、Redis性能调优军规 3.1 缩短键值对的存储长度 3.2 使用 lazy free(延

[转帖]Redis实战总结

数据结构 数据结构是Redis的实体,承载着内部数据的存储,理解数据结构有利于我们对Redis存储进行优化,所以需要重点去理解. object encoding key查看键值类型的编码. 数据结构内部编码说明stringraw小于39个字节字符串int8个字节长整型,只有当key为整型才会被存储e

[转帖]Redis性能调优万字总结,面试必问!

https://zhuanlan.zhihu.com/p/541745804 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如 Redis的内存模型? Redis的底层数据结构是怎么的? Redis的多线程模型 Redis的集群原理 Redis的雪崩,击穿,穿透怎么

[转帖]redis中的bigkey问题

https://cdn.modb.pro/db/459810 什么是bigkey bigkey就是redis key/value体系中的大value问题。我们知道redis的底层数据存储结构中,有多种数据结构的实现。 String: 简单动态字符串 List: 双向链表、压缩列表 Hash: 哈希表

[转帖]redis list类型介绍

redis list类型介绍 要阐述redis的list数据类型,最好以一些理论开始,因为list术语在信息化众多技术中用的并不合适,如: 如Python中的list并不是链表结构,而是数组(同样的数据结构在Ruby语言中叫Array)。 以通常的观点来看,List仅仅是一个有序的元素序列:10,2

[转帖]为什么我Redis中key惊现“乱码”?

为什么Redis中key会惊现“乱码”? 最近在做一个秒杀项目,过程中大量应用到了redis。 而我在用ElasticJob进行数据化初始化到Redis数据库时发现这些key都出现了一段前缀“乱码”。 数据结构为Hash,可以观察到hashkey也带有前缀“乱码” 这究竟是怎么回事呢?原来问题出在这

[转帖]8 年 Redis 运维经验,我踩了哪些坑

https://cloud.tencent.com/developer/article/1986942 Redis 目前绝对算是当前市场的宠儿,大到 BAT,小到初创公司都在使用。一说到 Redis,我们就会想到它的高性能、数据结构丰富、API 功能强大、高可用性以及架构可伸缩等特点。正是这些特点,