redis
文章平均质量分 95
一颗小陨石
除非我不想赢,不然没人能让我输
展开
-
Redis设计与实现(八)Redis中的事件
文章目录一、文件事件1.0 Reactor模式1.1 文件事件处理器的构成1.2 事件类型1.3 文件事件处理器1.3.1连接应答处理器1.3.2命令请求处理器1.3.3 命令回复处理器二、时间事件时间事件的属性实现时间事件处理器原理serverCron函数事件的调度和执行Redis是一个事件驱动程序,服务器需要处理两类事件:1.文件事件2.时间时间一、文件事件Redis通过套接字和客户...原创 2020-05-08 14:01:52 · 180 阅读 · 0 评论 -
Redis设计与实现(七)RDB和AOF持久化及其原理、RDB文件结构
文章目录一、RDB1.1自动保存原理1.2 RDB文件结构1.2.1 database1.2.1.1 key_value_pair1.2.2value字符串对象二、AOF2.1追加2.2写入和同步2.3载入与还原2.4 AOF重写2.5 重写的实现注意:2.6后台重写子进程重写的问题:解决:redis有两种持久化的方式,一个是RDB一个是AOF。一、RDBRDB方式会生成一个RDB文件,该文...原创 2020-05-07 14:45:40 · 470 阅读 · 0 评论 -
Redis设计与实现(六)数据库结构、过期键删除策略
文章目录一、数据库结构1.1 数据库的切换1.2 redisDb1.3 读写键的维护二、键的生存/过期时间原理2.1过期时间的保存2.2 过期时间的判定三、过期键删除策略3.1定时删除【主动】优点缺点3.2惰性删除【被动】优点缺点3.3定期删除【主动】四、Redis后的过期键删除策略4.1 惰性删除的实现4.2 定期删除策略的实现五、AOF、RDB和复制功能对过期键的处理5.1RDB5.2 AOF...原创 2020-05-06 17:25:45 · 339 阅读 · 0 评论 -
Redis设计与实现(五)——Redis五种对象、内存回收/共享
文章目录一、对象类型和编码1.1 类型1.2 编码和底层实现1.3 内存回收1.4 对象的共享1.5对象空转时长二、字符串对象2.1 embstr和raw的区别2.2 long double类型的存储2.3 编码转换2.3字符串指令的实现三、列表对象编码的转换quicklistquicklistNodequicklistLZF四、哈希对象ziplist编码hashtable编码编码转换五、集合对象...原创 2020-05-06 00:47:33 · 645 阅读 · 0 评论 -
Redis设计与实现(四)列表和哈希键的实现——压缩列表
当列表项或者哈希键的键和值是一些小整数或是长度较短的字符串时,redis就使用压缩列表作为列表键的底层实现。压缩列表的实现压缩列表,压缩,就是为了节约内存。它是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可包含任意多个节点,每个节点可保存一个字节数组或一个整数值。二、压缩列表结构一个压缩列表由以下几个部分组成:zlbytes、zltail、zllen、N个entry...原创 2020-05-06 00:43:31 · 773 阅读 · 0 评论 -
redis设计与实现(三)有序集合和集合的实现——跳跃表和整数集合
跳跃表是一种有序的数据结构每个节点都维护多个指向其他节点的指针,达到快速访问节点的目的平均查找复杂度为O(logN)、最坏为O(N),可通过顺序操作批量处理接地那。大部分情况其效率可和平衡树媲美每个跳跃表层高都是1到32之间的随机数跳跃表在redis中用于有序集合的实现。另外也用在集群节点的内部数据结构。一、跳跃表的实现zskiplist该结构保存了跳跃表节点的信息。跳跃表节点...原创 2020-05-06 00:39:26 · 312 阅读 · 0 评论 -
redis慢查询、弱事务以及发布订阅
同mysql一样,执行时间超过设定值时,将命令以及耗时等信息记录下来。redis的指令会放在一个队列中,单线程顺序获取执行。1.慢查询设置127.0.0.1:6379> config set slowlog-log-slower-than 10000OK -- 默认10ms127.0.0.1:6379> config rewriteOK -- 刷新到配置文件值设为...原创 2020-05-06 00:38:22 · 361 阅读 · 0 评论 -
redis常见的场景设计
key尽量简短易懂,有文档。一、String场景1.计数如浏览次数,每浏览一次,就调用incr keyName.或者是编号,如每下一个单,自增2.session共享用SpringSession和redis完成session共享二、分布式锁锁场景:多任务环境-------多对一操作有状态的资源-------会不一样(有状态类)基础要点缓存有效期可以给key设置过期时间,ke...原创 2020-05-06 00:37:15 · 311 阅读 · 0 评论 -
redis基础——有序集合
同集合不同,有序集合给每个成员添加了一个score字段,即分数,集合中按照分数对成员进行排序。不允许重复有序按分值排序可用于排行榜,点赞数等1.zadd127.0.0.1:6379> zadd libai 1 zhangsan 10 lisi 5 wanger 90 wanagwu(integer) 4如果我们某个用户收到的点赞排行榜,即哪些用户给该用户点了多少赞(一个...原创 2020-05-06 00:34:54 · 217 阅读 · 0 评论 -
redis基础——集合使用
不允许重复不有序可用于标签,社交等1.saddadd fav jump game run ball(integer) 4向fav中添加多个元素。2.smembers127.0.0.1:6379> smembers fav1) "jump"2) "game"3) "run"4) "ball"查看key中所有的成员3.srem127.0.0.1:6379&g...原创 2020-05-06 00:33:42 · 174 阅读 · 0 评论 -
redis基础——hash
哈希就类似于java中的map结构,只不过给这个map指定了一个key,因此一个key中可以存储多个键值对1.hset hset user name wml(integer) 1结构:key field value2.hget127.0.0.1:6379> hget user name"wml"hget +key +field3.Hmset一次设置多个字段127.0...原创 2020-05-06 00:32:29 · 112 阅读 · 0 评论 -
Redis设计与实现(二)——列表与字典
一、链表用途:列表键发布与订阅慢查询监视器数据结构:双向链表,有前驱和后驱指针有头尾指针无环的维护了一个len表示链表长度比较简单就详细讲了。二、字典保存键值对的抽象数据结构。哈希键的底层实现之一就是字典,集合也会使用到字典结构。如:set name "wml"该键值对就保存在数据库的字典中。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直...原创 2020-05-06 00:31:28 · 236 阅读 · 0 评论 -
Redis(一)——String和底层数据结构实现
一、Stringredis使用自己构建的名为简单动态字符串(SDS)的抽象类型作为默认字符串表示。数据结构为:struct sdshdr{ int len;//buf数组已使用的字节,即SDS保存的字符串长度 int free;//未使用的字节长度 char buf[];//保存字符串的字节数组}如要保存redis这几个字符,则其SDS结构为:buf[]: ...原创 2020-05-06 00:24:41 · 1039 阅读 · 0 评论