PHP-关于redis中hset的存储问题?

意见反馈 意见反馈 主题:991 回复:2082

PHP-关于redis中hset的存储问题?

瑾兮 发布于 2017-04-09 字数 261 浏览 1030 回复 1

现在程序设计想这样:
利用$redis->hSet('h', 'field1', 'value1');
我用这样redis方式存储上千万个field1,field2,field3...(大约每个key里有5000多万个)
有问题吗?
请有做过类似存储方案的通知给与设计支持,
或者说给出类似更合理的方案!

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

晚风撩人 2017-09-20 1 楼

由于redis单线程模型缘故,如果hash内部map成员很多,遍历操作可能会比较耗时,而其它客户端的请求可能会不响应。如果有要用redis做大数据量的数据索引排序等,最好是根据redis集合特性自己构造一些数据结构。
下面是hash的常见应用场景,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,下图

用户id做为key, value是一个map, map的key为成员属性名field, value为属性值
HashMap实际有2种不同实现, 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。