Redis是采用字典结构以键值对的形式存储数据的,而散列类型的键值也是一种字典结构。其存储了字段和字段值的映射,但是字段值只能支持字符串。即散列类型不能嵌套其他的数据类型。一个散列类型可以包含个字段
Hash是一个String类型的field和value的映射表。使用Java可以作为如下理解:
Map<String,String> person = new HashMap<String,String>();
person.put("name","xiaoming");
person.put("age","20");
使用Redis的实现方式为:
27.0.0.1:6378> hset person name xiaoming
(integer) 1
127.0.0.1:6378> hset person age 20
(integer) 1
127.0.0.1:6378> hmget person name age
1) "xiaoming"
2) "20"
127.0.0.1:6378>
1 命令操作
API方法名 | 作用 |
---|---|
hset | 设置hash field为指定值,如果key不存在,则先创建 |
hsetnx | 设置hash field为指定值,如果key不存在,则先创建。如果存在返回0 |
hmset | 同时设置hash的多个field |
hget | 获取指定的hash field |
hmget | 获取全部指定的hash field |
hincrby | 指定的hash field加上给定值 |
hexists | 测试指定field是否存在 |
hlen | 返回指定hash的field数量 |
hdel | 删除指定hash的field |
hkeys | 返回hash的所有field |
hvals | 返回hash的所有value |
hgetall | 获取某个hash中全部的field及value |
1.1 hset和hget
hset key field value
hget key field
赋值与取值。hset不区分是新增还是修改,如果字段存在,则更新。如果字段不存在,则新增。
127.0.0.1:6378> hset person name xiaoming
(integer) 1
127.0.0.1:6378> hget person name
"xiaoming"
127.0.0.1:6378> hset person name xiaoming1
(integer) 0
127.0.0.1:6378> hget person name
"xiaoming1"
127.0.0.1:6378> type person
hash
127.0.0.1:6378>
1.2 hmset和hmget
hmset key field value [field1 value1...]
hmget key field [field1...]
同时赋值或获取多个字段。
127.0.0.1:6378> hmset person age 20 sex male
OK
127.0.0.1:6378> hmget person name age sex
1) "xiaoming1"
2) "20"
3) "male"
127.0.0.1:6378>
1.3 hgetall
hgetall key
如果不知道hash中字段有哪些,在使用这个命令全部显示。
127.0.0.1:6378> hgetall person
1) "name"
2) "xiaoming1"
3) "age"
4) "20"
5) "sex"
6) "male"
127.0.0.1:6378>
1.4 hexists
hexists key field
判断字段是否存在,存在返回1,否则返回0。
127.0.0.1:6378> hexists person name1
(integer) 0
127.0.0.1:6378> hexists person name
(integer) 1
127.0.0.1:6378>
1.5 hsetnx
hsetnx key field value
当字段不存在时赋值,存在则不赋值,返回0;否则赋值成功,返回1。
127.0.0.1:6378> hsetnx person name xiaoming1
(integer) 0
127.0.0.1:6378> hsetnx person school 7c
(integer) 1
127.0.0.1:6378> hgetall person
1) "name"
2) "xiaoming1"
3) "age"
4) "20"
5) "sex"
6) "male"
7) "school"
8) "7c"
127.0.0.1:6378>
1.6 hincrby
hincrby key field increment
可以使用字段值增加指定的整数。
127.0.0.1:6378> hincrby person age 2
(integer) 22
127.0.0.1:6378> hget person age
"22"
127.0.0.1:6378>
1.7 hdel
hdel key field [field1...]
可以删除一个或多个字段,返回值是被删除的字段个数。
127.0.0.1:6378> hgetall person
1) "name"
2) "xiaoming1"
3) "age"
4) "22"
5) "sex"
6) "male"
7) "school"
8) "7c"
127.0.0.1:6378> hdel person school
(integer) 1
127.0.0.1:6378> hgetall person
1) "name"
2) "xiaoming1"
3) "age"
4) "22"
5) "sex"
6) "male"
127.0.0.1:6378>
1.8 hkeys和hvals
hkeys key
hvals key
只获取字段名或字段值
127.0.0.1:6378> hkeys person
1) "name"
2) "age"
3) "sex"
127.0.0.1:6378> hvals person
1) "xiaoming1"
2) "22"
3) "male"
127.0.0.1:6378>
1.9 hlen
hlen key
获得字段数量
127.0.0.1:6378> hlen person
(integer) 3
127.0.0.1:6378>
网友评论