1.redis原理
reids使用了单线程架构和I/O多路复用模型来实现性能的内存数据库服务
2.简化的工作流程
发送命令,执行命令,返回结果
3.单线程处理但处理快速的原因
- 纯内存访问
- 非阻塞I/O,redis使用epoll作为I/O多路复用技术
- 单线程避免了线程切换和竞态产生的消耗
redis内部编码
1)string内部编辑
- raw:大于的39个字节的字符串
- int:8个字节的长整型
- embstr:小于等于39个字节的字符串
2)hash内部编码
- hashtable:value大于64字节或者filed个数超过512个
- ziplist:field个数比较少且没有大的value情况下使用
3)list内部编码
- linkedlist:当列表类型无法满足ziplist条件时,redis会使用linkedlist作为列表的内部实现
- ziplist:元素个数比较少(没有超过512个)或者没有大元素(没有超过64字节);
4)set内部编码
- hashtable:元素个数超过512个或者元素不为整数
- intset:元素个数比较少且为整数
5)zset内部编码
- skiplist:元素个数较少(不超过128)且元素小于64个字节
- ziplist:元素个数超过128或某元素大于64字节
redis数据结构类型
- string:字符串
- hash:哈希
- list:列表
- set:集合
- zset:有序集合
各种类型对比
数据结构 | 是否允许重复元素 | 是否有序 | 有序实现方式 | 应用场景 |
列表 | 是 | 是 | 索引下标 | 时间轴,消息队列 |
集合 | 否 | 否 | 无 | 标签,社交 |
有序集合 | 否 | 是 | 分值 | 排行榜系统,社交 |