zoukankan      html  css  js  c++  java
  • redis 学习(4)-- 哈希类型

    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不好控制
  • 相关阅读:
    sicily 1259. Sum of Consecutive Primes
    如何用enable_shared_from_this 来得到指向自身的shared_ptr 及对enable_shared_from_this 的理解
    mac 上使用octave的plot错误的解决办法
    sicily 1003. Hit or Miss
    动态规划 -- 钢条切割
    求解最大子数组问题 -- 暴力求解 和 分治法求解
    sicily 1193. Up the Stairs
    sicily 1017. Rate of Return
    sicily 1034. Forest
    打印pid,写着玩。
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10931833.html
Copyright © 2011-2022 走看看