首页
学习
活动
专区
圈层
工具
发布

【redis】hash 类型应用场景

存储结构化数据,使用 hash 类型更适合一些 关系型数据表保存用户信息: 映射关系表示用户信息: 上述场景使用 string 类型也能做到,就是需要使用 JSON 这样的数据格式 伪代码实现 UserInfo...getUserInfo(long uid) { // 根据 uid 得到 Redis 的值 String key = "user:" + uid; // 尝试从 Redis 中获取对应的值...userInfoMap = Redis 执行命令: hgetall key; // 如果缓存命中(hit) if(value !...万一只想获取其中的某个 field,或者修改某个 field 的时候,就需要把整个 JSON 都读出来,解析成对象,操作 field,再重新转成 JSON 字符,再写回去 如果使用 hash 的方式来表示...UserInfo,就可以使用 field 表示对象的每个属性(数据表的每个列),此时就可以非常方便的修改/获取任何一个属性的值了 使用 hash 的方式,确实读写 field 更直观高效,但是付出的是空间的代价

39410

Redis 哈希(Hash)使用

Redis-Hash #1 环境 redis-5.0.4 #2 Hash Redis中的Hash类型可以看成具有String Key和String Value的map容器 添加和删除操作都是O(...1)(平均)的复杂度 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿) image.png 字符串是一个key对应一个value,value中通常只有一个对应key...HSET key field value 参数 说明 HSET 往redis库中插入一条hash类型的数据 key redis中的键 field hash表中的"键"(唯一) value hash键对应的值...类型数据中所有field-value对 hgetall key 参数 说明 hgetall 取出一条hash类型数据中所有field-value对 key redis中的键 127.0.0.1:6379...参数 说明 hdel 从hash数据中删除一个字段field及其值 key redis中的键 field hash中的"键"(字段) 127.0.0.1:6379[1]> hgetall myhash

6.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Redis Hash(Hash) 复习

    应用场景 Hash也可以同于对象存储,比如存储用户信息,与字符串不一样的是,字符串是需要将对象进行序列化(比如json序列化)之后才能保存,而Hash则可以讲用户对象的每个字段单独存储,这样就能节省序列化和反序列的时间...第一维 hash 的数组位置碰撞时,就会将碰撞的元素使用链表串接起来。...请在新代码中使用HSET。 查询 查看单值 (HGET) # 获取指定的值 # HGET key field # 返回给定字段的值。...SCAN 和 KEYS * 等命令,一旦数据量大可能会导致宕机或者影响线上环境 Redis 插入和读写 如果观察到 Redis 的内存大起大落,这极有可能是因为大 key 导致的,需要定位出具体是那个...---- 普通查大key流程: SCAN 扫码每一个key TYPE 获取字段类型 用 SIZE 或者 LEN 得到他的大小 ---- Redis 其实在redis-cli 提供了这个功能 redis-cli

    2.2K30

    【Redis】解码Redis中hash类型:理解基础命令,以及内部编码方式和使用场景

    ️1.hash类型基础认识 如图下所示: 在Redis的哈希类型数据结构中,数据存储采用了一种嵌套的键值结构,称为field-value对,这与Redis整体架构中的key-value对需要明确区分。...;与hkeys相对 hvals key 上述获取field或者value,如果此时hash表中内容非常大,那么很有可能会阻塞我们的redis服务器 2.7hgetall 所有的key以及value都会获取得到...-ziplist-entries配置元素个数(默认512个) hash-max-ziplist-value来进行配置value的阈长度(默认64字节) 位置:cd /etc/redis下的redis.conf...类型的使用场景 4.1作为缓存 有以下表: 转化为redis的表示方式: 当然这里string也是可以完成的,但是如果只修改其中一个field,就需要读出整个json解析为对象后,进行修改之后,再次转化为...缺点:本身的序列化和反序列化需要一定开销,同时如果总是操作个别属性则不灵活 而使用hash的方式比较简单了 hash的表示方式 优点:简单。

    50610

    Redis使用场景

    2、数据共享分布式 String 类型,因为 Redis 是分布式的独立服务,可以在多个应用之间共享 例如:分布式Session org.springframework.session... spring-session-data-redis 3、分布式锁 String 类型setnx方法...void releaseLock(String key) { jedis.del(key); } 4、全局ID int类型,incrby,利用原子性 incrby userid 1000 分库分表的场景...,一次性拿一段 5、计数器 int类型,incr方法 例如:文章的阅读量、微博点赞数、允许一定的延迟,先写入Redis再定时同步到数据库 6、限流 int类型,incr方法 以访问者的ip和其他信息作为..."day_7_online_users" 8、购物车 String 或hash。所有String可以做的hash都可以做 key:用户id;field:商品id;value:商品数量。

    74230

    Redis使用场景

    Redis使用场景 1.1. 缓存 1.2. 排行榜系统 1.3. 计数器应用 1.4. 社交网络 1.5....消息队列系统 Redis使用场景 缓存 缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。...第 排行榜系统 排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统...Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。...Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。

    80100

    Redis 哈希(Hash)

    Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 2的32次方 - 1 键值对(40多亿)。...redis 127.0.0.1:6379> HMSET w3ckey name "redis tutorial" description "redis basic commands for caching...Redis 哈希(Hash)适合于存储部分变更数据,如用户信息,店铺配置信息等 我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户的登录信息(一个平台下可能存在多个店铺,每个店铺的配置信息可以考虑用...redis hash缓存,提高读的性能)。...那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,如下图: ?

    97010

    ②【Hash】Redis常用数据类型:Hash

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ②Redis Hash...操作命令汇总 redis hash 是一个String类型的field(字段)和value(值)的映射表。...redis中每个hash可以存储2^32-1个键值对(40多亿) 1. hset 设置一个或多个哈希表中字段的值 hset key field value [field value ...] # 设置哈希表...删除一个或多个hash表字段 hdel key field [field ...] # 删除hash表中h2的多个字段 hdel h2 f1 f3 7. hlen 获取hash表中字段的数量 hlen...key # 获取hash表h1的字段数量 hlen h1 # 获取hash表h2的字段数量 hlen h2 8. hexists 确定hash表key中的指定字段是否存在 hexists key field

    63210

    redis妙用-hash类型

    本章讲述的东西,重点不在于应用场景,因为hash能做的事情,string也都能做。所以本章分享的是,试图揣测redis官方推出hash的意义,以及实现原理。...缓存     像string类型一样,它的第一个应用场景作为缓存,我们考虑一下该表存在redis中怎么存储合适。...看完hash键的api,我们看到hash类型存在的命令,string类型都提供了,就连上面举例的缓存的应用场景,string类型也可以实现,那么这个时候hash类型的意义存在哪里?...当你有一批key它们的过期时间一致,你使用string类型,他会扫描所有的key,而使用hash类型,redis只需扫描hash的第一层。 哪些情况不适用hash?...需要使用过期功能,过期功能只能使用在key上 二进制操作命令不适用hash,如:SETBIT,GETBIT,BITOP 需要考虑数据量分布问题     这里仅解释第三点,第三点怎么理解,需要先了解redis

    1.9K11

    Redis Hash哈希(2)

    1、把所有相关的值聚集到一个key中,节省内存空间 2、只使用一个key,减少key冲突 3、当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU的消耗 Hash不适合的场景: 1、Field...不能单独设置过期时间 2、没有bit操作 3、需要考虑数据量分布的问题(value值非常大的时候,无法分布到多个节点) 存储(实现)原理 Redis的Hash本身也是一个KV的结构,类似于Java中的HashMap.../*redis.conf配置*/ hash-max-ziplist-value 64 //ziplist中最大能存放的值长度 hash-max-ziplist-entries 512 //ziplist...前面我们知道了,Redis的KV结构是通过一个dictEntry来实现的。 Redis又对dictEntry进行了多层的封装。...ht[2] redis的hash默认使用的是ht[0],ht[1]不会初始化和分配空间。 哈希表dictht是用链地址法来解决碰撞问题的。

    1.1K10
    领券