一,redis的key和value可以存储的最大值是多少?

虽然key的大小上限是512M,但是一般不建议超过 1kb
value的最大值也会512M,对于String类型的value值上限为512M,而集合,链表,哈希等key类型,单个元素的value上限也为512M。

二,怎么利用redis实现数据去重

set:
可以使用redis的set集合去重,也可以快速判断某一个元素是否在集合内,如果数据上亿,消耗会很大
bit
也可以会用bit 它可以用来实现比set内存高度压缩的计数,他通过一个bit设置为1或0,表示存储某个元素是否存在信息。
HyperLogLog
HyperLogLog可以仅用12k左右的内存,实现上亿的唯一计数,而且误差控制在百分之一左右。
bloomfilter
bloomfilter布隆过滤器是一种占用空间很小的数据结构,它由一个很长的二进制向量和一组Hash映射函数组成,它用于检索一个元素是否在一个集合中

三,redis什么时候需要序列化?redis序列化的方法都有那些?

序列化:
将java对象转换成字节流的过程
反序列化:
将字节流转换成java对象的过程
为什么需要序列化?
比如积木,组装好的积木太大不好拿,这是我们可以拆分成小块,这个过程就是序列化。
再组装回去的过程就是反序列化
想把内存中的对象状态保存到一个文件中或者数据库中的时候
想用套接字在网络上传送的时候,都需要序列化
redisSerialize接口是redis序列化接口,用于redis key和value的序列化

四,MySQL的B+数的高度是怎么计算的?

​ 例如100万数据int类型

​ Innodb存储引擎最小存储单元是页,一页是16k,

​ B+树叶子存的是数据内部节点存的是键值+指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而再去数据页找到需要的数据。

​ 假设B+数的高度是2的话,有一个根节点和若干个叶子结点。

​ 这课B+数的存放总记录数=根节点的指针数*叶子结点记录行数

  • 如果一行记录数据的大小是1kb的话那么单个的叶子结点可以存储的记录数=16k/1k=16k

  • 非叶子节点内存放多少指针呢?假设主键ID为bigint类型,长度是8字节(int类型32位 4字节),而指针大小在Innodb源码总设置的是6字节,所以就是8+6=14个字节,16k/14b=16*1024b/14b=1170

    因此,一颗高度为2的B+数,能存放117016=18720条这样的数据记录。同理一棵树的高度为3的话,能存放1170 * 117016=21902400,也就是两千多万条左右的数据。1-3层已经足够存放千万级的数据存储