Redis 跳表

前言

本文整体脉络如下图所示,笔者会从有序集合的基本使用到跳表的源码分析和实现,让你会对 Redis 的有序集合底层实现的跳表有着更深刻的理解和掌握。

跳表在 Redis 中的运用

这里我们需要先了解一下 Redis 用到跳表的数据结构有序集合的使用,Redis 有个比较常用的数据结构叫**有序集合(sorted set,简称 zset)**,正如其名它是一个可以保证有序且元素唯一的集合,所以它经常用于排行榜等需要进行统计排列的场景。

阅读更多

Redis 内存淘汰策略

Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小。

1、通过配置文件配置

通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小

1
//设置Redis最大占用内存大小为100Mmaxmemory 100mb复制代码
阅读更多

数据分区理论

分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。

哈希算法

我们可能很快就想到了:哈希算法。因为对同一个关键字进行哈希计算,每次计算都是相同的值,这样就可以将某个 key 确定到一个节点了,可以满足分布式系统的负载均衡需求。

哈希算法最简单的做法就是进行取模运算,比如分布式系统中有 3 个节点,基于 hash(key) % 3 公式对数据进行了映射。

如果客户端要获取指定 key 的数据,通过下面的公式可以定位节点:

阅读更多

Redis 集群

Sentinel 是HA(高可用)解决方案, Cluster与客户端分片是sharding(分布式数据库)方案

一. Sentinel模式

  • 什么是哨兵(Sentinel):

    由一个或多个Sentinel实例组成的Sentinel系统可以监视(十秒发送一个INFO心跳)多个主服务器,以及这些主服务器属下的所有从服务器.

    在被监视的主服务器进入下线状态时(因为一个主服务器负责本集群的一个Redis分片/一部分槽),哨兵们会从下线的主服务器属下的从服务器中挑选一个升级为新的主服务器.这个过程也叫故障转移操作.

阅读更多

Redis 实现商品秒杀

项目场景

实现一个商品秒杀的功能,能后台自定义秒杀时间段、商品库存等信息。

一、设计思路

这里简单分享下思路:

1.限流

秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增,由于只有少部分用户能够秒杀成功,所以要限制大部分流量,只允许少部分流量进入服务后端。这里使用基于Redis简单粗暴的限流方案:信号量(Semaphore)

阅读更多

Redis 持久化与复制

一.RDB持久化

 将当前数据库状态(当前保存的键值对)做一个快照,生成一个经过压缩的二进制文件,通过该文件可还原到生成RDB文件时的数据库状态.

二.AOF持久化

通过保存Redis服务器所执行的写命令生成AOF文件来记录数据库状态

  • 实现方式:

    1. 命令追加: 执行完一个写命令后,以协议格式将写命令追加到aof_buf缓冲区末尾

阅读更多

Redis 击穿&穿透&雪崩与 Spring Data Redis

一、常见概念

  • 击穿:

    • 概念:redis作为缓存,设置了key的过期时间,key在过期的时候刚好出现并发访问,直接击穿redis,访问数据库

    • 解决方案:使用setnx() ->相当于一把锁,设置的时候,发现设置过期,加锁,只有获得锁的人才可以访问DB,这样就能防止击穿。

    • 逻辑:

      1
      2
      3
      4
      5
      1. get key
      2. setnx
      3. if ok addDB
      else sleep
      go to 1
阅读更多

Redis 单节点容量问题

一、单节点容量问题

我们在实际场景中,往往遇上一个单节点容量问题。

1.进行业务拆分,数据分类

2.到了数据不能拆分的时候,可以进行数据分片

  • 进行哈希取模(影响分布式下的扩展性%3,%4,如果多加一台机器,就会收到影响)
  • 进行逻辑随机(可以放进去,但是拿不出来)
    • 解决方案:两台机器同时存储一个list,然后client直接连2台redis,进行两台一起消费
阅读更多

Redis BloomFilter

Bloom Filter 概念

布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

面试关联:一般都会在回答缓存穿透,或者海量数据去重这个时候引出来,加分项哟

Bloom Filter 原理

布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。

阅读更多