Redis 中数据库的选择
共有16个数据库 [0 - 15号], 彼此之间相互隔离, 互不影响
默认使用 0 号
select dbindex
选择数据库
flushdb [async | sync]
async 异步方式
sync 同步方式
Redis 中简单数据类型在 C++ 和 Java 中的类似实现
当你使用上述的某一数据结构, redis 会给你声明, 我给你一个符合该复杂度的数据结构, 但是底层如何实现, 用什么实现, 是不是我声明的这个数据结构, 你别管, 这个具体的数据实现方式, 就是内部编码 (傲娇脸)
Redis 中简单数据结构的内部编码
string
- raw 最基本的字符串 (底层是持有一个 char 数组 [C++], 或者 byte 数组 [Java]) (C++) — (C++ 中里的 char 是1个字节, 等价于 Java 中的 char , 而 Java 中的 char 是2个字节的)
- int 通常用来实现 “计数” 等功能
- embstr 针对短字符串进行的特殊优化
hash
- hashtable 是最基本的哈希表, redis 内部的哈希表的实现, 整体思想和 Java 标准库中的 HashTable 相似, 但是实现方式不太一样
- ziplist 在哈希表里面元素较少时, 会优化成 ziplist (压缩列表, 能够节省时间 [长度就两三个元素的哈希表, 单开一个哈希是不是有点浪费, 直接用列表有没有可能更快? 毕竟哈希的查找方法和链表的查找方法不太一样] )
list
- linkedlist 链表, 其实现类似于 C++ 中的 deque(双端队列)
- ziplist 压缩列表 从 redis3.2 开始, quicklist 代替了 linkendlist 和 ziplist , 同时兼顾二者的优点, quickedlist 是一个链表, 每个元素又是一个 ziplist, 折衷考虑到 空间和效率
set
- hashtable
- intset该集合中存取的都是整数类型
zset
- skiplist 跳表, 也是链表, 不同于普通的链表, 每个节点上有多个指针域, 巧妙 搭配这些指针域的指向,可以实现跳跃查找 O(logN)
- ziplist 压缩列表