redis
文章平均质量分 91
快乐划水程序猿
记录点滴成长
展开
-
redis哨兵系列1
redis哨兵知识原创 2022-11-18 22:44:32 · 1613 阅读 · 1 评论 -
redis集群系列四
redis集群运维tips原创 2022-06-30 23:52:21 · 451 阅读 · 0 评论 -
redis集群系列三
redis集群的故障转移及恢复原创 2022-06-26 21:57:15 · 564 阅读 · 0 评论 -
redis集群系列二
redis集群原创 2022-06-26 21:56:02 · 4638 阅读 · 0 评论 -
redis集群系列一
redis集群redis集群模式是分布式存储的一个case。数据分布分布式数据库要解决将一堆数据按照分区规则映射到不同节点上。常见的分区规则有哈希分区和顺序分区。分区方式特点产品哈希分区离散度好;数据分布与业务无关redis cluster、cassandra顺序分区离散度容易倾斜;数据分布与业务有关;可以顺序访问HBase、Hypertable哈希分区redis集群使用的是哈希分区,常见的哈希分区有以下几种:节点取余hash(key)/N, 但是原创 2022-05-14 19:04:10 · 1667 阅读 · 0 评论 -
redis内存篇
Redis归属随着计算硬件的价格越来越便宜,人们对性能的要求越来越高,很多用户会根据自己的业务场景选择读写速度很快的内存数据库,呀比如大名鼎鼎的redis数据库,其属于kv型的NOSQL数据库。这里小编可以简单介绍下数据库。数据库可以简单分为关系型数据库和非关系型数据库。关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织,常见的Oracle、Mysql、PostgreSQL、MariaDB、SQLite、SQL Server等,读写速度依赖于磁盘I/O。非关系型数据库严格上原创 2022-04-24 22:06:30 · 835 阅读 · 0 评论 -
redis命令系列一
redis常用命令原创 2022-01-24 00:03:05 · 1159 阅读 · 0 评论 -
《redis设计与实现》第三部分 (第16章 哨兵)
第三部分 多机数据库的实现16.0 第16章 Sentinel哨兵系统可以监视所有主服务器下,以及主服务器下的所有从服务器。如果被监视的主服务器下线,哨兵系统可以讲下线的从服务器升级成新的主服务器16.1 启动并初始化Sentinel16.1.1 初始化服务器sentinel本质是运行一个特殊模式下的Redis服务器,并不使用数据库,所以初始化sentinel不需要载入RDB和AOF可能会用到的主要功能复制命令SLAVEOF:Sentinel内部使用,客户端不可以使用发布与订阅命令:SU原创 2020-10-28 22:04:28 · 190 阅读 · 0 评论 -
《redis设计与实现》第三部分 (第15章 复制)
第三部分 多机数据库的实现15.0 第15章 复制用户可以通过执行slaveof选项,让一个服务器去复制另一个服务器,被复制的服务器为主服务器,对主服务器进行复制的服务器称之为从服务器。主从服务器的数据库保存相同的数据,概念上称“数据库状态一致”服务器127.0.0.1:12345成为127.0.0.1:6379的从服务器,之后在6379主服务器设置键值,在12345服务器上也可以获取该键值。如果在主服务器上删除了键值,主从服务器最后也会删除键值// for example127.0.0.1:原创 2020-10-27 15:23:28 · 215 阅读 · 0 评论 -
《redis设计与实现》第四部分 (第24章 监视器)
24.0 监视器通过客户端执行MONITOR,客户端可以把自己变成一个监视器,实时地接收并打印出服务器当前处理的命令请求信息流程客户端向服务器发送一条命令请求,服务器处理这条命令请求,还会将这个命令请求信息发送给所有的监视器24.1 成为监视器某个客户端向服务器发送MONITOR命令,这个客户端的REDIS_MONITOR标志会被打开,客户端会被加入到链表的表尾//code0 server.cvoid monitorCommand(client *c) { /* igno原创 2020-10-26 19:43:27 · 170 阅读 · 0 评论 -
《redis设计与实现》第四部分 (第23章 慢查询日志)
23.0 慢查询日志主要的功能:记录执行时间超过给定时长的命令请求,可以用这个功能产生的日志来监视和优化查询速度两个选项:时间和最多保存的条目slowlog-log-slower-than 执行时间超过多少微秒的命令记录到日志slowlog-max-len指定服务器最多保存多少条查询日志(先进先出,如果日志条目满了,最早的一条会被删除)example one127.0.0.1:6379> config set slowlog-max-len 5OK127.0.0.1:6379原创 2020-10-26 19:42:44 · 249 阅读 · 0 评论 -
《redis设计与实现》第四部分 (第22章 二进制位数组)
感兴趣的是variable-precision SWAR算法,因为看书进度问题没研究透彻,未完待研究!22.0 二进制位数组redis提供了四个命令处理二进制数位组:SETBIT、GETBIT、BITCOUNT、BITOP四个命令处理二进制位数组SETBIT命令为位数组指定偏移量上的二进制位设置值,位数组的偏移量从0开始计数,而二进制位的值可能是0或者1SETBIT bit 0 1SETBIT bit 3 1GETBIT获取位数组指定偏移量伤的二进制位GETBIT bit 0B原创 2020-10-25 23:25:17 · 173 阅读 · 0 评论 -
《redis设计与实现》第四部分 (第21章 排序)
本章节主要介绍SORT命令的实现原理,包括ASC、DESC、ALPHA、LIMIT、STORE、BY、GET在内的所有SORT命令选项的实现原理21.1 SORT cmpobj: 排序带有BY选项的字符串值时使用比如要排序numbers创建等长的数组;数组每一项都是redisSortObject结构将数组numbers的每一项转换成double类型的浮点数存储在score中;根据score排序;最后返回排好序的列表(redisSortObject结构中的obj变量返回给客户端)//原创 2020-10-23 23:00:45 · 169 阅读 · 0 评论 -
《redis设计与实现》第四部分 (第20章 Lua脚本)
20 Lua脚本Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,设计的目的是为了嵌入应用程序中,为应用程序提供灵活的扩展和定制功能。EVAL命令可以直接对输入的脚本进行求值EVALSHA命令则可以根据脚本的SHA1校验和来对脚本进行求值,这个命令要求校验和对应的脚本至少被EVAL执行过一次20.1 Redis服务器初始化Lua环境创建并修改Lus环境的整个过程:创建一个基础的Lua环境载入多个函数库到Lua环境中,Lua可以使用函数库进行数据操作创建全局表格redi原创 2020-10-23 20:55:25 · 244 阅读 · 0 评论 -
《redis设计与实现》第四部分 (第19章 事务)
19 事务Redis通过MULTI、EXEC、WATCH等命令来实现事务功能。基本概念:事务提供了一种将多个命令请求打包,然后一次性按顺序执行多个命令的机制,在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后再去处理其他客户端的命令请求。执行过程:事务首先以MULTI命令为开始,接着将多个命令放入事务当中,最后由EXEC命令将事务提交给服务器执行19.1 事务的实现经历三个阶段:事务开始、命令入队、事务执行19.1.1 事务开始M原创 2020-10-23 12:40:26 · 224 阅读 · 0 评论 -
《redis设计与实现》第四部分 (第18章 发布与订阅)
18 发布与订阅主要命令PUBLISH、SUBSCRIBE、PSUBSCRIBE等订阅频道:执行SUBSCRIBE,客户端可以订阅一个或多个频道,从而成为频道的订阅者有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息订阅模式执行PSUBSCRIBE,客户端可以订阅一个或者多个模式(类似于正则表达式),从而成为模式的订阅者有其他客户端向某个频道发消息时,消息不仅回传给频道的订阅者,还会发送给与频道匹配的模式的订阅者举例说明A订阅了频道news.itB订阅了频原创 2020-10-22 23:25:46 · 125 阅读 · 0 评论 -
《redis设计与实现》第二部分 (第14章 服务器)
14 服务器参考大佬代码:https://www.cnblogs.com/dpains/p/7640528.html14.1 命令请求执行的过程14.1.1 发送命令请求用户在客户端输入命令请求,客户端会将这个命令请求转换成协议格式,然后通过连接到服务器的套接字,将协议格式的命令请求发送给服务器14.1.2 读取命令请求客户端与服务器之间的连接套接字因为客户端的写入而变得可读,服务器将调用命令请求处理器来执行一下操作读取套接字协议格式的命令请求,并将其保存到客户端状态的输入缓冲区中对原创 2020-10-22 20:49:16 · 262 阅读 · 0 评论 -
《redis设计与实现》第二部分 (第13章 客户端)
13.0 客户端每个与服务器连接的客户端,服务器都为这些客户端建立了相应的Client,这个结构保存了客户端当前的状态信息,以及执行相关功能时所需要用到的数据结构,其中包括:客户端的套接字描述符客户端的名字客户端的标志值指向客户端正在使用的数据库的指针以及该数据库的号码客户端当前要执行的命令、命令参数、命令参数的个数以及指向命令实现函数的指针客户端的输入缓冲区和输出缓冲区客户端的复制状态信息,以及进行复制所需的数据结构客户端执行BRPOP、BLPOP等列表阻塞命令时使用的数据结构客户原创 2020-10-21 15:39:26 · 245 阅读 · 3 评论 -
《redis设计与实现》第二部分 (第12章:事件)
12.0 第12章 事件分类文件事件:服务器通过套接字和客户端(或者其他服务器连接),文件事件是服务器对套接字操作的抽象时间事件:redis服务器中的一些操作serverCron需要在给定的时间点执行,时间事件就是服务器对这类定时操作的抽象12.1 文件事件基于Redis模式开发了网络事件处理器文件事件处理器使用I/O多路复用来监听多个套接字,根据套接字目前执行的任务来为套接字关联不同的事件处理器套接字准备好执行连接应答accept、读取read、写入write、关闭close,原创 2020-10-20 12:53:39 · 234 阅读 · 5 评论 -
《redis设计与实现》 第二部分(第9-11章):单机数据库的实现
9.0 第9章 数据库9.1 服务器中的数据库redis服务器将所有的数据库都保存在服务器状态的db数组中,db数组的每一个元素的数据结构是redisDb初始化服务器时,会根据服务器状态的dbnum属性来决定数据库的数量。默认情况下,该选项的值为16,Redis默认会创建16个数据库//code0: server.h/* Configuration */ int verbosity; /* Loglevel in redis.conf */ i原创 2020-10-13 20:11:34 · 261 阅读 · 2 评论 -
《redis设计与实现》 第一部分:数据结构与对象 || 读书笔记
不得不夸赞redis的轻量级,以及代码透明度。可以通过这本书《Redis设计与实现》看原理,对照着官网上的src看code,理解更深刻!!!可能还需要看几遍,一遍看过去也不能全部记住,重复是硬道理!!!0. 前言特性:redis内置集合数据类型,支持对集合执行交集、并集、差集等一部分命令只能对特定数据类型执行(append只能对字符串,hset只能对哈希表),还有一部分命令可以对全部的数据类型执行(del、type以及expire)1. 引言单机功能:第一部分、第二部分、第四部分原创 2020-10-11 18:37:06 · 202 阅读 · 2 评论