首页 > 数据库 > NoSQL > Redis 学习笔记 数据类型 - hash
Redis 学习笔记 数据类型 - hash
Redis hash哈希表是用来存放字段和字段值,应用场景比如存放用户的相关信息,名字,生日,性别等等。
hset赋值操作
127.0.0.1:6442> hset hset1 name James
(integer) 1
127.0.0.1:6442> hset hset1 year 10
(integer) 1
127.0.0.1:6442> hset hset1 sex male
(integer) 1
127.0.0.1:6442> hgetall hset1
1) "name"
2) "James"
3) "year"
4) "10"
5) "sex"
6) "male"
hget获取key键中某个字段的值
127.0.0.1:6442> hget hset1 name
"James"
127.0.0.1:6442> hget hset1 year
"10"
127.0.0.1:6442> hget hset1 sex
"male"
hgetall获取key键中所有字段的值
127.0.0.1:6442> hgetall hset1
1) "name"
2) "James"
3) "year"
4) "10"
5) "sex"
6) "male"
127.0.0.1:6442> hset hset1 year 11
(integer) 0
127.0.0.1:6442> hgetall hset1
1) "name"
2) "James"
3) "year"
4) "11"
5) "sex"
6) "male"
hsetnx对key键中某个字段的赋值,如果值已经存在,不做任何操作
127.0.0.1:6442> hsetnx hset1 year 10
(integer) 0
127.0.0.1:6442> hgetall hset1
1) "name"
2) "James"
3) "year"
4) "11"
5) "sex"
6) "male"
hmset对key键中多个字段的赋值
127.0.0.1:6442> hmset hset1 name Peter year 12 sex male
OK
127.0.0.1:6442> hgetall hset1
1) "name"
2) "Peter"
3) "year"
4) "12"
5) "sex"
6) "male"
hdel对key键中删除某个字段
127.0.0.1:6442> hdel hset1 name
(integer) 1
127.0.0.1:6442> hgetall hset1
1) "year"
2) "12"
3) "sex"
4) "male"
hlen统计key键字段的个数
127.0.0.1:6442> hlen hset1
(integer) 2
hset对key键某个字段赋值,并覆盖
127.0.0.1:6442> hset hset1 name Peter
(integer) 1
hexists判断key键某个字段是否存在
127.0.0.1:6442> hexists hset1 name
(integer) 1
hvals返回key键所有字段值
127.0.0.1:6442> hvals hset1
1) "12"
2) "male"
3) "Peter"
hincrby对key键某个字段的值做加法操作
127.0.0.1:6442> hgetall hset1
1) "year"
2) "14"
3) "sex"
4) "male"
5) "name"
6) "Peter"
127.0.0.1:6442> hincrby hset1 year 2
(integer) 16
127.0.0.1:6442> hgetall hset1
1) "year"
2) "16"
3) "sex"
4) "male"
5) "name"
6) "Peter"
下面是各种场景的内存使用情况:100000个key、value占用内存比较。
1. 如果是使用string类型:
实际使用内存如下:
# Memory
used_memory:71619624
used_memory_human:68.30M
used_memory_rss:78684160
used_memory_peak:1523266688
used_memory_peak_human:1.42G
used_memory_lua:35840
mem_fragmentation_ratio:1.10
mem_allocator:jemalloc-3.6.0
2. 如果是使用hash类型,且没有现在hash的element数目
实际使用内存如下:
# Memory
used_memory:71459488
used_memory_human:68.15M
used_memory_rss:76500992
used_memory_peak:1523266688
used_memory_peak_human:1.42G
3. 如果是使用hash类型,且现在hash的element数目没有超过512
实际使用内存如下:
# Memory
used_memory:9589800
used_memory_human:9.15M
used_memory_rss:13709312
used_memory_peak:1523266688
used_memory_peak_human:1.42G
4. 如果一个hash的elements超过512,那么内存消耗就和直接使用string差不多。
参数设置hash-max-ziplist-entries是512
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
实际使用内存如下:
# Memory
used_memory:71502608
used_memory_human:68.19M
used_memory_rss:75988992
used_memory_peak:1523266688
used_memory_peak_human:1.42G
参考:http://www.open-open.com/lib/view/open1454502890526.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25105315/viewspace-2122080/ ,如需转载,请注明出处,否则将追究法律责任。