慕课网-一站式学习Redis从入门到高可用分布式实践-第2章-API的理解和使用-hash

hash

1.哈希键值结构

 

2.特点

1)Mapmap?

2)Small redis

3)field 不能相同,value可以相同

 

3.重要API

1)hget

获取hash key对应的field的value

hget key field

o(1)

2)hset

设置hash key对应的field的value

hset key field value

o(1)

3)hdel

删除hash key对应的field的value

hdel key field

o(1)

hset user:1:info age 23
hget user:1:info age
hset user:1:info name ronaldo
hgetall user:1:info
hdel user:1:info age
hgetall user:1:info

4)hexists

判断hash key是否有field

hexists key field

o(1)

5)hlen

获取hash key field的数量

hlen key

o(1)

hgetall user:1:info
hexists user:1:info name
hlen user:1:info

6)hmget

批量获取hash key的一批field对应的值

hmget key field1 field2 ... fieldN

o(n)

7)hmset

批量设置hash key的一批field value

hmset key field1 value1 field2 value2 ... fieldN valueN

o(n)

hmset user:2:info age 30 name kaka page 50
hlen user:2:info
hmget user:2:info age name

 

实现如下功能

1.记录网站每个用户个人主页的访问量

hincrby user:1:info pageview count

2.缓存视频的基本信息(数据源在mysql中)伪代码

public VideoInfo get(long id) {
    String redisKey = redisPrefix + id;
    Map<String,String> hashMap = redis.hgetAll(redisKey);
    VideoInfo videoInfo = transferMapToVideo(hasMap);
    if (videoInfo == null) {
        videoInfo = mysql.get(id);
        if (videoInfo != null) {
            redis.hmset(redisKey, transferVideoToMap(videoInfo));
        }
    }
    return videoInfo;  
}

8)hgetall

返回hash key对应所有的field和value

hgetall key

o(n)

9)hvals

返回hash key对应所有的value

hvals key

o(n)

10)hkeys

返回hash key对应所有的field

hkeys key

o(n)

hgetall user:2:info
hvals user:2:info
hkeys user:2:info

小心使用hgetall,小心使用牢记单线程

 

string 对比 hash

 

 

哈希 = small redis

 

如何更新用户属性?

方法一

 

方法二

 

方法三

hash 修改

 

hash添加

 

 

三种方案比较 

 

 

 

查缺补漏 

11)hsetnx

设置hash key对应的field的value(如field已经存在,则失败)

hsetnx key field value

o(1)

12)hincrby

hash key对应的field的value自增intCounter

hincrby key field intCounter

o(1)

13)hincrbyfloat

hincrby浮点版型

hincrbyfloat key field intCounter

o(1)

 

哈希总结

 

posted on 2019-11-14 15:21  herisson_pan  阅读(15)  评论(0)    收藏  举报

导航