哈希值存储示意图:

首先, 我想先认真理解一下哈希值的数据结构:
前面讲过, redis 存储的是键值对, 键永远都是可以打印的 ASCII 码, 值是字符串, 或者是以其他形式包裹的字符串. 上两节介绍了单纯字符串值的相关命令, 现在开始接触第一个所谓的"以其他形式包裹的字符串" --- 哈希值. 大家看上图中, 哈希值的部分, 一共有4行, 可以看作是一个数组, 里面包含了4个元素, 再看每一个元素(也就是每一行)都有一个 field 与 value 对应, 可以看作是一个映射(map). 总结, 哈希值的数据结构就是数组包含映射(list > map, 这是从 python 的角度理解的, 如果从 php 的角度, 我觉得有点像是一个二维数组)

下面介绍具体命令.

设置一条哈希数据存储:

127.0.0.1:6379> hmset stu-1 name max age 16 sex male
OK

获取值中的某个字段, 要指定字段名:

127.0.0.1:6379> hget stu-1 name
"max"

获取某个键的哈希值的指定字段的值:

127.0.0.1:6379> hmget stu-1 name
1) "max"
127.0.0.1:6379> hmget stu-1 name age
1) "max"
2) "18"

获取全部的哈希值:

127.0.0.1:6379> hgetall stu-1
1) "name"
2) "max"
3) "age"
4) "16"
5) "sex"
6) "male"

判断某个键的哈希值的某个字段是否存在:

127.0.0.1:6379> hexists stu-1 surname
(integer) 0
127.0.0.1:6379> hexists stu-1 name
(integer) 1

删除某个键的哈希值的某个字段:

127.0.0.1:6379> hdel stu-1 sex
(integer) 1
127.0.0.1:6379> hgetall stu-1
1) "name"
2) "max"
3) "age"
4) "16"

设置某个键的哈希值的某个字段:

127.0.0.1:6379> hmset stu-1 sex male
OK
127.0.0.1:6379> hgetall stu-1
1) "name"
2) "max"
3) "age"
4) "16"
5) "sex"
6) "male"

设置某个键的哈希值的某个字段前, 先判断这个字段是否可用, 如果可用则返回1, 表示设置成功, 如果不可用则返回0, 表示设置失败:

127.0.0.1:6379> hsetnx stu-1 name tom
(integer) 0
127.0.0.1:6379> hsetnx stu-1 surname tom
(integer) 1
127.0.0.1:6379> hsetnx stu-1 class 3
(integer) 1
127.0.0.1:6379> hgetall stu-1
1) "name"
2) "max"
3) "age"
4) "16"
5) "sex"
6) "male"
7) "class"
8) "3"
9) "surname"
10) "tom"

判断某个键的哈希值的某个字段是否存在, 如果存在则返回1:

127.0.0.1:6379> hexists stu-1 class
(integer) 1
127.0.0.1:6379> hget stu-1 class
"3"

获取某个键的所有字段名:

127.0.0.1:6379> hkeys stu-1
1) "name"
2) "age"
3) "sex"
4) "class"
5) "surname"

获取某个键的所有字段的值:

127.0.0.1:6379> hvals stu-1
1) "max"
2) "16"
3) "male"
4) "3"
5) "tom"

以自定义的幅度, 增加某个键的哈希值的某个字段的值:

127.0.0.1:6379> hincrby stu-1 age 2
(integer) 18
127.0.0.1:6379> hgetall stu-1
1) "name"
2) "max"
3) "age"
4) "18"
5) "sex"
6) "male"
7) "class"
8) "3"
9) "surname"
10) "tom"

查看某个键的哈希值一共有几个字段:

127.0.0.1:6379> hlen stu-1
(integer) 5

以上, 就是关于哈希值的基本命令, enjoy.....

理解 Redis(5) - 哈希值的更多相关文章

  1. 理解 Redis(8) - Ordered set 值

    ordered set 是根据 score值有序排列的数据集合. 首先还是清空数据, 并清屏, 此步骤省略~~~~ 新建一条 ordered set 数据 myset1, 并存入4个字符串, scor ...

  2. 深入理解Redis 数据结构—字典

    字典,又称为符号表.关联数组或映射,是一种用于保存键值对的抽象数据结构.在字典中,一个键可以和一个值进行关联,这些关联的键和值称为键值对.键值对中键是唯一的,我们可以根据键key通过映射查找或者更新对 ...

  3. 深入理解Redis:底层数据结构

    简介 redis[1]是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  4. 进阶的Redis之哈希分片原理与集群实战

    前面介绍了<进阶的Redis之数据持久化RDB与AOF>和<进阶的Redis之Sentinel原理及实战>,这次来了解下Redis的集群功能,以及其中哈希分片原理. 集群分片模 ...

  5. 深入理解redis数据类型

    转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9720033.html redis的存储模型 redis不是普通的键值对存储,它实际上是一个数据结构存储服务器 ...

  6. 深入理解Redis内存模型

    前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...

  7. redis使用哈希槽实现集群

    Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...

  8. 深入理解Redis主键失效原理及实现机制(转)

    原文:深入理解Redis主键失效原理及实现机制 作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Redis 也不例外.在 Redis 提供的诸多命令中,EXPIRE.EXPIREA ...

  9. API的理解和使用——哈希类型的命令

    哈希常用的命令复习 命令 功能 hset key field value 设置哈希值 hsetnx 设置哈希值,field或键必须不存在 hget 获取某个file对应的值 hdel 删除一个或多个f ...

随机推荐

  1. Linux:编译安装boost 1.69库

    Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发.维护.在C++的地位感觉可以和Spring在Java中相比. boost向来有准标准库之称,很多新特性例如智 ...

  2. 前端框架VUE----vue的使用

    一.安装 对于新手来说,强烈建议大家使用<script>引入 二. 引入vue.js文件 我们能发现,引入vue.js文件之后,Vue被注册为一个全局的变量,它是一个构造函数. 三.使用V ...

  3. glog日志库移植Android平台

    1.在linux平台下使用ndk交叉编译链编译glog生成libglog.a静态库. 2.将生成的库文件与头文件放到Android项目中,使用JNI方法调用. 3.编译遇到错误“stderr.stdo ...

  4. 处理springmvc的post和get提交参数乱码问题

    1,post 配置CharacterEncodingFilter拦截器 2,get 在tomcat的Connect 上配置uri 编码

  5. mysql数据库介绍

    一.数据库概述 二.MySql安装和基本管理 三.mysql基本语句 四.库的操作 五.表的操作 六.数据类型 七.数据类型二 八.完整性约束 九.外键的变种 三种关系 十.数据的增删改 十一.多表查 ...

  6. 【react懒加载组件】--react-lazyload

    组件安装: npm install react-lazyload --save-dev 组件使用: //引入 import LazyLoad from 'react-lazyload'; //rend ...

  7. Qone 自动删除说说脚本

    请看图 script var delay = 1000; function del() { document.querySelector('.app_canvas_frame').contentDoc ...

  8. 公网FTP(filezilla)改端口

    背景:我们如果不修改ftp服务器的端口,很容易被别人测试和攻击. 配置要点:服务端端口设置.主被动设置.服务端和客户端防火墙设置 ftp服务器:filezilla ftp server 1.  监听端 ...

  9. uniGUI试用笔记(二)

    前几天做的demo今天启动后,浏览器打开页面后死活不显示窗体,找了半天原因才发现是360浏览器启动了兼容模式,改成极速模式后就正常了.有点晕.... 今天简单测试了TUniGUIServerModul ...

  10. Bootstrap3基础 disabled 多选框 鼠标放在方框与文字上都出现禁止 标识

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...