![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
Java技术践行者
让我们一起在开发这条路,默默深耕,用技术改变生活
展开
-
AOF详解
AOF 命令同步同步命令到 AOF 文件的整个过程可以分为三个阶段:1:命令传播:Redis 将执行完的命令、命令的参数、命令的参数个数等信息发送到 AOF 程序中。2:缓存追加:AOF 程序根据接收到的命令数据,将命令转换为网络通讯协议的格式,然后将协议内容追加到服务器的 AOF 缓存中。3:文件写入和保存:AOF 缓存中的内容被写入到 AOF 文件末尾,如果设定的 AOF 保存...原创 2020-03-08 19:26:46 · 1766 阅读 · 0 评论 -
Redis事务内部机制
1:MULTI命令的执行标记着事务的开始2:命令入队客户端进入事务状态之后, 服务器在收到来自客户端的命令时, 不会立即执行命令, 而是将这些命令全部放进一个事务队列里, 然后返回QUEUED, 表示命令已入队。每个Redis客户端都有自己的事务状态,事务状态包含一个事务队列,一个已入队命令的计数器。typedef struct multiState{//事务队列,FI...原创 2020-03-08 19:26:11 · 127 阅读 · 0 评论 -
Redis中Bitmap的使用
优势1.基于最小的单位bit进行存储,所以非常省空间。2.设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的。3.二进制数据的存储,进行相关计算的时候非常快。4.方便扩容限制redis中bit映射被限制在512MB之内,所以最大是2^32位。建议每个key的位数都控制下,因为读取时候时间复杂度O(n),越大的串读的时间花销越多。操作命令...原创 2020-03-08 19:21:30 · 758 阅读 · 0 评论 -
Redis结合LUA的使用
前文:redis事务的实现原理是把事务中的命令先放入队列中,当client提交了exec命令后,redis会把队列中的每一条命令按序执行一遍。如果在执行exec之前事务中断了,那么所有的命令都不会执行;如果执行了exec命令之后,那么所有的命令都会按序执行。但如果在事务执行期间redis被强制关闭,那么则需要使用redis-check-aof 工具对redis进行修复,删除那些部分执行的命令。...原创 2020-03-08 19:21:52 · 201 阅读 · 0 评论 -
Redis常用数据结构及内部编码
1,String: raw,int , embstr2,hash: hashtable,ziplist3:list:linkedlist,ziplist4:set:hashtable,intset5:zset:skiplist,ziplist设计的好处:1:可以改进内部编码,对外的数据结构和命令没有影响2:多种内部编码实现可以在不同场景下发挥各自优势,例如 z...原创 2020-03-07 14:37:38 · 154 阅读 · 1 评论 -
Redis内存回收策略
内存上限Redis可以通过 maxmemory 参数来限制最大可用内存,主要为了避免Redis内存超过操作系统内存,从而导致服务器响应变慢甚至死机的情况。maxmemory 参数限制的是Redis的对象内存大小,也就是 used_memory 对应的内存大小。由于内存碎片的存在,所以Redis服务器实际占用的内存是要超过 maxmemory 的。所以我们在设置Redis内存上限的时候要预留...原创 2020-03-07 14:36:01 · 161 阅读 · 0 评论 -
Redis优化--LRU和LFU区别
一:LRURedis维护了一个24bit(位)时钟,可以简单理解为当前系统的时间戳,每隔一定时间会更新这个时钟。每个key对象内部同样维护了一个24位的时钟,当新增key对象的时候会把系统的时钟赋值到这个内部对象时钟。比如我现在要进行LRU,那么首先拿到当前的全局时钟,然后再找到内部时钟与全局时钟距离时间最久的(差最大)进行淘汰,这里值得注意的是全局时钟只有24位,按秒为单位来表示才能存储19...原创 2020-03-07 14:35:25 · 2103 阅读 · 0 评论 -
Redis---动态字符串,链表,字典(数据结构)
SDSRedis构建了一种简单动态字符串,simple dynamic string , SDS,用作默认字符串。结构:struct sdshdr{int len; //记录buf数组中已使用字节的数量int free; // buf数组中未使用字节的数量char bug[]; // 字节数组,用于保存字符串}SDS和C字符串的区别1:获取字符串长度的复杂度...原创 2020-03-07 14:34:20 · 171 阅读 · 0 评论 -
HLL 算法(HyperLogLog)
HyperLogLog,下面简称为HLL,它是 LogLog 算法的升级版,作用是能够提供不精确的去重计数。存在以下的特点:代码实现较难。能够使用极少的内存来统计巨量的数据,在 Redis 中实现的 HyperLogLog,只需要12K内存就能统计2^64个数据。计数存在一定的误差,误差率整体较低。标准误差为 0.81% 。误差可以被设置辅助计算因子进行降低。特点--关键...原创 2020-03-07 14:32:54 · 2746 阅读 · 0 评论 -
RDB持久化及底层编码结构
一:核心函数RDB 功能最核心的是rdbSave和rdbLoad两个函数1:rdbSave函数负责将内存中的数据库数据以 RDB 格式保存到磁盘中, 如果 RDB 文件已存在, 那么新的 RDB 文件将替换已有的 RDB 文件。2:rdbLoad用于将 RDB 文件中的数据重新载入到内存中二:SAVE和BGSAVE的执行状态在保存 RDB 文件期间, 主进程会被阻...原创 2020-03-07 14:32:00 · 281 阅读 · 0 评论 -
Redis文件事件和时间事件
一:文件事件1:文件事件处理器Redis基于Reactor模式开发了自己的网络时间处理器:这个处理器被称为 文件事件处理器。1:文件事件处理器使用IO多路复用来同时监听多个套接字,并根据套接字目前执行的任务来为套接字关联不同的 事件处理器2:当被监听的套接字准备好执行 连接应答,读取,写入,关闭等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事...原创 2020-03-07 14:22:17 · 561 阅读 · 0 评论 -
哨兵机制
Sentinel(哨兵、哨岗)是Redis 的高可用性的解决方案:有一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。一:获取主服务器信息Sentinel 默认每十秒一次,通...原创 2020-03-07 14:20:57 · 319 阅读 · 0 评论 -
集群,分片,和内部数据结构
一:节点集群启动节点Redis服务器启动时会根据 cluster-enabled 配置选项是否为yes 判断是否开启集群模式,节点会继续使用单机模式中的服务器组件,比如:节点会继续使用文件事件处理器来处理命令请求和返回命令回复。节点会继续使用时间事件处理器来执行 serverCron 函数, 而 serverCron 函数又会调用集群模式特有的 clusterCron 函数:clu...原创 2020-03-07 14:20:03 · 258 阅读 · 0 评论 -
Pipeline和Batch
利用Batch(mget,mset之类的单条命令)处理多个key的命令,一次性将多个命令提交过去,极大的较少了在网络传输方面带来的损耗PipeLine管道 Pipeline可以从client(客户端)打包多条命令后一起发出,redis服务端会在处理完多条命令后将多条命令的处理结果打包到一起返回给客户端,与单条命令顺序执行相比,使用Pipeline极大的减少了客户端与redis se...原创 2020-03-07 14:18:37 · 530 阅读 · 0 评论 -
Redis之基础NO.1(数据结构和内部编码)
一:全局命令1,查看所有键: keys * ,时间复杂度 O(n)2,键总数: dbsize ,时间复杂度是 O(1)3,检查键是否存在:exists key ,存在返回1,否则返回04,删除键: del key ,成功则返回删除键的个数,否则0。支持删除多个键5,键过期: expire key secondsttl 命令返回键的剩余过期时间,有三种返回值大于等...原创 2019-09-03 12:07:07 · 149 阅读 · 1 评论 -
Redis replication 主从复制
一:redis replication的核心机制(1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量(2)一个master node是可以配置多个slave node的(3)slave node也可以连接其他的slave node(4)slave node做复制的时候,是不会block master...原创 2019-08-22 13:37:41 · 133 阅读 · 0 评论 -
Redis 缓存 消息订阅 事务 雪崩 穿透
RedisRedis五种数据类型和消息订阅String命令String是最常用的一种数据类型,普通的key/value存储都可以归为此类1:set/get设置key对应的值为String类型的value获取key对应的值2:mget批量获取多个key的值,如果可以不存在则返回nil3:incr && incrbyincr对key对应...原创 2019-07-20 09:51:07 · 194 阅读 · 0 评论