Redis(Remote Dictionary Service) 国内使用最为广泛的存储中间件,由意大利人 Salvatore Sanfilippo(网名叫Antirez)开发。
用途:缓存、分布式锁 、存储、延时队列、限流等等
1. redis的小故事为什么 Redis 的默认端口是 6379 ?
这个端口号不是随机选的,而是由手机键盘字母「MERZ」的位置决定的。「MERZ」在 Antirez(Redis的开发者网名) 的朋友圈语言中是 「愚蠢」的代名词,它源于意大利广告女「Alessia Merz」在电视节目上说了一堆愚蠢的话。
发现没?每个技术大佬都有一个有趣的灵魂。
2.redis的数据结构Redis 有 5 种基础数据结构
string (字符串):Redis 所有的数据结构都是以唯一的 key字符串作为名称,然后通过这个唯一 key 来获取相应value值,Redis 的字符串是动态字符串,是可变字符串,采用预分配冗 余空间的方式来减少内存的频繁分配。当字符串长度< 1M 时,扩容都是加倍现有 的空间,如果超过 1M,扩容时一次只会多扩 1M 的空间,最大长度为 512M。
list (列表): 是链表而不是数组,类似Java 里面的 linkedList,list 的插入和删除 *** 作快,时间 复杂度为 O(1),但是查询很慢,时间复杂度为O(n)。
set (集合):键值对是无序的唯一,相当于 Java 里面的 HashSet,字典中所有的 value 都是一个 值: NULL
hash (哈希) :是无序字典,内部实现结构上同Java 的 HashMap,数组加链表二维结构。Redis 的 字典的值只能是字符串,为了高性能不堵塞服务,所以采用了渐进式 rehash 策略。
缺点:hash 结构的存储消耗要高于单个字符串
zset (有序集合):类似于 Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set,保证了 内部value 的唯一性,它可以给每个 value 赋予一个 score,代表这个 value 的排序权重。它的内部实现用的是一种叫着「跳跃列表」的数据结构(内 部排序通过这个来实现)
扩展部分:HyperLogLog、Bloom Filter
HyperLogLog:redis高级数据结构,可在不需要太精确的业务场景下使用,比如不精 确的去重计数方案,有pfadd、pfcount、pfmerge几个常用指令,后续 补充说明。
Bloom Filter:一个不怎么精确的 set 结构,有二个基本指令,bf.add 添加元素,bf.exists 查询元素是否存在.如果一次添加多个可用bf.madd,如果需要一次查询多个 元素是否存在可用 bf.mexists。
3.redis数据持久化Redis 的持久化机制有两种:快照、AOF 日志。
对比:1.快照是一次全量备份,AOF 日志是连续的增量备份
2.快照是内存数据的二进制序列化形式,紧凑型存储;AOF日志记录的是内存数据修改的 指令记录文本。
3.AOF日志在长期的运行过程中会变的无比庞大,数据库重启时需要加载 AOF 日志进行指 令重放,这个时间就会无比漫长。所以需要定期进行 AOF 重写,给 AOF 日志进行瘦身。
4.redis同步机制一、主从同步
分布式系统的节点通常都是分布在不同的机器上进行网络隔离,这意味着必然会有
网络断开的风险,这个网络断开场景的专业词汇:「 网络分区」
CAP 原理:网络分区发生时,一致性和可用性两难全
C - Consistent 一致性
A - Availability 可用性
P - Partition tolerance 分区容忍性
Redis 的主从数据是异步同步的,所以分布式的 Redis 系统并不满足「 一致性」要求,只能保证「 最终一致性」
二、增量同步
Redis 同步的是指令流,主节点会将那些对自己的状态产生修改性影响的指令记录在本
地的内存 buffer 中,然后异步将 buffer 中的指令同步到从节点,从节点一边执行同步的指
令流来达到和主节点一样的状态,一遍向主节点反馈自己同步到哪里了 (偏移量)。复制内存 buffer 是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容
三、快照同步
首先在主库上进行一次 bgsave 将当前内存的数据全部快照到磁盘文件中,然后再将快照文件的内容全部传送到从节点。从节点将快照文件接受完毕后,立即执行一次全量加载,加载之前先要将当前内存的数据清空。加载完毕后通知主节点继续进行增量同步。
redis哨兵Redis Sentinel 集群可以看成是一个 ZooKeeper 集群,它是集群高可用的心脏,
它一般是由单数节点组成(通常大于3),这样挂了个别节点集群还可以正常运转
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)