redis是远程字典服务,客户端与redis服务通过tcp通信,远程字典服务可以想象成redis服务提供了unordered_map<string, T>的容器,key是string,value是T,T类型有多种数据结构;redis服务访问是请求回应模型;
redis是内存数据库,数据都在内存中,不可能出现数据不在内存中,而磁盘中有数据;
redis是kv数据库,kv数据库描述了redis的操作方式和存储方式;kv是通过散列表来存储和访问的;
redis是数据结构数据库,也就是kv中的v提供了丰富的数据结构,包括string,list,hash,zset,set;
怎么设计kv
所有key都是string类型的,如果是单个功能一个key,我们通常取有意义的名字;如果是相同功能有多个key(set role:10001 100形式的kv),以:作为分割,构成树状图;
value提供了丰富的数据结构,每一个value都可以指向不同的结构;比如string结构的二进制安全字符串;hash结构;有序双向循环链表结构;set无序集合结构,对顺序不关注,里面的值都是唯一的;有序集合zset结构,对顺序是关注的,里面的值是唯一的,根据member来确定唯一,根据score来确定有序;
hash结构操作
有序双向循环链表结构结构操作
有序集合zset结构操作
bit运算
redis存储结构
key是string字符串,字符串长度小于等于32,则对于sdshdr8;在二进制字符串的实现中,我们是以长度进行分割的,所有sdshdr8结构中有个len标记二进制字符串的长度,alloc是分配的长度频繁分配内存,flags说明字符串类型,比如长度是32,还是64;buf是柔性数组,初始不占用空间;
redis的抽象层次
1)关注命令的参数含义;
2)关注命令的返回具体值;
3)redis没有创建数据结构的命令,是设置和添加的同时创建;
4)redis有删除kv的命令,如果v中没有元素会自动删除kv;
5)有阻塞连接的概念brpop;
6)通过命令组合实现其他数据结构;
7)通过组合数据结构实现功能;hash+list,hash+zset;