
Redis原理
alex-zhou96
男儿欲遂平生志,五经勤向窗前读。
展开
-
缓存的问题
缓存穿透缓存穿透是值缓存和数据库中都没有数据,而用户不断发起请求,如发起id为特别大或者不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。解决办法可以为这些key在缓存中设置对应的值为null,后面查询这个key的时候就不用查询数据库了boolem Filter使用不领过滤器,我们把有数据的key都放在布隆过滤器中,每次查询的时候都先去布隆过滤器中判断,如果没有直接返回null缓存击穿—大量请求一个key在高并发的情况下,大量的请求同时查询同一个key时,此时这个key正好失原创 2020-06-15 14:53:20 · 244 阅读 · 0 评论 -
布隆过滤器
文章目录介绍布隆过滤器Redis中的布隆过滤器基本使用布隆过滤器的参数配置(和误判率有关)原理结论应用介绍去重的问题如果存储在关系数据库里,去重就需要频繁的对数据库进行exists查询,当系统并发量很高时,数据库是很难抗住压力的若使用缓存,,但是当许多的历史记录全部缓存起来,那得浪费多大存储空间?而且这个存储空间这时,布隆过滤器就可以使用到,它就是专门用来解决去重问题,它在起到去重的同时,在空间上还能节省90%布隆过滤器节省内存,判断是否存在,大量数据过滤本质:将内存中的数据转换为原创 2020-06-15 13:41:31 · 407 阅读 · 0 评论 -
Redis对象的实现以及内存的管理
文章目录抽象出来的的对象使用对象的好处对象的类型和编码底层存储RedisObject对象字符串对象编码编码的转换列表对象编码hash对象集合对象有序集合对象类型检查和命令多态内存回收抽象出来的的对象Redis没有直接使用前面的几种数据结构来创建键值对数据库,而是对于这些数据结构来创建了一个对象系统。这个系统包含了字符串对象,列表对象,哈希对象,集合对象,有序集合对象使用对象的好处在指向命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令根据不同的使用场景,对对象设置多种不同的数据结原创 2020-06-14 22:28:35 · 568 阅读 · 0 评论 -
Redis数据类型与底层实现
文章目录SDS(简单动态字符串)SDS的定义SDS与C字符串的区别:其实就是改善,根据自身需求完善数据结构常数复杂度获取字符串长度杜绝缓冲区溢出(类似StringBuilder)减少修改字符串时带来的内存重分配次数(分配合适的内存大小)空间预分配(减少重分配次数)惰性删除二进制安全兼容部分C字符串链表链表和链表节点的实现字典底层数据结构存储key的问题哈希算法解决键重提rehash何时rehash如何rehash渐进式rehash小结跳跃表Redis中应用跳跃表的实现小结整数集合作用实现元素类型升级升级的好原创 2020-06-14 19:55:12 · 891 阅读 · 0 评论 -
Redis实现分布式锁
文章目录分布式场景下的同步问题分布锁的实现获取锁删除锁可重入性锁(在Java中可以使用ThreadLocal)集群环境下分布式锁的问题RedLock算法Redis的key可以作为分布式锁,下面我们介绍一下分布式锁的一些基本知识:分布式场景下的同步问题在单机系统下我们可以使用synchrtonized和lock等同步机制实现同步在多机分布式系统下,我们可以采用图中的一些同步方法;这里我们重点介绍Redis实现分布式锁的问题分布锁的实现分布式锁本质上要实现的目标就是在Redis里面占一个原创 2020-06-13 19:54:05 · 291 阅读 · 0 评论 -
Redis的哨兵机制
文章目录哨兵机制介绍启动并初始化Sentinel服务器初始化服务器对Sentinel自身状态进行初始化--使用Sentinel专用代码建立与主服务器的连接--初始化Sentinel状态(往往根据文件配置,确定其主服务器)初始化Sentinel状态的masters属性(msters字典的初始化是根据被载入的Sentinel配置文件来进行的)创建连向主服务器的网络连接(主服务器同Sentinel建立Socket建立连接)Sentinel获取主服务器的信息---获取主服务器的从服务器的相关信息Sebtinel建立原创 2020-06-13 16:11:04 · 887 阅读 · 0 评论 -
Redis复制(主从复制)
文章目录CAP原理Redis的最终一致性复制概念旧版复制功能实现同步(也叫快照复制)命令传播(同步完成之后的更新保持一致)旧版复制功能的缺陷新版复制功能的实现部分重同步的实现(增量同步)复制偏移量复制积压缓冲区服务器运行IDPSYNC的实现复制的实现(详细版本)设置主服务器的地址和端口建立套接字发送PING命令:测试连通性身份验证发送端口信息同步命令传播心跳检测CAP原理 C - Consistent , 一致性 A - Availability , 可用性 P - Partition to原创 2020-06-12 13:01:17 · 796 阅读 · 0 评论 -
Redis缓存淘汰策略(对内存的管理)
文章目录问题出现的背景LRU算法Redis使用的LRU算法算法的底层数据结构何时执行,如何执行问题出现的背景当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap)。交换会让 Redis 的性能急剧下降,对于访问量比较频繁的 Redis 来说,这样龟速的存取效率基本上等于不可用。在生产环境中我们是不允许 Redis 出现交换行为的,为了限制最大使用内存,Redis 提供了配置参数maxmemory限制内存超出期望大小。当实际内存超出maxmemory,Redis原创 2020-06-11 18:24:48 · 352 阅读 · 0 评论 -
Redis的IO模型以及客户端与服务端设计
文章目录IO模型--事件驱动文件事件(通常是与客户端的交互)文件事件的处理器时间事件(服务器的自身触发的一些维护操作)分类底层实现时间事件应用实例:serverCron函数事件的调度与执行客户端--如何设计客户端底层的数据结构`时间`:客户端的创建与关闭客户端的创建AOF文件的伪客户端客户端的关闭服务器IO模型–事件驱动Redis服务器是一个事件驱动程序,服务器需要处理一下两类文件事件:Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服原创 2020-06-11 17:00:12 · 351 阅读 · 0 评论 -
Redis持久化RDB与AOF
文章目录RDB持久化存储的原理文件的创建--- SAVE和BGSAVE(手动执行)文件的载入---自动载入自动将数据库状态进行保存(何时写入)---针对Bgsave命令()设置保存条件检查保存条件是否满足触发快照的时机RDB文件结构database部分优缺点AOF持久化AOF持久化的实现命令追加何时写入到文本文件(类似RDB的写入)AOF文件的载入与数据还原AOF重写AOF重写概念AOF后台重写AOF优缺点二者对比如何选择因为Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将原创 2020-06-11 14:45:31 · 492 阅读 · 0 评论 -
Redis数据库的存储结构与过期策略
文章目录服务器中的数据库切换数据库数据库如何存储数据底层存储结构--字典添加键删除键更新键对键取值对键的其他操作数据库键的生存时间指令如何存储键的过期时间如何删除过期的键可选删除策略Redis的删除策略惰性删除策略的实现定时删除策略的实现过期键对RDB的影响过期键对AOF的影响复制服务器保存数据库的方法服务端切换数据库的方法数据库保存键值对的方法保存键的过期时间的方法服务器自动删除过期键的方法服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redisServer结构的d原创 2020-06-11 12:37:06 · 652 阅读 · 0 评论