![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
文章平均质量分 89
搬砖党弟中弟
搬砖党弟中弟!
展开
-
分布式布隆过滤器
guava框架的问题笔者曾经也想过,既然guava只是个框架,那为什么不包装成一个项目,把API封装在接口中对外提供服务呢?可是实际上,这种操作所带来的问题极多,解决起来,成本高的可怕,后面会做对比讲解。redis的bitmap实现bitmap是什么?【位图不是实际的数据类型,而是在String类型上定义的一组面向位的操作】这句话很笼统,下面笔者详细解释一下这句话。bitmap的核心APISETBIT key offset valueGETBIT key offsetB原创 2020-11-24 10:30:33 · 1045 阅读 · 0 评论 -
redis集群笔记
数据存储设计redis是每个节点只存储全部数据的一部分。启动后看其中一个主机的配置文件,可见槽怎么分的,谁是主谁是从,自己(myself)是什么角色都有记录。计算过程键的桶编号计算方法// key先经过CRC16函数计算出一个值,再对16384取模HASH_SLOT = CRC16(key) mod 16384节点的增减原则:反正一共就16384份,加节点了,大家都给它匀一点儿,减节点了,大家就把它的分一分。集群内部通讯设计各个节点互相通信,保存各个原创 2020-11-13 17:00:38 · 277 阅读 · 0 评论 -
redis的哨兵笔记
每个sentinel都会监控着master、slave,并要各种信息所有sentinel组成一个集群,进行信息发布、订阅、同步......如下图,端口26379的sentinel联系上了另外两台sentinel主观下线和客观下线1. 主观下线:一个哨兵节点判定master节点down掉是主观下线,SRI_S_DOWN。2.客观下线:半数哨兵节点都判定master节点down掉,此时多个哨兵节点交换主观判定结果,才会判定master节点客观下线,SRI_O_DOWN。此时需要进..原创 2020-11-12 16:49:19 · 244 阅读 · 0 评论 -
Redis主从复制的笔记
命令从机执行slaveof [master.ip] [master.port]开始主从同步,用配置文件也可以过程简述1、slave>>>发送PSYNC命令>>> master2、master 调用 bgsave命令fork 一个后台子进程生产 rdb 文,并在缓冲区中记录从现在开始执行的写命令。3、master 发送 rdb 文件到 slave,slave 丢弃自己所有的数据并阻塞自己,专心做 rdb 读取,数据恢复。4、在这个过程中,...原创 2020-11-11 11:49:02 · 88 阅读 · 0 评论 -
分布式锁需要知道的一些基础知识点
前言分布式锁,是一个知识体系,记住,作为API调用工程师,必须要学习,必须必须必须的。但是不用你去写,你也写不了,你也写不明白,生产中都是用框架的,也没人敢用你写的。你要知道的是,哪些做法是错的?带来了什么问题?应该如何解决?至于能不能写出来,who care? 重要的是分布式锁的思想。分布式锁分类1、类cas自旋分布式锁,client只能通过轮询,尝试加锁:mysql / redis2、server有事件通知机制,client能接收后续锁的变化,无需轮询:zookeeper /原创 2020-10-13 19:19:18 · 408 阅读 · 0 评论 -
缓存和数据库数据一致性
说起这个话题,一般讨论的都是数据库的update操作和缓存delete(key)的执行策略问题。为什么不是更新缓存而是删除缓存?因为很多场景缓存的内容都是聚合数据,比如是几张表的数据聚合到一起,或者是需要经过大量计算才能得出结果的数据。所以没必要每次更新时都重新算一遍,直接删除,等更新后的get请求进来,会从新计算放入缓存中的。还有一种可能就是并发update的时候,没办法保证缓存set的顺序和数据库update的顺序是一致的。我的结论先数据库 update,后缓存 del key原创 2020-09-27 11:51:09 · 128 阅读 · 0 评论 -
缓存穿透、缓存击穿、缓存雪崩
前言发明这几个词的人就NM像个脑瘫儿,铁弱智。有问题就说明问题,整些个自创的名词真的恶心。前置知识回顾缓存就是为了减轻数据库的压力。请求——>缓存——>数据库直白讲,要是缓存里有,就不用去数据库再查一遍了。名词解释缓存穿透:要查询的数据根本就不存在,这里的不存在说的是数据库里本身就没有。比如一张表里的自增ID才到100,但大量请求查询id=200缓存击穿:要查询的数据存在,数据库里有,缓存里也有。但是我们往往在setKey的时候都会设置时间。如原创 2020-09-24 14:55:32 · 117 阅读 · 0 评论 -
LFU 起夜级李姐
Go代码实现type Node struct { key, val, freq int pre, next *Node}type DoubleLink struct { head, tail *Node length int}type LFUCache struct { freq_map map[int]*DoubleLink key_map map[int]*Node cap int}func Constructor(capaci原创 2020-09-23 11:18:58 · 172 阅读 · 0 评论 -
LRU 起夜级李姐
LRU是什么?LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。关于LRU的误区当你搜索lru相关的信息,很多都是和redis联系在一起的。而且当你基础知识储备不够的时候,很容易就陷入了一个误区,以为lru是redis才有的东西。其实不是。且,原创 2020-09-11 14:45:19 · 616 阅读 · 0 评论 -
Redis持久化
RDB:在指定的时间间隔能对你的数据进行快照存储。 AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。rdb配置save 900 1 表示900s内有1条是写入,就触发产生一次快照,可以理解为就进行一次备份。 save 300 10表示300s内有10条写入aof配置always:把每个写命令都立即同步到aof,很慢,但是很安全 everysec:每秒同步一次,出问题会丢失一秒的数据(实际生产使用这个) no:redis不处理交给OS来处理,非...原创 2020-09-04 15:28:42 · 111 阅读 · 0 评论 -
Redis事务 笔记
放弃执行事务事务执行失败情况1事务在执行EXEC之前,入队的命令可能会出错。比如说,命令可能会产生语法错误(参数数量错误,参数名错误,等等),或者其他更严重的错误,比如内存不足(如果服务器使用maxmemory设置了最大内存限制的话)。事务执行失败情况2命令可能在EXEC调用之后失败。事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面,诸如此类。watch监控WATCH命令可以为 Redis 事务提供 check-and-s...原创 2020-09-03 16:48:26 · 85 阅读 · 0 评论 -
Redis命令实战:使用场景记录
String类型计数器类INCR key相当于 i++将key中储存的数字值增一。如果key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。INCRBY key increment相当于 i +=increment将key所储存的值加上增量increment。如果key不存在,那么key的值会先被初始化为0,然后再执行INCRBY命令。INCRBYFLOAT key increment为key中所储存的值...原创 2020-09-03 15:10:30 · 1239 阅读 · 0 评论 -
布隆过滤器 极简入门
前言:搜索缓存穿透问题,常常看到解决方案中提到 布隆过滤器。那么这个东西是啥意思?干什么用的?怎么用?原理是什么?请看本文的极简入门教程。(严格说,本文是笔者在学习时,提取出的纯干货,力求一看就懂)1、应用场景解决缓存穿透问题,业界通用2种方案缓存空对象 or 布隆过滤器缓存空对象:实现简单,不会出错布隆过滤器:实现复杂,存在错误率2、布隆过滤器 的 作用把你要缓存的所有key全都塞进布隆过滤器中。在查询缓存的时候,先拿着key去布隆过滤器中查一下,看是否存在,不存在就可原创 2020-08-22 17:09:46 · 249 阅读 · 0 评论 -
《Redis设计与实现》[压缩列表]章节笔记
1、什么是压缩列表?由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构。一个压缩列表可以包含任意多个节点(entry), 每个节点可以保存一个字节数组或者一个整数值。2、有什么好处?节约内存3、整体结构如何?4、节点的结构每个压缩列表节点可以保存一个字节数组或者一个整数值(说白了还是一个节点保存一个元素)encoding和content 熟悉不?参考上一篇【整数集合】的笔记previous_entry_length 必须要大书特书原创 2020-08-07 11:45:15 · 126 阅读 · 0 评论 -
《Redis设计与实现》[整数集合]章节笔记
1、什么是整数集合?整数集合(intset)是集合键的底层实现之一,是 Redis 用于保存整数值的集合抽象数据结构。(集合对象(set)的编码可以是intset或者hashtable)2、既然集合对象set底层有2种数据结构实现,那么什么时候用整数集合呢?当集合对象可以同时满足以下两个条件时, 对象使用intset编码:集合对象保存的所有元素都是整数值; 集合对象保存的元素数量不超过512个;(这个512是可以通过配置文件修改的,不用记)不能满足这两个条件的集合对象...原创 2020-08-06 19:16:12 · 167 阅读 · 0 评论 -
《Redis设计与实现》强烈推荐
前言:是否有听过有些面试官这么问或者博客这么写:说说redis有几种数据类型?你肯定知道怎么答:string、list、hash、set、zset自从我看了这本书,我发现了这种说法是极其不专业的,原因稍后分析。先看书中定义:【Redis 并没有直接使用这些数据结构来实现键值对数据库, 而是基于这些数据结构创建了一个对象系统, 这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象】对,没有错,面试官想问的是这5个,你也知道要回答的是这5个。但是,他们不是数原创 2020-08-06 15:52:20 · 514 阅读 · 0 评论