Redis(Remote dictionary service 远程字典服务)
特性:
- 快 -- 内存型数据库 key-value
- 持久化 -- 过期、淘汰策略
- 高可用 集群
- 单线程命令执行
- IO多路复用
Redis内部数据的存储结构-redis Object
1、结构体定义:
typedef struct redisObject {
unsigned type;
unsigned encoding;
unsigned lru;
int refcount;
void *ptr;
} robj;
2、字段说明
type: 数据类型
encoding: 内部编码
lru: 如果是LRU 设置的是全局的lru_clock的值 即是最近访问时间
如果是LFU,低8位设置的是使用次数(频率),高16位设置的是访问时间
refcount: 引用数,如果为0说明现在这个value没人引用,可以回收
Redis五大数据类型
1、String
内部编码(转换不可逆)
- int -- 8字节长整型 redis.conf文件中可配
- raw -- 44字节以上
- embstr -- 44字节以下 只读
2、hash(可以存储对象类型数据)
key和value中间有一个field(小key)但是field不能设置过期时间
内部编码
- ziplist
- 类似于双向链表,不同的是ziplist指向的是指针并不是具体的数据。典型的时间换空间
- 所以只能用在数据比较小的地方
- 64字节 数量<512
- hashtable
- 数组+链表的结构
- 可以扩容 有两个数组ht[0]和ht[1]
- 先为ht[1]分配空间 = ht[0].used*2
- ht[1]=ht[0]
- ht[0]删除
- ht[1]改为ht[0],创建新的ht[1]
3、list(有序可以重复)
内部编码