1. Redis的存储结构是什么样的?
官网的说明:
Redis is not a plain key-value store, it is actually a data structures server, supporting different kinds of values. What this means is that, while in traditional key-value stores you associate string keys to string values, in Redis the value is not limited to a simple string, but can also hold more complex data structures.
翻译成中文就是:
Redis 不是一个普通的键值存储,它实际上是一个数据结构服务器,支持不同类型的值。这意味着,虽然在传统的键值存储中,您将字符串键与字符串值相关联,但在 Redis 中,值不仅限于简单的字符串,还可以保存更复杂的数据结构。
【嗯,简单的说,整个Redis是按Map<String, Object>的方式存储的,然后Object支持好几种类型的数据】
以下是 Redis 支持的所有数据结构的列表:【这也可以简单的理解,Object能够进行哪些类型转换】
1)Binary-safe strings【java.lang.String】
没啥好说的,类比Java的Map<String, String>
2)Lists【java.util.List】
类比Java的Map<String, List>
3)Sets【java.util.Set】
类比Java的Map<String, Set>,跟List类似,但是Sets的值是不允许有重复元素的
【注:这个key的值是不能有相同的元素,如上图所示,不能再往test_set添加“本草纲目”】
4)Sorted sets【java.util.SortedSet】
类比Java的Map<String, SortedSet>,跟set类型不一样的地方就是多了一个score作为比较权重,小的排前面
5)Hashes【java.util.HashMap】
类比Java的Map<String, Set<Map<String, String>>>,里面的Set<Map<String, String>>去重条件为里面map的key,如果这时再添加一条{"jay_music":"一路向北"}会提示“Value with same key already exist”
6)Bit arrays (or simply bitmaps)【可以使用特殊命令来处理像位数组一样的字符串值】
7)HyperLogLogs【概率数据结构,用于估计集合的基数】
8)Streams【提供抽象日志数据类型的类似地图条目的仅附加集合】