redis数据
一、redis是什么
redis是内存数据库、数据结构(string,list,set,zset(排序集合),hash)数据库以及kv数据库。
二、redis理解
操作 redis 就相当于操作 stl unordered_map
template class<T>;
unordered_map<string, T>
//unordered_map 和 map?
//map 红⿊树 时间复杂度 logn
//unordered_map hashtable 时间复杂度 o(1)
T ⽀持 string,list, set, zset, hash
#include <unordered_map>
#include <unordered_set>
#include <set>
#include <string>
using namespace std;
// string
unordered_map<string, string> strings;
// list
unordered_map<string, list<string>> lists;
// set order by
unordered_map<string, unordered_set<string>> sets;
// zset
unordered_map<string, skiplist<string, string>> zsets;
// hash
unordered_map<string, unordered_map<string, string>> hashes;
要点:
- redis中的字符串并非c结构中的字符串,它是⼀个⼆进制安全的字符串(不会被特殊字符
(\0)隔断);所以string中长度包含信息来标识字符串的⻓度; - map 采⽤红黑树(平衡二叉搜索树)实现,⽽ unordered_map 采⽤哈希表实现;更接近
redis dict 的实现;redis 中的 dict 也是采⽤哈希表实现的; - 红⿊树是有序的树结构,查找需要⽐较 key,时间复杂度为 o(logn);⽽哈希表是⽆序的,查找不需要⽐较 key,因为它先将 key 通过 hash 函数⽣成整数,然后映射到数组当中,它的时间复杂度为o(1);
- set ⼀般采⽤有序的结构来实现,因为集合中可能涉及到交、并、差集的运算
- skiplist 是⼀个多层级的有序链表,并且⽅便进⾏范围查询;与B+树实现的功能类似,但⽐B+效率要高;
三、redis操作
四、redis数据存储
redis数据存储规则
string结构以及应用
相当于操作:unordered_map<string, string>
unordered_map<key, value>
主要命令以及应用:
设置单值
存储对象
累加器
分布式锁
list结构以及应里插用
quicklist 当中的节点 存储的就是 压缩列表
相当于操作 unordered_map<string, list<string>>
unordered_map<key, list<value>>
栈(先进后出 FILO)
队列(先进先出 FIFO)
阻塞队列(blocking queue)
朋友圈消息推送
hash结构以及应用
相当于操作 unordered_map<string, unordered_map<string, string>>
unordered_map<key, unordered_map<field, value>>
存储对象
购物车
set结构以及应用
相当于操作 unordered_map<string, unordered_set<string>>
unordered_map<key, unordered_set<member>>
抽奖
共同关注
可能认识的人
zset结构以及应用
相当于操作 unordered_map<string, skiplist<string, string>>
unordered_map<key, skiplist<member, score>>
百度热榜