赞
踩
首先,先了解一下哈希表,相对于对于列表(list)的了解,哈希表就比较陌生了,哈希表在百度词典中的定义为:
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
因为本身接触哈希也是比较少,所以,只能是很浅地了解一下哈希表的原理;
简单来讲,哈希表与python结合来理解就是,表现很像列表,但是内部却是以字典的形式,即类似于键值对的形式,但是哈希是以唯一索引的形式去存储数据,这样可以节约查询的时间,但是缺陷是比较占内存,可以说是用空间来换时间了。
在redis中,hash的一些简单个人理解:
首先,在redis中,创建时,hash以键key中有多个索引region(域),每个索引对应唯一值value的形式进行存储,在对hash进行操作时,大多是对key中存储的region进行操作,也可直接对key进行操作。
redis中对于hash的一些指令:
关键字 | 用法 | 指令作用 |
---|---|---|
hdel | hdel key region1 region2… | 删除哈希表key中的一个或多个file(域) |
hexists | hexists key region | 查看哈希表key中是否有指定的域 |
hget | hget key rekgion | 查询哈希表key中指定域的值 |
hgetall | hgetall key | 查询哈希表key中的所有域以及对应的值 |
hincrby | hincrby key region num | 给哈希表key中指定域对应的值增加num |
hincrbyfloat | hincrbyfloat key region num | 给哈希表key中指定域对应的值增加num(浮点型) |
hkeys | hkeys key | 返回哈希表key中所有的域 |
hlen | hlen key | 返回哈希表key中域的数量 |
hmget | hmget key region1 region2… | 返回哈希表key中指定的一个或者多个域 |
hmset | hmset key region1 value1 … | 给哈希表key中一个或多个指定域进行赋值并存储 |
hset | hset key region value | 给哈希表key中的指定域region赋值并保存 |
hsetnx | hsetnx key region value | 给哈希表key中不存在的域region赋值并保存 |
hvals | hvals key | 返回哈希表key中所有域的值 |
hstrlen | hstrlen key region | 查询哈希表哦key中指定域对应的内容的字符串长度 |
语法:
hdel key region1 region2...
作用:
删除哈希表key中一个或多个region域,如果redion域不存在,则会自动忽略,删除下一个,知道全部删除。
示例:
127.0.0.1:6379> hset hash1 aa 11 (integer) 1 127.0.0.1:6379> hset hash1 bb 11 (integer) 1 127.0.0.1:6379> hset hash1 cc 11 (integer) 1 # 删除不存在的域 127.0.0.1:6379> hdel hash dd (integer) 0 # 删除一个域 127.0.0.1:6379> hdel hash1 cc (integer) 1 # 删除多个域 127.0.0.1:6379> hdel hash1 aa bb (integer) 2 127.0.0.1:6379> keys * (empty list or set)
语法:
hexists key region
作用:
查看哈希表key中是否有指定的region域;
如果指定域region存在,则返回1;
如果指定域region不存在,则返回0。
示例:
127.0.0.1:6379> hset hash1 aa 11
(integer) 1
# 查询的域存在时:
127.0.0.1:6379> hexists hash1 aa
(integer) 1
# 查询的域不存在时:
127.0.0.1:6379> hexists hash1 bb
(integer) 0
语法:
hget key region
作用:
查询哈希表key中指定域region对应的值;
如果指定域region存在,则返回对应的值;
如果指定域region不存在,则返回nil。
示例:
127.0.0.1:6379> hset hash1 aa 11
(integer) 1
# 当指定域region存在时:
127.0.0.1:6379> hget hash1 aa
"11"
# 当指定域region不存在时:
127.0.0.1:6379> hget hash1 bb
(nil)
语法:
hgetall key
作用:
查询哈希表key中所有的域以及指定的值;
当哈希表key中有值时,按照:
>>>域
>>>对应值
这种方式返回值;
如果哈希表key中没有值(即哈希表key不存在时),返回一个空列表。
示例:
127.0.0.1:6379> hset hash1 aa 11
(integer) 1
127.0.0.1:6379> hset hash1 bb 22
(integer) 1
# 当哈希表key存在且有值时:
127.0.0.1:6379> hgetall hash1
1) "aa"
2) "11"
3) "bb"
4) "22"
# 当哈希表key不存在时:
127.0.0.1:6379> hgetall hash2
(empty list or set)
语法:
hincrby key region num
作用:
向哈希表key指定域region的值进行增加num运算;
当指定域region对应的值不为数字时,会报错;
当指定域region对应的值为数字时,进行增加num运算,其中num可以为负数,相当于减法运算;
当指定域region不存在时,会先进行初始化值为0,再进行运算。
示例:
127.0.0.1:6379> hgetall hash1 1) "aa" 2) "11" 3) "bb" 4) "abc" # 指定域region对应的值不为数字时: 127.0.0.1:6379> hincrby hash1 bb 10 (error) ERR hash value is not an integer # 指定域region对应的值存在且为数字时: 127.0.0.1:6379> hincrby hash1 aa 10 (integer) 21 # 指定域region不存在时: 127.0.0.1:6379> hincrby hash1 cc -10 (integer) -10
语法:
hincrbyfloat key region num
作用:
与hincrby相似,只是其中的num值为浮点型数字,其余相同,具体作用见hincrby。
语法:
hkeys key
作用:
当哈希表存在且有域时,返回哈希表key中所有的域;
当哈希表不存在时,返回空列表。
示例:
# 当哈希表存在且有域时:
127.0.0.1:6379> hkeys hash1
1) "aa"
2) "bb"
3) "cc"
# 当哈希表不存在时:
127.0.0.1:6379> hkeys hash2
(empty list or set)
语法:
hlen key
作用:
当哈希表key存在且有域时,返回key中域的数量;
当哈希表key不存在时,返回0。
示例:
# 当哈希表key存在且有域时:
127.0.0.1:6379> hlen hash1
(integer) 3
# 当哈希表key不存在时:
127.0.0.1:6379> hlen hash2
(integer) 0
语法:
hmget key region1 region2
作用:
返回哈希表key中指定的一个或者多个域;
当指定域不存在时,返回nil;
当哈希表key不存在时,返回查询域个数nil的表。
示例:
# 当哈希表key存在且所查询的域都存在时: 127.0.0.1:6379> hmget hash1 aa bb cc 1) "21" 2) "abc" 3) "-10" # 当哈希表key存在,但所查询的域有不存在的时候: 127.0.0.1:6379> hmget hash1 aa bb dd 1) "21" 2) "abc" 3) (nil) # 当哈希表key不存在时: 127.0.0.1:6379> hmget hash2 aa bb cc 1) (nil) 2) (nil) 3) (nil)
语法:
hmset key region1 value1 region2 value2 ...
作用:
给哈希表key中的一个或多个域进行赋值并保存到表中;
当域存在时,会覆盖之前的值;
当哈希表key不存在时,会创建一个空的哈希表并执行后面的赋值与保存。
示例:
127.0.0.1:6379> hmget hash1 aa bb cc 1) "21" 2) "abc" 3) "-10" # 当哈希表key存在时: 127.0.0.1:6379> hmset hash1 cc 100 dd abcd ee 20 OK 127.0.0.1:6379> hmget hash1 aa bb cc dd ee 1) "21" 2) "abc" 3) "100" 4) "abcd" 5) "20" # 当哈希表key不存在时: 127.0.0.1:6379> keys * 1) "hash1" 127.0.0.1:6379> hmset hash2 a 1 b 2 c 3 OK 127.0.0.1:6379> hmget hash2 a b c 1) "1" 2) "2" 3) "3"
语法:
hset key region value
作用:
给哈希表key指定域region赋值并保存;
如果域region存在,则会将之前的值覆盖;
如果域region不存在,则会创建一个新的域region并赋值。
示例:
# 当域region存在时:
127.0.0.1:6379> hget hash1 aa
"21"
127.0.0.1:6379> hset hash1 aa 999
(integer) 0
127.0.0.1:6379> hget hash1 aa
"999"
# 当域region不存在时:
127.0.0.1:6379> hget hash1 ff
(nil)
127.0.0.1:6379> hset hash1 ff 10
(integer) 1
127.0.0.1:6379> hget hash1 ff
"10"
语法:
hsetnx key region value
作用:
给哈希表key中不存在的域region赋值并保存;
当域region存在时,操作无效;
当哈希表key不存在时,会创建新的哈希表key,并将域保存到表中。
示例:
当域不存在时: 127.0.0.1:6379> hget hash2 d (nil) 127.0.0.1:6379> hsetnx hash2 d 999 (integer) 1 127.0.0.1:6379> hget hash2 d "999" 当域存在时: 127.0.0.1:6379> hget hash2 a "1" 127.0.0.1:6379> hsetnx hash2 a 999 (integer) 0 127.0.0.1:6379> hget hash2 a "1" # 当哈希表key不存在时: 127.0.0.1:6379> keys * 1) "hash2" 2) "hash1" 127.0.0.1:6379> hsetnx hash3 aaa 123 (integer) 1 127.0.0.1:6379> hget hash3 aaa "123"
语法:
hvals key
作用:
返回哈希表key中所有域的值;
当key不存在时,返回一个空的表。
示例:
# 当哈希表key存在时:
127.0.0.1:6379> hvals hash1
1) "999"
2) "abc"
3) "100"
4) "abcd"
5) "20"
6) "10"
# 当哈希表key不存在时:
127.0.0.1:6379> hvals hash4
(empty list or set)
语法:
hstrlen key region
作用:
返回哈希表key指定域region对应的值的字符串的长度;
如果哈希表key或者指定域region不存在时,返回0。
示例:
# 当哈希表key存在且指定域region有值时:
127.0.0.1:6379> hset hash1 111 abcd123
(integer) 1
127.0.0.1:6379> hstrlen hash1 111
(integer) 7
# 当哈希表存在,但指定域不存在时:
127.0.0.1:6379> hstrlen hash1 112
(integer) 0
# 当哈希表不存在时:
127.0.0.1:6379> hstrlen hash2 111
(integer) 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。