redis -- 学习笔记

一,原理

  redis是一个k/v(键值对)的内存存储系统,类似于memcached,redis支持多种的数据类型 基础的有:

1),基础的有:

1,string:字符串,在redis中可以用一个动态的字符串型的抽象类型(len.free,buf),O(1)去获取字符串,而C的string类型需要O(n)的时间复杂度,因为需要遍历

2,hash:哈希表,在redis中使用了hashmap 或者是压缩表的格式来实现,等价于Java语言的HashMap或者是Python语言的dict

 

3,list:列表,在redis中使用了ziplist或者是linkedlist(双向链表),新版本(3.2)之后引入了一个新的list结婚,quicklist 来实现

 

4,set:集合和数学中的集合定义一样,也支持求交,并,补,差集等运算,在redis中使用了intset或者是hashtable来实现

5,sortedset:有序集合,定义和set一样,只不过它支持排序,在redis中用zskiplist和ziplist来实现,

 

2),高级的有

HyperLogLog基数统计

get (位置)

pub/sub订阅模式

在redis中,是用一个redisObject来描述我们定义的数据对象,redisObject存储四个结构type,encoding,ptr,vm

 type:redis中上层的数据类型

encoding:redis底层的编码方式

ptr:指向的数据块的指针

vm:虚拟化的内存

二,底层数据结构

1,SDS - simple synamic string - 支持自动动态扩容的字节数组

2,list - 平平无奇的链表

3,dict - 使用双哈希表实现的, 支持平滑扩容的字典

4,zskiplist - 附加了后向指针的跳跃表

5,intset - 用于存储整数数值集合的自有结构

6,ziplist - 一种实现上类似于TLV, 但比TLV复杂的, 用于存储任意数据的有序序列的数据结构,俗称压缩表

7,quicklist - 一种以ziplist作为结点的双链表结构, 实际为ziplist和linkedlist的结合

8,zipmap - 一种用于在小规模场合使用的轻量级字典结构

三,redis如何做出的选择:

redis对象

redis中并没有直接使用以上所说的各种数据结构来实现键值数据库,而是基于一种对象,对象底层再间接的引用上文所说的具体的数据结构。

结构如下图:

字符串:

List:

Hash:

Set:

Zset:

三,优点

1,完全基于内存的数据存储,访问速度快

2,因为是基于内存的,所以增加了持久化(rob,aof),rdb简单的理解为数据快照,或者是刷盘,aof是追加日志文件

3,丰富的数据类型和应用场景以满足不同的需求

4,支持扩展,支持主从同步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值