Redis
IT_10-
我爱编程 编程爱我❤️
展开
-
Redis主从复制讲解以及主从状态检测
主配置 1 daemonize yes 2 pidfile /var/run/redis-6382.pid 3 port 6382 4 logfile "/usr/local/redis/redis-5.0.4/data/6382.log" 5 dbfilename dump-6382.rdb 6 dir /usr/local/redis/redis-5.0.4/data/...原创 2019-04-21 09:57:04 · 2419 阅读 · 0 评论 -
Redis过期键的删除策略
数据库键空间Redis服务器中的每个数据库都由redisDb表示,其中,redisDb结构的dict字典保存了数据库中的所有键值对,这个字典就成为键空间:typedef struct redisDb{ ...... dict *dict; ......}redisDb;下图是一个数据库键空间的示例图:...原创 2019-10-03 22:04:44 · 293 阅读 · 0 评论 -
Redis五种数据类型的底层实现总结
Redis的五中数据类型:字符串(string)列表(list)哈希(hash)集合(set)有序集合(zset)Redis所用到的底层数据结构:long类型的整数简单动态字符串(sds)emb编码的简单动态字符串(embstr)链表(实际是双端链表 linkedlist)字典(实际是哈希表 hashtable)整数集合(intset)压缩列表(ziplist)跳...原创 2019-10-02 22:34:13 · 706 阅读 · 0 评论 -
Redis底层数据结构(6)跳跃表
跳跃表跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。当一个有序集合包含的元素数量多,又或者有序集合中的元素的成员是比较长的字符串时,Redis就会使用跳跃表作为有序集合键的底层实现。下图为一个跳跃表示例:说明:跳跃表节点结构定义:...原创 2019-10-02 20:54:45 · 343 阅读 · 0 评论 -
Redis底层数据结构(5)压缩列表
总结自《redis设计与实现》redis版本:3.0(因此只具有参考意义,高版本的redis已经做了很多改变)压缩列表压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。当一个列表键、哈希键或者有序集合键包含少量值,并且每个列表项要么是小整数值,要么是长度比较短的字符...原创 2019-10-02 20:44:50 · 185 阅读 · 0 评论 -
Redis底层数据结构(4)整数集合
总结自《redis设计与实现》redis版本:3.0(因此只具有参考意义,高版本的redis已经做了很多改变)当Redis键的值时整数并且元素数量不多时,使用整数集合作为该键的底层数据结构。整数集合整数集合的结构:typedef struct intset { uint32_t encoding; //编码方式 uint32_t length; //集合包含的元素数量 int8...原创 2019-10-16 22:11:57 · 156 阅读 · 0 评论 -
Redis源码解析(3)字典
总结自《redis设计与实现》redis版本:3.0(因此只具有参考意义,高版本的redis已经做了很多改变)字典是一种用来保存键值对的抽象数据结构,在字典中,一个键和一个值进行关联,这些关联的键和值称为键值对。应用实现哈希键(值时哈希结构的键,值的底层实现数据结构之一是使用字典)字典的实现redis的字典使用哈希表作为底层实现,一个哈希表包含了多个哈希表节点,每个节点就保存了字典...原创 2019-09-30 22:52:35 · 219 阅读 · 0 评论 -
Redis源码解析(2)双向链表
总结自《redis设计与实现》redis版本:3.0(因此只具有参考意义,高版本的redis已经做了很多改变)链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。应用列表键(值为列表的键,值的底层数据结构之一为链表)发布和订阅功能慢查询功能监视器等功能链表节点结构体如下:typeof struct listNode { st...原创 2019-09-30 22:18:45 · 194 阅读 · 0 评论 -
Redis源码解析(1)简单动态字符串
Redis提供了5中数据结构:string、list、hash、set、sorted set这里先讨论string一、sds 简单动态字符串1、sds 结构redis没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类型,并将 sds 用作 redis...原创 2019-09-18 20:43:08 · 268 阅读 · 0 评论 -
Redis事务
前言Redis是单线程的,指令放在队列中,由一个线程依次完成,因此Redis中不存在事务,但是指令的执行顺序会引发类似事务所引发的问题。举例:有三个客户端a、b、c,依次执行set k1 1,set k1 2,set k1 3命令,当另一个客户端执行get k1命令时,读取到的k1的值和执行get命令的时间有关,有可能得到1,2,3中的任何一个值。Redis事务的定义Redis事务是一个单...原创 2019-09-15 23:00:15 · 258 阅读 · 0 评论 -
Redis持久化之RDB和AOF详解
两种持久化方式:快照:RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集完整地生成一个快照,然后保存在硬盘中,也就是RDB文件(二进制格式);当数据要进行恢复的时候,取出RDB文件直接读取到Redis内存中。快照是如何生成的?Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好...原创 2019-09-14 23:44:11 · 209 阅读 · 0 评论 -
Redis Sentinel 哨兵模式配置详解和实践
由于主从复制存在一个问题:master宕机,需要选中一个slave,执行“slaveof no one”,然后对其余slave执行“slaveof new master”,客户端选择读写新的master,可手动转移,也可写脚本(实现复杂),从而出现Redis Sentinel架构,实现监控节点异常,故障转移,通知客户端的功能,对于客户端来说不会去记录redis地址,而是记录sentinel地址,与...原创 2019-05-01 15:19:02 · 1039 阅读 · 0 评论 -
Redis配置文件详解
daemonize yes #是否以后台进程运行 pidfile /var/run/redis/redis-server.pid #pid文件位置 port 6379#监听端口 bind 127.0.0.1 #绑定地址,如外网需要连接,设置0.0.0.0 timeout 300 #连接超时时间,单位秒 loglevel notice #日志级别,分别有: # deb...转载 2019-04-21 12:29:13 · 132 阅读 · 0 评论 -
Redis内存淘汰策略
Redis占用内存大小1、通过配置文件配置//redis.confmaxmemory 100mb2、在客户端动态修改//设置Redis最大占用内存大小为100M127.0.0.1:6379> config set maxmemory 100mb//获取设置的Redis能使用的最大内存大小127.0.0.1:6379> co...原创 2019-10-09 15:10:01 · 174 阅读 · 0 评论