redis数据结构
文章目录
redis IO多路复用
redis 为什么最大 512M
redis中用int来修饰len字段,int为4个字节,也就是32位,那么最大能表示 $2^32$ 次方。所以2^32/8/1024/1024=512m
redis 使用 SDS 对 string 类型 的 key 进行了压缩
|
|
|
|
redis单个key存入512M大小
1。key不要太长,尽量不要超过1024字节,这不仅消耗内存,而且会降低查找的效率。
2。key也不要太短,太短的话,key的可读性会降低
3。在一个项目中,key最好使用统一的命名模式,例如:user:123
我们熟悉的redis支持5种数据类型,其实不止5种,我们会主要介绍这5种。String(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等
一个key对应一个value。String类型是二进制安全的,意思是String可以包含任何数据。比如jpg图片或者序列化的对象。String类型是redis最基本的数据类型,一个键最大能存储512MB。
|
|
redis key 使用注意点
著作权归 https://pdai.tech所有。 链接: https://www.pdai.tech/md/db/nosql-redis/db-redis-x-redis-ds.html
- 二进制安全
因为C字符串以空字符作为字符串结束的标识,而对于一些二进制文件(如图片等),内容可能包括空字符串,因此C字符串无法正确存取;而所有 SDS 的API 都是以处理二进制的方式来处理 buf
里面的元素,并且 SDS 不是以空字符串来判断是否结束,而是以 len 属性表示的长度来判断字符串是否结束。
redis 主从哨兵
著作权归 https://pdai.tech所有。 链接: https://www.pdai.tech/md/db/nosql-redis/db-redis-x-copy.html
主从复制的作用主要包括:
- 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
- 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
主从库之间采用的是读写分离的方式。
- 读操作:主库、从库都可以接收;
- 写操作:首先到主库执行,然后,主库将写操作同步给从库。
redis list 的源码
adlist 源码
|
|
redis geo hash算法原理
https://blog.csdn.net/qq_31821675/article/details/107249646
麦叔饭后思考地图后台如何根据自己所在位置查询来查询附近餐馆的呢?苦思冥想了半天,小麦想出了个方法:计算所在位置P与北京所有餐馆的距离,然后返回距离<=1000米的餐馆。小得意了一会儿,小麦发现北京的餐馆何其多啊,这样计算不得了,于是想了,既然知道经纬度了,那它应该知道自己在西城区,那应该计算所在位置P与西城区所有餐馆的距离啊,机机运用了递归的思想,想到了西城区也很多餐馆啊,应该计算所在位置P与所在街道所有餐馆的距离,这样计算量又小了,效率也提升了。
小麦的计算思想很朴素,就是通过过滤的方法来减小参与计算的餐馆数目,从某种角度上讲,机机在使用索引技术。
一提到索引,大家脑子里马上浮现出B树索引,因为大量的数据库(如MySQL、oracle、PostgreSQL等)都在使用B树。B树索引本质上是对索引字段进行排序,然后通过类似二分查找的方法进行快速查找,即它要求索引的字段是可排序的,一般而言,可排序的是一维字段,比如时间、年龄、薪水等等。但是对于空间上的一个点(二维,包括经度和纬度),如何排序呢?又如何索引呢?解决的方法很多,下文介绍一种方法来解决这一问题。
思想:如果能通过某种方法将二维的点数据转换成一维的数据,那样不就可以继续使用B树索引了嘛。那这种方法真的存在嘛,答案是肯定的。目前很火的GeoHash算法就是运用了上述思想。
把 $ (x,y) $ 转化为 u , 二维的数变成了一个 一维的数 u, 然后 这些 数据 u 就可以通过 类似 建立索引的方式进行快速查找了。
GeoHash 算法将二维的经纬度数据映射到一维的整数,这样所有的元素都将在挂载到一条线上,距离靠近的二维坐标映射到一维后的点之间距离也会很接近。当我们想要计算「附近的人时」,首先将目标位置映射到这条线上,然后在这个一维的线上获取附近的点就行了。
|
|
redis CRC 循环冗余校验算法
CRC即循环冗余校验码,是信息系统中一种常见的检错码。大学课程中的“计算机网络”、“计算机组成”等课程中都有提及。我们可能都了解它的数学原理,在试卷上手工计算一个CRC校验码,并不是难事。但是计算机不是人,现实世界中的数学原理需要转化为计算机算法才能实现目的。实际上作为计算机专业背景人并不会经常使用或接触到CRC的计算机算法实现的原理,通常是电子学科背景的人士会接触的比较多点。计算机当然是可以直接模拟出CRC的原始算法的(我们手工计算的算法),但是效率肯定不高。那我们来看一下计算机是如何实现CRC校验码算法的吧!
|
|
redis 内存回收机制
因为 C 语言并不具备自动的内存回收功能,所以 Redis 在自己的对象系统中构建了一个引用计数( reference counting )技术实现的内存回收机制,通过这一机制,程序可以通过跟踪对象的引用计数信息,在适当的时候自动释放对象并进行内存回收。
每个对象的引用计数信息由 redisObject
结构的 refcount
属性记录:
|
|
文章作者 LYR
上次更新 2021-08-17