美文网首页程序员
redis 学习(4)-- 哈希类型

redis 学习(4)-- 哈希类型

作者: 希希里之海 | 来源:发表于2019-05-27 17:16 被阅读19次

redis 学习(4)-- 哈希类型

介绍

redis 中哈希键值结构:

可以看出:哈希键值包括 key,field,value 这三部分,即键,属性,值这三部分。可以这样来表示:

key, (field, value)

即将 key, (field, value) 看成一组键值对,将 field, value 看成另一组键值对。

其中:

field 不能相同,value 可以相同

哈希其实就是一个 small redis。

API 介绍

命令 含义
hget key field 获取存储在哈希表中指定field的值
hset key field value 将哈希表中指定field的值设置为value
hdel key field1 [field2...] 删除哈希表中一个或多个field
hexists key field 判断哈希表中,指定field是否存在
hlen key 获取哈希表中字段的数量
hmget key field1 [field2...] 取哈希表中所有给定field的值
hmset key field1 value1 [field2 value2...] 同时将一个或多个field-value对设置到哈希表中
hincrby key fiel increment 为哈希表中指定field的值加上一个整型增量
hsetnx key field value 只有当哈希表中field不存在时,才设置该field的值
hincrbyfloat key field increment 为哈希表中指定field的值加上一个浮点数增量

不建议使用的 API

hgetall key
  • 含义:获取哈希表中所有字段和值
  • 时间复杂度为O(n),不建议使用
hkeys key
  • 含义:获取哈希表中的所有字段
  • 时间复杂度为O(n),不建议使用
hvals key
  • 含义:获取哈希表中的所有值
  • 时间复杂度为O(n),不建议使用

演示

hget、hset、hdel

hexists、hlen

hmget、hmset

实战

  1. 实现如下功能:记录网站每个用户个人主页的访问量
hincrby user:1:info pageview count
  1. 实现如下功能:缓存视频的基本信息(数据源在MYSQL中)伪代码
public VideoInfo get(long id) {
    String redisKey = redisPrefix + id;
    Map<String,String> hashMap = redis.hgetAll(redisKey);
    VideoInfo videoInfo = transferMapToVideo(hashMap);
    if (videoInfo == null) {
        videoInfo = mysql.get(id);
        if (videoInfo != null) {
            redis.hmset(redisKey, transferVideoToMap(videoInfo));
        }
    }
    return videoInfo;
}

将数据缓存在哈希表中,做序列化,然后取出来,做反序列化。

String 和 Hash 比较

相似的 API

String Hash
get hget
set setnx hset hsetnx
del hdel
incr incrby decr decrby hincrby
mset hmset
mget hmget

用户信息的实现

1. String 实现
set user:1:serialize(userinfo)

将用户信息序列化为 json、xml、protobuf 等对象,需要的时候再取出来。

2. String 实现 (V2)
set user:1:age 41
set user:1:link tv.sohu.com

将用户的每项信息依次设置 key 和 value。

3. Hash 实现
hset user:1:info: age 41
hset user:1:info link tv.sohu.com

将用户信息存到 哈希表中。

三种方案比较
命令 优点 缺点
string v1 编程简单;可以节省内存 序列化开销;设置属性要操作整个数据
string v2 直观;可以部分更新 内存占用较大;key较为分散
hash 直观;节省空间;可以部分更新 编程稍微复杂;ttl不好控制

相关文章

  • redis 学习(4)-- 哈希类型

    redis 学习(4)-- 哈希类型 介绍 redis 中哈希键值结构: 可以看出:哈希键值包括 key,fiel...

  • day39-Redis和MongoDB

    1. Redis redis函数学习Redis数据类型:字符串、队列、集合、哈希、有序集合临时设置密码获取密码co...

  • Redis 数据结构

    博主只是想和大家分享自己Redis学习的心得Redis支持五种数据类型:string(字符串),hash(哈希),...

  • redis数据类型

    Redis数据类型 Redis支持5中数据类型:string(字符串),hash(哈希),list(列表),set...

  • 探究Redis 04:哈希表与集合

    Redis哈希表(Hashes) Redis中的哈希表数据类型和很多编程语言的实现类似,通过键值对记录数据: 尽管...

  • redis哈希详解

    几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组。在Redis中,哈希类型是指...

  • Redis的数据结构

    Redis的数据类型 对于NoSQL类型的redis具有五种数据类型,如下: 字符串string 哈希hash 列...

  • Redis 数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),se...

  • Redis 学习笔记-基础数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),se...

  • redis数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),se...

网友评论

    本文标题:redis 学习(4)-- 哈希类型

    本文链接:https://www.haomeiwen.com/subject/oamhtctx.html