文章目录

  • 1.概述
    • 1.1Redis数据类型 中文官网 (不推荐,更新不及时)
    • 1.2.Redis数据类型 英文官网 (推荐)
  • 2.Hash哈希类型的相关命令
    • 2.1.命令参考地址:http://redisdoc.com/hash/hexists.html
    • 2.2.设置key的单个field属性值:hset gaoxinfu en_name frank
    • 2.3.获取key的单个field属性值:hget gaoxinfu en_name
    • 2.4.设置key的多个field属性值:hmset zhaobolun en_name brain age 8 sex m
    • 2.5.获取key的多个field属性值:hget gaoxinfu en_name
    • 2.6.获取key的多个field属性字段:hkeys zhaobolun
    • 2.7.获取key的多个field属性字段对应的value:hkeys zhaobolun
    • 2.8.获取key的多个field属性字段以及对应的value:HGETALL zhaobolun
    • 2.9.获取key的field属性个数:HLEN zhaobolun
    • 2.10.获取key的field,并加上N值:HINCRBY zhaobolun age 2
    • 2.11.获取key的field,并减掉N值:HINCRBY zhaobolun age -2
    • 2.12.删除key对应的单个属性:HDEL zhaobolun grade
    • 2.13.删除key对应的多个属性:HDEL zhaobolun sex age
    • 2.14.删除key:DEL zhaobolun
    • 2.15.查看数据类型:type gaoxinfu
  • 3.Hash哈希类型存储操作原理(略)
    • 3.1.概述
    • 3.2.ziplist类型数据结构
      • 3.2.1.ziplist概述(源码 ziplist.c)
        • 3.2.2.ziplist 数据结构整体布局
    • 3.3.hashtable类型数据结构
  • 4.Hash哈希类型应用场景
    • 4.1.String字符串类型可以做的,Hash类型都可以做
    • 4.2.存储对象类型数据,便于管理
    • 4.3.购物车
  • 5.Hash哈希类型不适合的应用场景

1.概述

1.实际上主要是对一个对象的多重属性(如人的姓名,性别,年龄)的存储;

同样是存储字符串,Hash 与String 的主要区别?
1、把所有相关的值聚集到一个key 中,节省内存空间
2、只使用一个key,减少key 冲突
3、当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗

1.1Redis数据类型 中文官网 (不推荐,更新不及时)

http://www.redis.cn/topics/data-types-intro

1.2.Redis数据类型 英文官网 (推荐)

https://redis.io/topics/data-types-intro

2.Hash哈希类型的相关命令

2.1.命令参考地址:http://redisdoc.com/hash/hexists.html

2.2.设置key的单个field属性值:hset gaoxinfu en_name frank

127.0.0.1:6379> hset gaoxinfu en_name frank
(integer) 1

已经存在的key,我们可以通过上面的命令继续设置属性值,比如我再设置一下年龄

127.0.0.1:6379> hset gaoxinfu age 18
(integer) 1

2.3.获取key的单个field属性值:hget gaoxinfu en_name

127.0.0.1:6379> hget gaoxinfu en_name
"frank"

2.4.设置key的多个field属性值:hmset zhaobolun en_name brain age 8 sex m

设置zhaobolun这个人的英文名,年龄和性别等信息

127.0.0.1:6379> hmset zhaobolun en_name brain age 8 sex m
OK

2.5.获取key的多个field属性值:hget gaoxinfu en_name

127.0.0.1:6379> hmget zhaobolun en_name age sex
1) "brain"
2) "8"
3) "m"

2.6.获取key的多个field属性字段:hkeys zhaobolun

127.0.0.1:6379> hkeys zhaobolun
1) "en_name"
2) "age"
3) "sex"

2.7.获取key的多个field属性字段对应的value:hkeys zhaobolun

127.0.0.1:6379> HVALS zhaobolun
1) "brain"
2) "8"
3) "m"

2.8.获取key的多个field属性字段以及对应的value:HGETALL zhaobolun

127.0.0.1:6379> HGETALL zhaobolun
1) "en_name"
2) "brain"
3) "age"
4) "8"
5) "sex"
6) "m"
127.0.0.1:6379>

2.9.获取key的field属性个数:HLEN zhaobolun

127.0.0.1:6379> HLEN zhaobolun
(integer) 3
127.0.0.1:6379>

2.10.获取key的field,并加上N值:HINCRBY zhaobolun age 2

127.0.0.1:6379> HKEYS zhaobolun
1) "en_name"
2) "age"
3) "sex"
127.0.0.1:6379> HGET zhaobolun  age
"8"
127.0.0.1:6379> HINCRBY zhaobolun age 2
(integer) 10
127.0.0.1:6379>

2.11.获取key的field,并减掉N值:HINCRBY zhaobolun age -2

127.0.0.1:6379> HINCRBY zhaobolun age -2
(integer) 8

2.12.删除key对应的单个属性:HDEL zhaobolun grade

127.0.0.1:6379> hset zhaobolun grade 3
(integer) 1
127.0.0.1:6379> hgetall zhaobolun
1) "en_name"
2) "brain"
3) "age"
4) "8"
5) "sex"
6) "m"
7) "grade"
8) "3"
127.0.0.1:6379> HDEL zhaobolun grade
(integer) 1
127.0.0.1:6379>

2.13.删除key对应的多个属性:HDEL zhaobolun sex age

127.0.0.1:6379> HDEL zhaobolun sex age
(integer) 2
127.0.0.1:6379>

2.14.删除key:DEL zhaobolun

127.0.0.1:6379> DEL zhaobolun
(integer) 1
127.0.0.1:6379>

2.15.查看数据类型:type gaoxinfu

127.0.0.1:6379> hset gaoxinfu en_nmae frank sex m age 18
(integer) 2
127.0.0.1:6379> type gaoxinfu
hash
127.0.0.1:6379>

3.Hash哈希类型存储操作原理(略)

3.1.概述

1.首先我们redis的存储结构就是Hash,本身也是一个KV 的结构,类似于Java中的HashMap,我们叫外层的哈希(Redis KV的实现),只用到了 hashtable
2.当存储 hash 数据类型时, 我们把它叫做内层的哈希。内层的哈希底层可以使用两种数据结构实现:一种:ziplist 即为OBJ_ENCODING_ZIPLIST(压缩列表),一种:hashtable 即为OBJ_ENCODING_HT(哈希表),

3.2.ziplist类型数据结构

3.2.1.ziplist概述(源码 ziplist.c)

/* The ziplist is a specially encoded dually linked list that is designed* to be very memory efficient. It stores both strings and integer values,* where integers are encoded as actual integers instead of a series of* characters. It allows push and pop operations on either side of the list* in O(1) time. However, because every operation requires a reallocation of* the memory used by the ziplist, the actual complexity is related to the* amount of memory used by the ziplist.*/ziplist 是一个经过特殊编码的双向链表,它不存储指向上一个链表节点和指向下一个链表节点的指针,而是存储上一个节点长度和当前节点长度,通过牺牲部分读写性能,来换取高效的内存空间利用率,是一种时间换空间的思想。只用在字段个数少,字段值小的场景里面。

3.2.2.ziplist 数据结构整体布局

 ** The general layout of the ziplist is as follows:** <zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend>** NOTE: all fields are stored in little endian, if not specified otherwise.** <uint32_t zlbytes> is an unsigned integer to hold the number of bytes that* the ziplist occupies, including the four bytes of the zlbytes field itself.* This value needs to be stored to be able to resize the entire structure* without the need to traverse it first.** <uint32_t zltail> is the offset to the last entry in the list. This allows* a pop operation on the far side of the list without the need for full* traversal.** <uint16_t zllen> is the number of entries. When there are more than* 2^16-2 entries, this value is set to 2^16-1 and we need to traverse the* entire list to know how many items it holds.** <uint8_t zlend> is a special entry representing the end of the ziplist.* Is encoded as a single byte equal to 255. No other normal entry starts* with a byte set to the value of 255.

3.3.hashtable类型数据结构

4.Hash哈希类型应用场景

4.1.String字符串类型可以做的,Hash类型都可以做

4.2.存储对象类型数据,便于管理

1.比如以前,我们存储某个对象,可能是一个表,但是现在一个key,然后不同的feild即可存储
2.Hash类型比String类型能够节省更多的key空间(以前一个对象,可能好多key去存储,现在只需要一个),也更加便于集中管理

4.3.购物车

5.Hash哈希类型不适合的应用场景

1、Field 不能单独设置过期时间
2、没有bit 操作
3、需要考虑数据量分布的问题(value 值非常大的时候,无法分布到多个节点)

redis之Hash哈希类型以及存储原理相关推荐

  1. 【Redis】Hash哈希类型基本使用

    文章目录 1. 简介 2. 常用命令 3. Hash类型的数据结构 1. 简介 Redis hash 是一个键值对集合. Redis hash是一个string类型的field和value的映射表,h ...

  2. redis 中 Hash哈希介绍 及常用命令 (附有示例)

    目录 一.Redis中Hash介绍 二.常用命令 三.示例 hset hget hmset   .. hexists hkeys hvals hincrbu hsetnx 四.redis中Hash底层 ...

  3. Redis源码-String:Redis String命令、Redis String存储原理、Redis String三种编码类型、Redis字符串SDS源码解析、Redis String应用场景

    Redis源码-String:Redis String命令.Redis String存储原理.Redis String三种编码类型.Redis字符串SDS源码解析.Redis String应用场景 R ...

  4. Redis源码-Set:Redis Set存储原理、Redis Set集合操作命令、Redis Set两种存储底层编码intset+hashtable、Redis Set应用场景

    Redis源码-Set:Redis Set存储原理.Redis Set集合操作命令.Redis Set两种存储底层编码intset+hashtable.Redis Set应用场景 Redis数据类型 ...

  5. Redis源码-ZSet:Redis ZSet存储原理、Redis ZSet命令、 Redis ZSet两种存储底层编码ziplist/dict+skiplist、Redis ZSet应用场景

    Redis源码-ZSet:Redis ZSet存储原理.Redis ZSet命令. Redis ZSet两种存储底层编码ziplist/dict+skiplist.Redis ZSet应用场景 Red ...

  6. redis的数据结构||1) 字符串类型2) 哈希类型3) 列表类型4) 集合类型 5) 有序集合类型详解

    2. 下载安装     1. 官网:https://redis.io     2. 中文网:http://www.redis.net.cn/     3. 解压直接可以使用:         * re ...

  7. redis smembersmap_【Redis】redis各类型数据存储分析

    一.简介和应用 Redis是一个由ANSI C语言编写,性能优秀.支持网络.可持久化的K-K内存数据库,并提供多种语言的API.它常用的类型主要是 String.List.Hash.Set.ZSet ...

  8. Redis数据库中Hash哈希的介绍,常用命令和应用场景

    一.简介 Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. 可以看成一个map容器 Redis 中每个 hash 可以存储 232 - 1 ...

  9. Redis数据结构Hash应用场景-存储商品、购物车、淘宝短链接、分布式Session、用户注册、发微博功能

    Hash应用场景 Hash Hash应用场景 redis存储java对象常用String,那为什么还要用hash来存储? SpringBoot+redis+hash存储商品数据 短链接 场景1:淘宝短 ...

最新文章

  1. python学习第三天 --布尔类型
  2. CNCC技术论坛 | 面向人工智能芯片的编程语言和编译器
  3. 同步阻塞,同步非阻塞,异步阻塞,异步非阻塞IO
  4. 从网页中读取数据 python_数据分析硬核技能:用 Python 爬取网页
  5. 祥林嫂形容哪类人?祥林嫂比喻什么样的人物?
  6. B树和B+树详细解析
  7. 考拉Android统一弹框
  8. Python Django chartit 多报表显示
  9. 【 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛】1002.array【主席树】
  10. 海康威视监控视频,萤石云免费版四路并发访问限制绕过
  11. ACdream 1121 喵喵的IDE
  12. Debian/Ubuntu系统命令终端提示无法定位软件包解决方法
  13. 计算机网络蠕虫病毒及防范,蠕虫病毒检测与防范本科毕业论文.doc
  14. LGTM? 那些迷之缩写
  15. python 操作ps脚本_脚本之王python完美实现换脸技术,毫无PS痕迹!
  16. 著名的“三门问题”的验证
  17. 手机用html电视,手机怎么连接电视
  18. 学生成绩管理系统 002
  19. 乌合之众-大众心理研究(五)
  20. Tita OKRs-E 使OKR成为您企业DNA一部分

热门文章

  1. 2022年二级建造师-机电实务经典试题及答案
  2. 18K 金,24K金,铂金,白金,PT990,PT990,足金,千足金的区别
  3. css字符怎么设置宽度一样,设置字符的CSS宽度(setting character width with css)
  4. PHP:switch语法结构探究
  5. ArcSDE 注册与压缩
  6. python解奥数题_黄哥Python:Python代码解决一道小学奥数题
  7. ESP8266安装Wifi杀手(含固件)
  8. 简单粗暴:如何把vue ui(vue可视化界面(GUI))弄出来
  9. fastdht启动报错:ERROR - file: func.c, line: 332, local host does not belong to any group, program exit!
  10. html制作多媒体课件,如何制作多媒体课件制作