随笔分类 - redis 系列篇
摘要: 一. ASK错误 集群上篇最后讲到,对于重新分片由redis-trib负责执行,关于该工具以后再介绍。在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可以会出现该槽中的一部分键值对保存在源节点中,另一部份键值对则保存在目标节点中。 当客户端向源节点发送一个与数据库键有关的命令时,并且命令要处
阅读全文
posted @ 2018-12-27 14:41 花阴偷移 阅读(263) | 评论 (0) 编辑
摘要: 一.概述 Redis集群提供了分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。在大数据量方面的高可用方案,cluster集群比Sentinel有优势。但Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,而达不到像Redis那样的性能,在高负载的情
阅读全文
posted @ 2018-12-25 14:32 花阴偷移 阅读(257) | 评论 (0) 编辑
摘要: 一. Sentinel 高可用环境准备 1.1 Sentinel 集群环境 1.2 Redis主库库环境,主从库搭建在(redis 系列22 复制Replication 下) 二. Sentinel 配置说明 2.1 启动Sentinel服务方法 对于启动Sentinel服务有二种方法: (1)是使
阅读全文
posted @ 2018-12-20 17:21 花阴偷移 阅读(255) | 评论 (0) 编辑
摘要: 四. 检测下线状态 对于Redis的Sentinel中关于下线有两个不同的概念:(1)主观下线(Subjectively Down, 简称 Sdown) 指的是单个 Sentinel 实例对服务器做出的下线判断,此时不会进行故障转移。(2) 客观下线(Objectively Down, 简称 Odo
阅读全文
posted @ 2018-12-18 17:51 花阴偷移 阅读(281) | 评论 (0) 编辑
摘要: 一.概述 Sentinel(哨岗或哨兵)是Redis的高可用解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升
阅读全文
posted @ 2018-12-14 17:31 花阴偷移 阅读(268) | 评论 (0) 编辑
摘要: 一. 复制环境准备 1.1 主库环境(172.168.18.201) 环境 说明 1.2 从库环境(172.168.18.203) 环境 说明 二. 复制配置 2.1 主库环境密码设置 在201主库上,找到redis目录下的redis.conf文件,打开文件找到requirepass,在500行,下
阅读全文
posted @ 2018-12-12 17:30 花阴偷移 阅读(142) | 评论 (0) 编辑
摘要: 一. 概述 使用和配置主从复制非常简单,每次当 slave 和 master 之间的连接断开时, slave 会自动重连到 master 上,并且无论这期间 master 发生了什么, slave 都将尝试让自身成为 master 的精确副本。这个系统的运行依靠三个主要的机制: (1) 当一个 ma
阅读全文
posted @ 2018-12-11 17:37 花阴偷移 阅读(206) | 评论 (0) 编辑
摘要: 二. serverCron函数 2.3 更新服务器每秒执行命令次数 serverCron函数中的trackOperationsPerSecond函数会以每100毫秒一次的频率执行,这个函数以抽样计算的方式,估算并记录服务器在最近一秒钟处理的命令请求数量,这个值可以通过info status命令的in
阅读全文
posted @ 2018-12-07 17:38 花阴偷移 阅读(183) | 评论 (0) 编辑
摘要: 一.客户端与服务端交互 本篇简单介绍下服务器,服务器运行涉及的内部原理知识很多,主要了解Redis服务器内部要做哪些事情,需要开发人员去干预的比较少。Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转
阅读全文
posted @ 2018-12-05 17:50 花阴偷移 阅读(236) | 评论 (0) 编辑
摘要: 一. 概述 Redis服务器是可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用I/O多路复用技术实现的文件事件处理器,Redis服务器使用单进程单线程的方式来处理命令请求,并与多个客户端进行网络通信。 1.1
阅读全文
posted @ 2018-12-03 17:50 花阴偷移 阅读(280) | 评论 (2) 编辑
摘要: 一.概述 Redis服务器是一个事件驱动程序,服务器需要处理两类事件:1文件事件,2时间事件。文件事件是关于客户端与服务器之间的通信操作。时间事件是关于服务器内部的一些定时操作。本篇还是参照"Redis设计与实现"书,简要了解下Redis事件。 1. 文件事件 文件事件(file event)是服务
阅读全文
posted @ 2018-12-02 14:23 花阴偷移 阅读(206) | 评论 (0) 编辑
摘要: 一.概述 除了上篇介绍的RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB保存数据库中的键值对来记录数据库状态不同,AOF是通过保存redis服务器所执行的写命令来记录数据库状态的。AOF持久化方式记录每次对服务器写的操作,当服务器启动时,就会通过
阅读全文
posted @ 2018-11-30 17:53 花阴偷移 阅读(192) | 评论 (0) 编辑
摘要: 一.概述 Redis是内存数据库,一旦服务器进程退出,服务器中的数据库内存数据状态也会消失。为了解决这个问题,Redis提供了RDB 持久化功能,这个功能可以将redis在内存中的数据库状态保存到磁盘中,避免数据意外丢失。 RDB持久化可以手动执行,也可以根据服务器配置选项定期执行,是在指定的时间间
阅读全文
posted @ 2018-11-22 12:35 花阴偷移 阅读(392) | 评论 (0) 编辑
摘要: 一. 概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解。下面再了解类型检查,内存回收,对象共享,对象的空转时长。 1.1 类型检查与命令多态 redis中用于操作键的命令基本上可以分为两种类型,一种是可以对任何的键执行,如:
阅读全文
posted @ 2018-11-21 17:40 花阴偷移 阅读(227) | 评论 (0) 编辑
摘要: 一. 有序集合概述 Redis 有序集合对象和集合对象一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。 在前面第9章中讲到Re
阅读全文
posted @ 2018-11-20 17:48 花阴偷移 阅读(180) | 评论 (0) 编辑
摘要: 一. 集合对象概述 这里的集合是string类型的无序集合,在集合对象中集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合是通过哈希表实现的,集合中最大的成员数为 232-1 (4294967295, 每个集合可存储40多亿个成员)。集合对象的编码可以是intset或者hashtable。
阅读全文
posted @ 2018-11-19 18:01 花阴偷移 阅读(157) | 评论 (0) 编辑
摘要: 一. 哈希对象概述 Redis hash对象是一个string类型的field和value的映射表,hash特别适合用于存储对象。作为哈希对象的编码,有二种一是ziplist编码, 二是hashtable编码。在不同情况下编码是可以转换的。在Redis 中每个 hash 可以存储 232 - 1 键
阅读全文
posted @ 2018-11-16 17:51 花阴偷移 阅读(393) | 评论 (2) 编辑
摘要: 一. 列表对象概述 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。在第9篇中讲到了列表对象的编码可以是ziplist或者linkedlis
阅读全文
posted @ 2018-11-15 18:04 花阴偷移 阅读(133) | 评论 (0) 编辑
摘要: 一. 字符串对象编码 Redis中字符串可以存储3种类型,分别是字节串(byte string)、整数、浮点数。在上章节中讲到字符串对象的编码可以是int, raw,embstr。 如果一个字符串对象保存的是整数值,那么对象RedisObject结构的ptr 属性里面将void*转换成long,字符
阅读全文
posted @ 2018-11-14 17:56 花阴偷移 阅读(237) | 评论 (2) 编辑
摘要: 一.概述 在前面章节中,主要了解了 Redis用到的主要数据结构,包括:简单动态字符串、链表(双端链表)、字典、跳跃表、 整数集合、压缩列表(后面再了解)。Redis没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建一个对象系统,这个系统对象包括:字符串对象、列表对象、哈希对象(散
阅读全文
posted @ 2018-11-13 17:48 花阴偷移 阅读(301) | 评论 (0) 编辑
摘要: 一.概述 整数集合(intset)是集合键的底层实现之一, 当一个集合只包含整数值元素,并且这个集合元素数量不多时, Redis就会使用整数集合作为集合键的底层实现。下面创建一个只包含5个元素的集合键,并且集合中所有元素都是整数值,那么这个集合键的底层实现就会是整数集合。 接着添加非整数值,集合键的
阅读全文
posted @ 2018-11-12 17:44 花阴偷移 阅读(101) | 评论 (0) 编辑
摘要: 一.概述 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。在大部分情况下,跳跃表的效率可以和平衡树(关系型数据库的索引就是平衡树结构)相媲美,并且因为跳跃表的实现比平衡树要来得更为简单,所以有不少程序使用跳跃表来代替平衡树。 R
阅读全文
posted @ 2018-11-10 16:57 花阴偷移 阅读(225) | 评论 (0) 编辑
摘要: 一.概述 接着上篇继续,这篇把数据结构之字典学习完, 这篇知识点包括:哈希算法,解决键冲突, rehash , 渐进式rehash,字典API。 1.1 哈希算法 当一个新的键值对 需要添加到字典里面时,程序需要先根据“键值对”的键计算出哈希值和索引值,再根据索引值,将包含新“键值对”的哈希表节点放
阅读全文
posted @ 2018-11-07 17:35 花阴偷移 阅读(242) | 评论 (0) 编辑
摘要: 一. 概述 字典又称符号表(symbol table),关联数组(associative array), 映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。在字典中,一个key和一个value进行关联称为键值对。在字典中每个键都是唯一的,程序可以在字典中根据键查找关
阅读全文
posted @ 2018-11-04 17:01 花阴偷移 阅读(259) | 评论 (0) 编辑
摘要: 一. 概述 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可能通过增删节点来灵活地调整链表的长度。作为一种数据结构,在C语言中并没有内置的这种数据结构。所以Redis构建了自己的链表实现。链表在Redis中应用非常多,比如列表键的底层实现之一就是链表,当一个列表键包含了数量比较多的元素
阅读全文
posted @ 2018-11-01 17:56 花阴偷移 阅读(207) | 评论 (0) 编辑
摘要: 一. SDS概述 Redis 没有直接使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串(simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。Redis只会使用C字符串作为字面量。在Redis里,使用SDS来表示字符串值,是一个可
阅读全文
posted @ 2018-10-31 17:40 花阴偷移 阅读(271) | 评论 (0) 编辑
摘要: 一.概述 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmap
阅读全文
posted @ 2018-10-30 17:58 花阴偷移 阅读(184) | 评论 (0) 编辑
摘要: 一. 安装环境 操作系统:centos 7 ,redis版本4.06,客户端windows 7 ,vs2015。 1.1 安装前的条件 yum -y install gcc-c++ 判断是否安装了gcc-c++ ,脚本如下: 1.2 redis官网下载离线包,上传到linux系统目录home/hsr
阅读全文
posted @ 2018-10-13 20:00 花阴偷移 阅读(294) | 评论 (2) 编辑