Redis 选择hash还是string 存储数据?

在stackoverflow 看到一个问题,Redis strings vs Redis hashes to represent JSON: efficiency?内容如下: I want to store a JSON payload into redis. There’s really 2 ways I can do this: 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 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? ...

2019-06-22 · 3 min · 457 words

redis 学习笔记

这篇 redis 学习笔记主要介绍 redis 的数据结构和数据类型,并讨论数据结构的选择以及应用场景的优化。 redis 是什么 Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景。 Redis 数据结构 动态字符串 (Sds) 双端列表 (LINKEDLIST) 字典 跳跃表 (SKIPLIST) 整数集合 (INTSET) 压缩列表 (ZIPLIST) HUGOMORE42 动态字符串 Sds (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示,它被用 在几乎所有的 Redis 模块中 Redis 是一个键值对数据库(key-value DB),数据库的值可以是字符串、集合、列表等多种类 型的对象,而数据库的键则总是字符串对象 在 Redis 中, 一个字符串对象除了可以保存字符串值之外,还可以保存 long 类型的值当字符串对象保存的是字符串时,它包含的才是 sds 值,否则的话,它就 是一个 long 类型的值 动态字符串主要有两个作用: 实现字符串对象(StringObject) 在 Redis 程序内部用作 char * 类型的替代品 [双端列表] (http://origin.redisbook.com/internal-datastruct/adlist.html) 双端链表还是 Redis 列表类型的底层实现之一,当对列表类型的键进行操作——比如执行 RPUSH 、LPOP 或 LLEN 等命令时,程序在底层操作的可能就是双端链表 双端链表主要有两个作用: 作为 Redis 列表类型的底层实现之一; 作为通用数据结构,被其他功能模块所使用; 字典 字典(dictionary),又名映射(map)或关联数组(associative array), 它是一种抽象数据结 构,由一集键值对(key-value pairs)组成,各个键值对的键各不相同,程序可以将新的键值对 添加到字典中,或者基于键进行查找、更新或删除等操作 ...

2017-09-17 · 3 min · 543 words