Redis
鹏哥哥啊Aaaa
这个作者很懒,什么都没留下…
展开
-
22. 慢查询日志
1. Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户而言通过这个功能产生的日志来监视和优化查询速度。1)slowlog-log-slower-than:指定超过多少微秒的命令会被记录到日志上2)slowlog-log-max-len:指定服务器最多保存多少慢查询日志2.慢查询记录的保存struct redisServer{ //... //下一条慢查询日志的ID long long slowlog_entry_id; //保.原创 2020-06-08 16:30:36 · 203 阅读 · 0 评论 -
21. 二进制位数组
1.Redis提供了SETBIT、GETBIT、BITCOUNT、BITOP四个命令用于处理二进制位数组(又称“位数组”)。1)SETBIT:为位数组指定偏移量上的二进制位设置值,位数组的偏移量从0开始计数,而二进制位的值则可以为0或者12)GETBIT:获取位数组指定偏移量上的二进制位的值3)BITCOUNT:统计位数组里面,值为1的二进制位的数量4)BITOP:既可以对多个位数组进行按位与(and)、按位或(or)、按位异或(xor)运算,也可以对给定的位数组进行取反运算。(异或:一正一原创 2020-06-08 16:14:10 · 641 阅读 · 0 评论 -
20.排序
Redis的SORT命令可以对列表键、集合键、有序集合键进行排序。1.SORT <key>命令的实现SORT命令最简单的执行形式为:SORT <key>这个命令可以对一个包含数字值的键key进行排序,示例:RPUSH numbers 3 1 2SORT numbers服务器执行SORT numbers命令的详细步骤如下:1)创建一个和nu...原创 2020-04-20 17:51:38 · 148 阅读 · 0 评论 -
19. Lua脚本
Redis从2.6版本开始引入对Lua脚本的支持,通过在服务器中嵌入Lua环境,Redis客户端可以使用Lua脚本,直接在服务器端原子地执行多个Redis命令。1. 创建并修改Lua环境为了在Redis服务器中执行Lua脚本,Redis在服务器内嵌了一个Lua环境,并对这个Lua环境进行了一系列修改,从而保证这个Lua环境可以满足Redis服务器的需求。Redis服务器创建并修改...原创 2020-04-20 15:49:59 · 1250 阅读 · 0 评论 -
18. 事务
Redis通过MULTI、EXEC、WATCH等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才会去处理其他客户端的命令请求。1.事务的实现一个事务从开始到结束通常经历三个阶段:1)事务开始2)命...原创 2020-04-19 11:38:25 · 173 阅读 · 0 评论 -
17. 发布与订阅
Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者(subscriber):每当有其他客户端向被订阅的频道发送消息(message)时,频道的所有订阅者都会收到这个消息。除了订阅频道之外,客户端还可以通过执行PSUBSCRIBE命令订阅一个或多个模式,从而成为...原创 2020-04-18 19:19:37 · 216 阅读 · 0 评论 -
16.集群
Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能1.节点一个Redis集群通常由多个节点(node)组成,在刚开始每个节点都是独立的。我们要做的是将各个独立的节点连接起来构成一个包含多个节点的集群。连接各个节点的工作可以使用CLUSTER MEET命令:CLUSTER MEET <ip> ...原创 2020-04-17 18:19:17 · 176 阅读 · 0 评论 -
15. Sentinel
Sentinel(哨兵)是Redis的高可用性的解决方案:由一个或多个Sentiel实例组成的Sentiel系统可以监视任意多个主服务器以及它们属下的从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后替代原来的主服务器处理请求。1.启动并初始化Sentinel启动一个Sentinel命令:$ redis-sentinel ...原创 2020-04-15 15:19:00 · 155 阅读 · 0 评论 -
14 复制
在Redis里用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制另一个服务器,我们称呼被复制的服务器为主服务器,对主服务器进行复制的服务器成为从服务器。进行复制中的主从服务器双方的数据库需要保存相同的数据,这叫做“数据库一致性”。1. 旧版复制功能的实现Redis的复制功能分为同步和命令传播两个操作:1)同步操作用于将从服务器的数据库状态更新至主...原创 2020-04-10 16:04:30 · 174 阅读 · 0 评论 -
13 服务器
Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转1.命令请求的执行过程1.1 发送命令请求Redis服务器的命令请求来自Redis客户端,当用户在客户端中键入一个命令请求时,客户端会将这个命令请求转换成协议格式,然后通过连接到服务器的套接字,将协议格式的命令请求发送给服务器。...原创 2020-04-01 18:32:57 · 269 阅读 · 0 评论 -
12 客户端
Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送请求,而服务器接受并处理客户端发送的命令请求,并向客户端返回命令回复。通过I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式处理命令请求,并与多个客户端进行网络通信。对于每个与服务器进行连接的客户端,服务器都为这些客户端建立相应的redis.h/redis...原创 2020-03-30 18:04:40 · 124 阅读 · 0 评论 -
11.事件
Redis服务器是一个事件驱动程序,服务器需要处理一下两类事件:1)文件事件:Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事情来完成一系列网络通信操作。2)时间事件:Redis服务器中的一些操作需要在给定的时间点执行,而时间事件就是对这类定时操作的抽象。1.文件事件R...原创 2020-03-30 13:50:13 · 132 阅读 · 0 评论 -
10.AOF持久化
AOF提供了持久化的功能,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的,因为Redis的命令请求协议是纯文本格式,所以我们可以直接打开一个AOF文件1. AOF持久化的实现AOF持久化实现可以分为命令追加、文件写入、文件同步三个步骤1.1 命令追加当AOF持久化功能处于打开状...原创 2020-03-26 13:09:41 · 152 阅读 · 0 评论 -
9.RDB持久化
1.概念一般,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。因为Redis是内存数据库,它将自己的数据库状态存储在内存中,所以如果不想办法将储存在内存中的数据库状态保存到磁盘肯定不行。为了解决这个问题,RDB持久化就应运而生。RDB持久化可以手动执行,也可以根据服务器配置定期执行。RDB持久化生成的RDB文件是一个经过压缩的二进制文件,该文件可以还原成RDB文件时的数...原创 2020-03-25 14:29:03 · 173 阅读 · 0 评论 -
8.数据库
1. 服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库:struct redisServer{ //... //一个数组,保存着服务器中的所有数据库 redisDb *db; //......原创 2020-03-23 14:09:26 · 148 阅读 · 0 评论 -
7.对象
1.概念我们前面介绍了Redis用到的所有主要数据结构,但是Resid并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统。这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都至少对应一种前面的数据结构。通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。使...原创 2020-03-20 18:23:03 · 155 阅读 · 0 评论 -
6.压缩列表
压缩列表是列表和哈希键的底层实现之一,当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。1.压缩列表的构成压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。1.1...原创 2020-03-18 21:51:22 · 457 阅读 · 0 评论 -
5.整数集合
整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。1.整数集合的实现...原创 2020-03-18 18:13:10 · 609 阅读 · 0 评论 -
4.跳跃表
1.概念跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(lgN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量过多、或者有序集合中元素的成员是比较长的字符串时,Redis会使用跳跃表作为有序集合键的底层实现。Re...原创 2020-03-17 11:33:23 · 135 阅读 · 0 评论 -
3.字典
1.概念字典,又叫符号表、关联数组、映射。是一种用于保存键值对的抽象数据对象。字典在Redis中应用范围十分广泛,比如Redis的数据库就是使用字典来作为底层实现的,对数据库的增删改查都是构建在字典操作之上的。字典还是哈希表的底层实现之一,当一个哈希键包含的键值对比较多,又或者键值对中的元素都是比较长的字符串时,Redis就会使用字典作为哈希键的底层实现。2.字典的实现...原创 2020-03-16 22:48:08 · 102 阅读 · 0 评论 -
2.链表
1.链表在Redis中的使用链表提供高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点灵活调整链表的长度。链表在Redis中的作用:链表键、发布与订阅、慢查询、监视器、构建客户端输出缓冲区等2.链表和链表节点的实现每个链表节点使用一个adlist.h/listNode结构:typedef struct listNode{ //前置节点 ...原创 2020-03-12 22:06:37 · 85 阅读 · 0 评论 -
1.数据结构与对象--简单动态字符串
1.什么是简单动态字符串Redis中的没有用C语言传统的字符串(简称C字符串),而是自己构建了一种名叫简单动态字符串(SDS)的抽象类型。在Redis中C字符串仅仅用作无需对字符串值进行修改的地方,比如日志。对于key,value这种需要变动的键值,底层都是SDS实现。SDS还用做缓冲区:AOF模块中的AOF缓冲区,以及客户端状态中的输入缓冲区,都是由SDS实现...原创 2020-03-11 23:51:31 · 136 阅读 · 0 评论