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)-- 哈希类型的更多相关文章

  1. 第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型

    第二百九十六节,python操作redis缓存-Hash哈希类型,可以理解为字典类型 Hash操作,redis中Hash在内存中的存储格式如下图: hset(name, key, value)name ...

  2. redis学习笔记-01 string类型命令

    一.set key value set joker 123456 #设定key为joker,value为123456的数据 二.keys * keys * #用于查看该数据库中所有的key值 三.se ...

  3. 峰Redis学习(3)Redis 数据结构(字符串、哈希)

    第一节:Redis 数据类型介绍 五种数据类型: 字符串(String) 字符串列表(list) 有序字符串集合(sorted set) 哈希(hash) 字符串集合(set)   第二节:Redis ...

  4. 【redis 学习系列】API的理解与使用(二)

    3.哈希 几乎所有的语言都支持了哈希(hash)类型.在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value = {{field, value} ... {field, value} ...

  5. API的理解和使用——哈希类型的命令

    哈希常用的命令复习 命令 功能 hset key field value 设置哈希值 hsetnx 设置哈希值,field或键必须不存在 hget 获取某个file对应的值 hdel 删除一个或多个f ...

  6. Redis学习——数据结构上

    一.常用的全局命令 1.查看所有的键: KEYS * KEYS pattern:查找所有符合给定模式 pattern 的 key . KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能 ...

  7. 尚硅谷redis学习4-数据类型

    redis的数据类型包括String,Hash(类似于JAVA里的map),List,Set,Zset(sorted Set) String(字符串) string是redis最基本的类型,你可以理解 ...

  8. 【转】Redis学习---哈希结构内存模型剖析

    [原文]https://www.toutiao.com/i6594624365906625032/ 概述 在前文<Redis字符串类型内部编码剖析>之中已经剖析过 Redis最基本的 St ...

  9. Redis之哈希类型命令

    Hash(哈希) Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿 ...

随机推荐

  1. Python dictionary 字典

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = {' ...

  2. LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)

    题目描述 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 解题思路 二叉树转化为链表的基本 ...

  3. 一、Git的一些命令操作----创建版本库、增加文件到Git库、时光机穿梭、远程仓库

    具体详细教程请链接:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 我这里只是记录 ...

  4. Java Web Services面试

    Q. 应用集成方式有哪些? A. 应用可以采用以下方式集成: 1. 共享数据库 2. 批量文件传输 3. 远程过程调用(RPC) 4. 通过消息中间件来交换异步信息(MOM) Q. 应用集成可以采用的 ...

  5. android data binding jetpack II 动态数据更新

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  6. C++ STL 中 map 容器

    C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...

  7. 百度AI接口---身份证识别Demo

    题记:自己是做java web的,但是本人以前接触并学习很多图像的知识,所以对图像很敏感.下面以百度的一个接口,实现身份证识别案例 1.需要百度开发者AppID.SecretKey .API Key. ...

  8. Spring-AOP简单实现方式

    AOP的专业术语: 1.创建Maven管理项目: pom.xml导入依赖 <properties> <!-- springframe 版本控制 --> <spring.v ...

  9. Linux 部署 Django 系统

    一:安装uwsgi pip3 install uwsgi 二:进入项目目录下,创建uwsgi.ini配置文件 [uwsgi] # 使用nginx连接时使用功能,上线时才使用socket,指定项目执行的 ...

  10. NJCTF (easycrack)

    安装app查看.一个输入框,输入随便输入显示Try again. 放入JEB反编译. 关于输入框监听是第一次见,具体可以看看这个博客https://www.jianshu.com/p/f976c677 ...