您的位置:首页 > 数据库 > Redis

Redis实用指令(二)——Hash

2017-05-12 12:04 375 查看
这里说说Redis中的Hash存储,这块我也是最近才开始接触。我的理解就是Hash可以看成一个简单的关系型数据库的表,这个表有三个字段:key、field、value。其中key和field作为这张表的联合主键,value是我们比较关心的值,key是第一主键,field作为副主键。Redis可以对key单独操作,但是对field操作的时候必须先指定key。所以其主从关系为:key(第一主键)→field(副键)→value(值)。

带着上面的思路咱们来看看Redis中hash的指令。

HDEL key field [field …]:删除一个或多个hash的field。简单来讲就是根据两个字段(key)来删除一条数据,看成sql中的多条件删除更容易理解,Hash中的field基本都可以这样理解。

redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
redis>


HEXISTS key field:返回hash里面key的field是否存在的标志。(中文官网说是返回key是否存在的标志,这是不对的,是key下field是否存在。对比了下英文官网是翻译的错误。)

redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0
redis>


HGET key field:获取hash中field的值。

127.0.0.1:6379[1]> hget myhash myfield
"kun"
127.0.0.1:6379[1]>


HGETALL key:从hash中读取多有的field和value。

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
redis>


HINCRBY key field increment:给hash中field的值增加一个给定的数字,该value必须是数字。

redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
redis> HINCRBY myhash field -10
(integer) -5
redis>


HINCRBYFLOAT key field increment:给hash中field的值增加一个给定的浮点数。

redis> HSET mykey field 10.50
(integer) 1
redis> HINCRBYFLOAT mykey field 0.1
"10.6"
redis> HSET mykey field 5.0e3
(integer) 0
redis> HINCRBYFLOAT mykey field 2.0e2
"5200"
redis>


HKEYS key:获取某hash下所有的field。这里我用*的时候居然什么都查不到,所以这里只能针对一个hash的key操作。

127.0.0.1:6379[1]> hkeys *
(empty list or set)
127.0.0.1:6379[1]> hkeys myhash
1) "myfield"
127.0.0.1:6379[1]>


HLEN key:返回 key 指定的哈希集包含的字段的数量。通俗的说就是hash中某key对应了多少field.

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
redis>


HMGET key field [field …]:返回 key 指定的哈希集中指定字段的值。这个可以同时查询多个field的值,可以跟hget对比下。

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HMGET myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)
redis>


HMSET key field value [field value …]:同时设置多个field的值。

redis> HMSET myhash field1 "Hello" field2 "World"
OK
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
redis>


HSET key field value:设置hash中一个field的值。

HSETNX key field value:设置hash中一个field的值,只有当该field不存在时才有效。

redis> HSETNX myhash field "Hello"
(integer) 1
redis> HSETNX myhash field "World"
(integer) 0
redis> HGET myhash field
"Hello"
redis>


HSTRLEN key field:返回hash指定field的value的字符串长度,如果hash或者field不存在,返回0.

redis> HMSET myhash f1 HelloWorld f2 99 f3 -256
OK
redis> HSTRLEN myhash f1
(integer) 10
redis> HSTRLEN myhash f2
(integer) 2
redis> HSTRLEN myhash f3
(integer) 4
redis>


HVALS key:返回 key 指定的哈希集中所有字段的值。

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"
redis>


Redis中文官网指令:http://www.redis.cn/commands.html

英文官网指令:https://redis.io/commands
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息