Redis 的数据类型 - Hash 对象类型

#Hash更容易存储对象,比如在设置用户姓名,年龄,邮箱等属性时,用string需要分别来进行设置存储,通过Hash就可以把属性放到对象中,然后再存储对象,因此相对于string类型,Hash类型存储对象可以占用更少的字节#

  在配置文件中可以通过配置

  hash-max-ziplist-entries 512  #存储值得最大字节512字节#

  hash-max-ziplist-value 64  #字段数目,默认64#

HSET:将 Hash 表 key 中域 field 设置成指定的 value
HGET:返回 Hash 表 key 中给定 field 的值

  语法:HSET key field value

    HGET key field

    HSET userInfo1 username ‘tom‘

    HSET userInfo1 password ‘123456‘

    HSET userInfo1 email ‘[email protected]‘

    HGET userInfo1 username

    HSET userInfo1 username ‘jerry‘   #这时 userInfo1 的 username 已经重赋值为 ‘jerry‘ #

    HGET userInfo2 username  #如果 Hash 表 key 中 field 不存在,则返回 nil 如果 key 中 field 不存在,返回的是 nil #

127.0.0.1:6379> HSET userInfo1 username ‘tom‘
(integer) 1

127.0.0.1:6379> HSET userInfo1 password ‘123456‘
(integer) 1

127.0.0.1:6379> HSET userInfo1 email ‘[email protected]‘
(integer) 1

127.0.0.1:6379> HGET userInfo1 username
"tom"

127.0.0.1:6379> HSET userInfo1 username ‘jerry‘
(integer) 0

127.0.0.1:6379> HGET userInfo1 username
"jerry"

HSETNX:将 Hash 表中的 field 设置成指定的值,只要 field 不存在的时候才可以成功;如果 field 存在,操作无效

  语法:HSETNX key field value

    HSETNX testHash1 test ‘tom‘ #返回 0 #

HMSET:同时将多个 field-value 设置到 Hash 表 key 中
HMGET:一次获得 Hash 表 key 中多个 field 的值

  语法:HMSET key field value field value ...
    HMGET key field field

    HMSET userInfo2 username ‘tom‘ password ‘123456‘ email ‘[email protected]‘

    HGET userInfo2 username

    HMSET userInfo2 username ‘jerry‘ addr ‘nanjing‘  #存在覆盖,不存在添加,返回 ok #

    HMGET userInfo2 username password email addr phone  #这里phone这个field并不存在,返回nil#

127.0.0.1:6379> HMSET userInfo2 username ‘tom‘ password ‘123456‘ email ‘[email protected]‘
OK

127.0.0.1:6379> HGET userInfo2 username
"tom"

127.0.0.1:6379> HMSET userInfo2 username ‘jerry‘ addr ‘nanjing‘
OK

127.0.0.1:6379> HMGET userInfo2 username password email addr phone
1) "jerry"
2) "123456"
3) "tom@qq.com"
4) "nanjing"
5) (nil)

HGETALL:返回 Hash 表 key 中所有的 field 和 value

  语法:HGETALL key

    HGETALL userInfo2   #如果key不存在,则返回(empty list or set)#

127.0.0.1:6379> HGETALL userInfo2
1) "username"
2) "jerry"
3) "password"
4) "123456"
5) "email"
6) "tom@qq.com"
7) "addr"
8) "nanjing"

HKEYS:返回 Hash 中 key 的所有的 field

  语法:HKEYS key

    HKEYS userInfo2

127.0.0.1:6379> HKEYS userInfo2
1) "username"
2) "password"
3) "email"
4) "addr"

HVALS:返回 Hash 中 key 中 field 所有的对应的值

  语法:HVALS key

    HVALS userInfo2

127.0.0.1:6379> HVALS userInfo2
1) "jerry"
2) "123456"
3) "tom@qq.com"
4) "nanjing"

HEXISTS:检测 Hash 中 key 的 field 是否存在

  语法:HEXISTS key field

    HEXISTS userInfo2 username   #存在,返回 1 #

    HEXISTS userInfo2 sex   #不存在,返回 0 #

127.0.0.1:6379> HEXISTS userInfo2 username
(integer) 1

127.0.0.1:6379> HEXISTS userInfo2 sex
(integer) 0

HLEN:返回 Hash 表 key 中 field 的数量

  语法:HLEN key

    HLEN userInfo2   #如果key不存在,返回 0 #

127.0.0.1:6379> HLEN userInfo2
(integer) 4

HINCRBY:给 Hash 中 key 的 field 做增量操作

  语法:HINCRBY key field increment

    HSET userInfo3 age 12

    HINCRBY userInfo3 age 10   #返回22#

    HSET userInfo3 username ‘tom‘

    HINCRBY userInfo3 username 10   #对字符串进行设置就会报错#

127.0.0.1:6379> HSET userInfo3 age 12
(integer) 1

127.0.0.1:6379> HINCRBY userInfo3 age 10
(integer) 22

127.0.0.1:6379> HSET userInfo3 username ‘tom‘
(integer) 1

127.0.0.1:6379> HINCRBY userInfo3 username 10
(error) ERR hash value is not an integer

HINCRBYFLOAT:给 Hash 中 key 的 field 做增量 float 操作

  语法:HINCRBYFLOAT key field increment

  HSET userInfo3 salary ‘12345‘

  HINCRBYFLOAT userInfo3 salary 0.888  #如果设置的数字为 int 型,而添加的数为 float 型,则返回值会自动补全 12 位小数#

127.0.0.1:6379> HSET userInfo3 salary ‘12345‘
(integer) 1

127.0.0.1:6379> HGET userInfo3 salary
"12345"

127.0.0.1:6379> HINCRBYFLOAT userInfo3 salary 0.888
"12345.888000000001"

HDEL:删除 Hash 中 key 的指定域,可以删除一个也可以删除多个

  语法:HDEL key field field

    HGETALL userInfo1

    HDEL userInfo1 username password email  #返回删除的条数,如果没有删除返回 0 #

127.0.0.1:6379> HDEL userInfo1 username password email
(integer) 3
时间: 2024-10-10 13:38:57

Redis 的数据类型 - Hash 对象类型的相关文章

Redis的五种对象类型及其底层实现

目录(?)[-] Redis对象类型简介 Redis对象底层数据结构 字符串对象 列表对象 哈希对象 集合对象 有序集合对象 结尾 Redis对象类型简介 Redis是一种key/value型数据库,其中,每个key和value都是使用对象表示的.比如,我们执行以下代码: redis>SET message "hello redis" 其中的key是message,是一个包含了字符串"message"的对象.而value是一个包含了"hello re

redis 数据类型和对象类型

1 数据类型 这些数据结构我们并不会用到,他是redis底层的数据结构. 我们能够用到的是对象 1.1 简单动态字符串 redis中的字符串使用的是 struct sdshdr { int len; //已用长度 int free; //未用长度 char buf[]; // buf 的大小为len+free+1 } 最后依然兼容c的字符串,最后一个字节使用'\0',因此最终的总长度为len+free+1 相比较c的字符串优点在于: o(1)内获得字符串长度 避免了缓冲区溢出 减少了修改字符串带

Redis08——Redis五大数据类型 hash

hash Redis中的hash是一个键值对集合 同时又是一个string类型的field和value的映射表,hash特别适合用于存储对象 类似于java里面的Map<String,Object> 问题:如果有一个Javabean对象,在Redis中该如何存在 ①用户id为key,value为Javabean序列化后的字符串 缺点:每次修改用户的某个属性,先反序列化改好后再序列化回去,开销大 ②用户id+属性名作为key,属性值作为value 缺点:用户id数据冗余 ③通过key(用户id)

【Javascript 拾遗之六】深入Javascript数据类型和对象类型

通过前几章的讲解,我们已经摸清楚Javascript的几个重要特征,具有类概念的函数,“函数”实例化的后得到对象, 原型链, 函数的定义等等.作为高级脚本语言的Javascript同样是面向对象的语言,但是Javascript中的数据类型不像JAVA中的“万物皆对象”,本文我们就来深入学习一下Javascript中的几种数据类型及其判断.Let's start learning, move it! 深入Javascript数据类型 1.5种基本数据类型和1种复杂数据类型 5种基本数据类型包括 :

Redis 的数据类型 - Zset 集合类型:有序集合

ZADD:将元素及其分数添加到集合中 语法:ZADD key courseScore member [courseScore member] ZADD courseScore 100 tom ZADD courseScore 99 jerry 88 mario 77 jack 66 lucy 55 chris ZADD courseScore 60 tom 67 apple 56 cherry #这里 tom 已经存在了,直接略过不执行,返回值为 2 # ZADD courseScore 12.

js之数据类型(对象类型——构造器对象——正则)

正则(regular expression)描述了一种字符串的匹配式.一般应用在一些方法中,用一些特殊的符号去代表一些特定的内容,对字符串中的信息实现查找,替换,和提取的操作.js中的正则表达式用RegExp对象表示,有两种写法:一种是字面量写法,一种是构造函数写法. 一.定义正则表达式 字面量创建方式 /正则表达式/[修饰符可写可不写] 实例创建方式 new RegExp(字符串,[修饰符]) 二者的区别:直接量定义不能进行字符串拼接,实例创建方式可以:字面量创建方式特殊含义的字符不需要转义,

js之数据类型(对象类型——单体内置对象——JSON)

JSON(Java Script Object Notation)使用JavaScript语法,是用于存储和传输数据的格式,通常用于服务端向网页传递数据.JSON格式仅仅是一个文本,文本可以被任何编程语言读取及作为数据格式传递(一种类似js中的对象格式的字符串,json它是一个字符串,只不过长的像对象)从上面的描述中我们可以看到如下知识 JSON的规则:数据放在了一对引号当中,用{}或者是[]括起来:里面的每一个数据都是以键值对表示(key:value);key必须放双引号,单引号不行:每个数据

Redis的数据类型 - String字符串类型

SET:设置key对应的值为value 语法:SET key value [EX seconds] [PX milliseconds] [NX|XX] #一个键最多存储512MB,如果key存在,同名进行覆盖# EX: seconds:设置键的key的过期时间SET key value EX seconds -- SETEX PX: milliseconds:以毫秒的形式设置过期时间SET key value PX milliseconds -- PSETEX NX: 只有键不存在的时候才可以设

深入了解Redis【二】对象及数据结构综述

引言 Redis中每个键值对都是由对象组成: 键总是一个字符串对象(string) 值可以是字符串对象(string).列表对象(list).哈希对象(hash).集合对象(set).有序集合对象(zset). 介绍 redis官方网站中对其数据类型的简单介绍: An introduction to Redis data types and abstractions 摘抄一段关于redis key的介绍: Redis keys Redis keys are binary safe, this m