ITPub博客

首页 > 数据库 > NoSQL > Redis 学习笔记 数据类型 - hash

Redis 学习笔记 数据类型 - hash

原创 NoSQL 作者:dbs101 时间:2016-07-15 17:12:37 0 删除 编辑


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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
喜欢oracle、redis、mysql、pg数据库

注册时间:2010-12-18

  • 博文量
    94
  • 访问量
    473130