序言

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

附言

如果你在看到本文后有什么疑问,请加入博客左上角群,一起交流学习。

我的redis系列博文:双击地址

redis数据结构详解之Hash(四)的更多相关文章

  1. 5种Redis数据结构详解

    本文主要和大家分享 5种Redis数据结构详解,希望文中的案例和代码,能帮助到大家. 转载链接:https://www.php.cn/php-weizijiaocheng-388126.html 2. ...

  2. Redis数据结构详解之List(二)

    序言 思来想去感觉redis中的list没什么好写的,如果单写几个命令的操作过于乏味,所以本篇最后我会根据redis中list数据类型的特殊属性,同时对比成熟的消息队列产品rabbitmq,使用red ...

  3. Redis数据结构详解,五种数据结构分分钟掌握

    redis数据类型分为:字符串类型.散列类型.列表类型.集合类型.有序集合类型.redis这么火,它运行有多块?一台普通的笔记本电脑,可以在1秒钟内完成十万次的读写操作.原子操作:最小的操作单位,不能 ...

  4. Redis数据结构详解(一)

    前言 Redis和Memcached最大的区别,Redis 除啦支持数据持久化之外,还支持更多的数据类型而不仅仅是简单key-value结构的数据记录.Redis还支持对这些数据类型做更多的服务端操作 ...

  5. Redis数据结构详解(2)-redis中的字典dict

    前提知识 字典,又被称为符号表(symbol table)或映射(map),其实简单地可以理解为键值对key-value. 比如Java的常见集合类HashMap,就是用来存储键值对的. 字典中的键( ...

  6. Redis数据结构详解之Zset(五)

    序言 Zset跟Set之间可以有并集运算,因为他们存储的数据字符串集合,不能有一样的成员出现在一个zset中,但是为什么有了set还要有zset呢?zset叫做有序集合,而set是无序的,zset怎么 ...

  7. Redis数据结构详解之Set(三)

    序言 在Redis中,Set和list都是字符串序列,非常相似,不同之处在于Set是用哈希表来保持字符串的唯一性,没有先后顺序,不像list一样,可以在首尾增删数据.但是set也有自己的相应处理命令来 ...

  8. Redis数据结构详解(1)-redis中的字符串(SDS)

    前提知识 我们先从百科上摘下Redis的解释: Redis是一个使用ANSI C编写的开源.支持网络.基于内存.分布式.可选持久性的键值对存储数据库. (不用过多在意ANSI,它只是一个标准,你可以理 ...

  9. redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

随机推荐

  1. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  2. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  3. ExtJS 4.2 业务开发(三)数据添加和修改

    接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...

  4. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  5. 在centos7上安装ClamAV杀毒,并杀毒(centos随机英文10字母)成功

    前言 上传文件的时候发现总是失败,查看top发现有个进程一直cpu占用80%以上,而且名称还是随机数.kill之后,一会儿又重新生成了.突然发现居然没有在服务端杀毒的经历.在此处补齐. 安装clama ...

  6. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  7. Android程序中--不能改变的事情

    有时,开发人员会对应用程序进行更改,当安装为以前版本的更新时出现令人惊讶的结果 - 快捷方式断开,小部件消失或甚至根本无法安装. 应用程序的某些部分在发布后是不可变的,您可以通过理解它们来避免意外. ...

  8. ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)

    前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...

  9. Windows下MySQL无法启动

    问题描述: 从网上下了5.7 的MySQL,在bin目录下执行 start mysqld ,弹出个cmd窗口一闪就没了,也看不清是什么报错.mysqld --install安装了服务,也启动不了.   ...

  10. Oracle 11g必须开启的服务及服务详细介绍

    转自:http://www.educity.cn/shujuku/404120.html 成功安装Oracle  11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现非常卡的状况,通 ...