前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis 学习(3)-- 哈希类型

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

作者头像
希希里之海
发布2019-05-31 11:04:19
5420
发布2019-05-31 11:04:19
举报
文章被收录于专栏:weixuqin 的专栏weixuqin 的专栏

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

介绍

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. 实现如下功能:记录网站每个用户个人主页的访问量
代码语言:javascript
复制
hincrby user:1:info pageview count

  1. 实现如下功能:缓存视频的基本信息(数据源在MYSQL中)伪代码
代码语言:javascript
复制
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 实现
代码语言:javascript
复制
set user:1:serialize(userinfo)

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

2. String 实现 (V2)
代码语言:javascript
复制
set user:1:age 41
set user:1:link tv.sohu.com

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

3. Hash 实现
代码语言:javascript
复制
hset user:1:info: age 41
hset user:1:info link tv.sohu.com

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

三种方案比较

命令

优点

缺点

string v1

编程简单;可以节省内存

序列化开销;设置属性要操作整个数据

string v2

直观;可以部分更新

内存占用较大;key较为分散

hash

直观;节省空间;可以部分更新

编程稍微复杂;ttl不好控制

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis 学习(3)-- 哈希类型
    • 介绍
      • API 介绍
        • 演示
          • 实战
            • String 和 Hash 比较
              • 相似的 API
              • 用户信息的实现
          相关产品与服务
          文件存储
          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档