01-Redis 五大数据类型 五大数据类型Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串(strings) 散列(hashes) 列表(lists) 集合(sets) 有序集合(sorted sets) 与范围查询 bitmaps hyperloglogs 地理空间(geospatial) 索引半径查询。 Redis 内置了 复 2021-01-01 Redis #Redis
01-Redis 发布订阅 - PubSub Redis 中的发布/订阅功能发布/订阅系统 是 Web 系统中比较常用的一个功能。简单说就是 发布者发布消息,订阅者接受消息 虽然可以用一个 list 列表结构结合 lpush 和 rpop 来实现消息队列的功能,但是很难实现实现 消息多播 的功能。 为了支持消息多播,Redis 不能再依赖于那 5 种基础的数据结构了,它单独使用了一个模块来支持消息多播,这个模块就是 Pub 2021-01-01 Redis #Redis
01-Redis 消息队列 - Stream 持久化的发布订阅系统 Stream 持久化的发布/订阅系统Redis Stream 从概念上来说,就像是一个 仅追加内容 的 消息链表,把所有加入的消息都一个一个串起来,每个消息都有一个唯一的 ID 和内容,这很简单,让它复杂的是从 Kafka 借鉴的另一种概念:消费者组(Consumer Group) (思路一致,实现不同): 上图展示了一个典型的 Stream 结构。每个 Stream 都有唯一的名称, 2021-01-01 Redis #Redis
01-Redis 特殊数据类型之 BitMap BitMap简介在开发中,可能会遇到这种情况:如需要记录用户一年的打卡情况,打卡了是1,没有打卡是0,如果使用普通的 key/value 存储,则要记录 365 条记录,如果用户量很大,需要的空间也会很大,所以 Redis 提供了 Bitmap 位图这中数据结构, Bitmap 就是通过操作二进制位来进行记录,即为 0 和 1;如果要记录 365 天的打卡情况,使用 Bitmap 表示的 2021-01-01 Redis #Redis
01-Redis 特殊数据类型之 GeoHash 一、使用数据库实现查找附近的人众所周知,地球上的任何一个位置都可以使用二维的 经纬度 来表示,经度范围 [-180, 180],纬度范围 [-90, 90],纬度正负以赤道为界,北正南负,经度正负以本初子午线 (英国格林尼治天文台) 为界,东正西负。 比如说,北京人民英雄纪念碑的经纬度坐标就是(39.904610, 116.397724),都是正数,因为中国位于东北半球。 所以,当我们使用数据库存 2021-01-01 Redis #Redis
01-Redis 特殊数据类型之 HyperLogLog HyperLogLogRedis 在 2.8.9 版本添加了 HyperLogLog 结构。 Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。 2021-01-01 Redis #Redis
01-Redis 特殊数据类型之 bloom-filter 简介参考:布隆过滤器 安装Redis 4.0 之后才提供了布隆过滤器。布隆过滤器是作为一个插件加载到 Redis Server 中的,要使用布隆过滤器,需要在 Redis 中安装布隆过滤器插件,步骤如下: 下载 redisbloom 插件(Redis官网下载即可) 下载地址:https://github.com/RedisLabsModules/redisbloom/ 找到最新的 tag 下载 2021-01-01 Redis #Redis
02-Redis 数据结构之 字典的数据结构 一、Redis 字典结构内部结构Redis 字典的结构和 Java 中的 HashMap 有点类似,都是存放键值对,在底层都是使用数组加链表(称为一个哈希表)的形式来实现的,但与 HashMap 不同的是,在 Redis 中,它由两个哈希表组成,它的结构大致如下图所示: 由上图可以看到,它使用两个 hashtable ,姑且称之为 0 号哈希表和 1 号哈希表,每次只会使用 0 号哈希表,那么 2021-01-01 Redis #Redis
02-Redis 数据结构之 跳跃表 一、跳跃表简介跳跃表(skiplist)是一种随机化的数据结构,由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出,是一种可以于平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下完成,以下是一个典型的跳跃表例子: Reids 有一个叫 有序列表 zset 的数据结 2021-01-01 Redis #Redis
03-Redis 内存模型 前言我们使用 Redis 时,会接触 Redis 的5种对象类型(字符串、哈希、列表、集合、有序集合),丰富的类型是 Redis 相对于 Memcached 等的一大优势。在了解 Redis 的5种对象类型的用法和特点的基础上,进一步了解 Redis 的内存模型,对 Redis 的使用有很大帮助,例如: 估算 Redis 内存使用量。目前为止,内存的使用成本仍然相对较高,使用内存不能无所顾忌;根 2021-01-01 Redis #Redis
03-Redis 持久化 一、持久化简介持久化的功能:Redis 是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将 Redis 中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次 Redis 重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。 持久化发生了什么 | 从内存到磁盘我们来考虑一下 Redis 作为一个 内存数据库 要做的关 2021-01-01 Redis #Redis
04-Redis 事务 理论Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事 务执行命令序列中。 总结说:Redis 事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。在 Redis 中,事务具有原子性(Atomicity)、一致性(Consistency)和隔离性(Isola 2021-01-01 Redis #Redis
04-Redis 单线程 or 多线程 Redis 单线程Redis 单线程指的是 接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端 这个过程是由一个线程(主线程)来完成的。简单来说,Redis 中只有网络请求模块和数据操作模块是单线程的,而其他的如持久化存储模块、集群支撑模块等是多线程的。这也是我们说 Redis 是单线程的原因。 Redis 在启动的时候,是会启动一些后台线程(BIO)的: 2021-01-01 Redis #Redis
05-Redis 多机之1 - 主从复制 1 主从复制 主从复制 是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为 **主节点(master)**,后者称为 **从节点(slave)**。 数据的复制是 单向 的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。 Redis 主从复制支持 主从同步 和 从从同步 2021-01-01 Redis #Redis
05-Redis 多机之2 - 哨兵 Redis主从复制的作用有数据热备、负载均衡、故障恢复等;但主从复制存在的一个问题是故障恢复无法自动化。本文将要介绍的哨兵,它基于Redis主从复制,主要作用便是解决主节点故障恢复的自动化问题,进一步提高系统的高可用性。 1 Redis Sentinel 哨兵在介绍哨兵之前,首先从宏观角度回顾一下Redis实现高可用相关的技术。它们包括:持久化、复制、哨兵和集群,其主要作用和解决的问题是: 持久 2021-01-01 Redis #Redis
05-Redis 多机之2 - 哨兵 脑裂 1、原理1.1、概述哨兵模式的 redis 集群有三种角色:sentinel/master/slave,它们通过 tcp 链接,相互建立联系。 sentinel 作为高可用集群管理者,它的功能主要是:检查故障,发现故障,故障转移。 1.2、故障转移流程 在 redis 集群中,当 sentinel 检测到 master 出现故障,那么 sentinel 需要对集群进行故障转移。 2021-01-01 Redis #Redis
05-Redis 多机之3 - 集群 1 Redis 集群Redis的高可用技术有:持久化、主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡。 Redis集群解决了上述问题,实现了较为完善的高可用方案。集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。 上图展示了 Redis Cluster 典型的架构图,集群中的每一个 Redis 节点都 互相两 2021-01-01 Redis #Redis
Redis - Java 编码调用 JedisJedis 是 Redis 官方推荐的Java连接开发工具。 手动编程redis 依赖12345678910111213<dependencies> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId& 2021-01-01 Redis #Redis
Redis SET、SETNX、SETEX、SETGET SET 官网:https://redis.io/docs/latest/commands/set/ 语法 1SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL] 可用版本:>= 1 2021-01-01 Redis #Redis
Redis 使用启动脚本设置开机启动 启动脚本推荐在生产环境中使用启动脚本方式启动redis服务。启动脚本redis_init_script位于位于Redis的/utils/目录下。 123456789101112131415# 大致浏览下该启动脚本,发现redis习惯性用监听的端口名作为配置文件等命名,我们后面也遵循这个约定。 # redis服务器监听的端口 REDISPORT=6379 # 服务端所处位置,在make instal 2021-01-01 Redis #Redis