Redis中的hash数据类型

hash数据类型的操作命令:

1.HSET key field value

用来设置键值对

返回值是,设置成功的field-value的个数

这里设置了4个field-value。所以返回4

2.HGET key field

这个操作可以查对应field中的value。但是一次只能查一个

如果不存在则返回nil

3.HEXISTS key field

用来查看该field是否存在

存在就返回1,不存在就返回0。

4HDEL:

用来删除hash中指定的字段

注意:del删除的是key,hdel删除的是key。

这里返回0,是因为该key中不存在f1。

5HKEYS key

这个指令用来查看key中所有的field。

这个操作,先根据key找到对应的hash,时间复杂度O(1),然后遍历hash

注意:这个操作是有风险的

5.HVALS key:

这个指令和hkeys相对,能够获取到hash中所有的value。

6.HGETALL key:

该指令可以查出对应的key的所有field-value这个键值对。

这个操作的风险还是比较大。谨慎使用。

7.HMGET key field

可以一次查出多个field的value

多个value和查询时的field的顺序一致。

hash的编码格式:

hash编码有hashtable,ziplist。

ziplist的内部数据结构也是精心设计的,目的是为了节省空间,用于小数据量储存,读写元素时,速度是比较慢的,元素个数多,这种慢就更加明显

1.哈希中的元素个数较少时,使用ziplist表示,元素个数比较多时,使用hashtable来表示

2.每个value比较短时,使用ziplist表示,如果某个value的长度太大,就会转换hashtable

配置:

hash-max-ziplist-entries配置 (默认512个)hash中的元素个数

hash-max-ziplist-value配置 (默认64字节)每个value的长度

hash的使用场景:

作为缓存:

string可以作为缓存使用,hash也可以,用来储存结构化的数据,使用hash类型更合适一些。

上述场景使用string类型也是可以做到的,就是需要使用json这样的数据格式。

但是如果使用string(json)格式来表示的UserInfo,我们只想修改其中的一个field,那么就需要把整个json都读出来转化成UserInfo对象,然后修改了对应的field,再转化成json并储存到Redis中,有点繁琐。

但是用hash的方式来表示UserInfo,此时就可以使用field表示的对象的每个属性,就可以很方便的修改任何一个属性的值了。

hash的方式需要更多的空间的代价,需要控制hash内的ziplist和hashtable两种内部编码格式的相互转化,可能造成内存的较大消耗。

相关推荐
ClickHouseDB2 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_639906942 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
时间售卖铺3 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw3 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社4 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙5 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3766 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02146 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川6 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组6 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制