每天傍晚18:00一起成长!


stringhopper_stringhold_string.h

在讲到使用hash还是存储的选择前,先了解Redis的hash和结构。

以下资料引自老钱的Redis深度历险。

和hash都是Redis的一种数据结构。结构常用来缓存用户信息,通常将用户信息结构体使用JSON序列化成字符串,然后将序列化后的字符串存入Redis进行缓存。

数据结构

Redis的字符串是动态字符串,可以修改string.h,内部结构类似于Java的string.h,采用预分配冗余空间的方式来减少内存的频繁分配。

如上图锁实,内部为当前字符串实际分配的空间,一般高于实际字符串长度len。使用的指令有set, get, mset, mget等

hash

Redis的hash相当于Java的,内部结构实现与一致,即数组+链表结构

hash数据结构

I want to store a JSON payload into redis. There's really 2 ways I can do this:

1. One using a simple string keys and values.

key:user, value:payload (the entire JSON blob which can be 100-200 KB)

SET user:1 payload

2. Using hashes

HSET user:1 username "someone"

HSET user:1 location "NY"

HSET user:1 bio "STRING WITH OVER 100 lines"

Keep in mind that if I use a hash, the value length isn'
t predictable. They're not all short such as the bio example above.

Which is more memory efficient? Using string keys and values, or using a hash?

该用户也是同样的疑问,因为值的长度是不确定的,所以不知道采用还是hash存储更有效率。最新面试题整理好了,大家可以在Java面试库小程序在线刷题。

这个问题底下有个开发者回答的非常好,这里翻译出来供大家一起学习讨论,如果有更好的方案,欢迎提出来 首先,答者建议参考redis官方的内存优化的文章:,用来理解官方的开发者是内存优化方面基于什么考虑。

INCR id:users
SET user:{id} '{"name":"Fred","age":25}'
SADD users {id}

INCR id:users
HMSET user:{id} name "Fred" age 25
SADD users {id}

INCR id:users
HMSET users {id} '{"name":"Fred","age":25}'

INCR id:users
SET user:{id}:name "Fred"
SET user:{id}:age 25
SADD users {id}

。另外,Redis 系列面试题和答案全部整理好了,微信搜索Java技术栈,在后台发送:面试,可以在线阅读。

参考资料

《Redis深度历险》

原文链接:

版权声明:本文为CSDN博主「布鲁斯1990」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注