redis学习
文章平均质量分 51
yangzhengqui
这个作者很懒,什么都没留下…
展开
-
redis hash的实现
1 HASH表的理论hash表通过hash函数可以快速的查找到所需要的数据,具有o(1)的时间复杂度,常用的hash函数有1 直接定址法:取关键字或关键字的某个线性函数值为散列地址。即{\displaystyle hash(k)=k}hash(k)=k或{\displaystyle hash(k)=a\cdot k+b}hash(k)=a\cdot k+b,其中{\displaystyle a,b}a,b为常数(这种散列函数叫做自身函数)2 数字分析法:假设关键字是以r为基的数,并且哈希表中可能出现的原创 2022-05-12 09:00:37 · 538 阅读 · 0 评论 -
redis字符串实现
redis高效的字符串设计原创 2022-05-10 08:35:54 · 352 阅读 · 0 评论 -
redis数据统计
Redis的集合类型的特点是一个键对应一系列值,非常适合用来存取统计的数据,比如:每天的新增用户数和第二天的留存用户数;统计评论列表的最新评论;一个月内连续打卡的用户数;UV量;先了解一下常用的集合统计模式:聚合统计,排序统计,二值状态统计,基数统计聚合统计聚合统计是指统计多个集合元素的聚合结果。包括:交集统计,差集统计,并集统计。Set类型非常适合用来做聚合统计。SINTER key [key ...] #返回指定所有的集合的成员的交集.时间复杂度O(N*M)SUNION key [原创 2021-02-02 20:29:57 · 3592 阅读 · 0 评论 -
redis源码学习---压缩列表
主要学习一下压缩列表的实现,压缩列表的结构: <zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend>其中entry的数据结构是:typedef struct zlentry { unsigned int prevrawlensize; //用多少位表示前面的entry长度 unsigned int prevrawlen; /原创 2021-02-02 19:14:36 · 136 阅读 · 0 评论 -
redis源码探讨--主从一致
Redis的高可靠性包含两方面:1 数据尽量少丢失:使用AOF或者RDB保障2 服务尽量少中断: 增加副本冗余Redis提供了主从模式来保障服务尽量少中断多个副本之间需要数据的一致性,Redis的主从采用读写分离的模式读操作:主库,从库都可以接收写操作:首先到主库执行,然后主库将数据操作同步给从库在serverCron中,每隔1秒会执行replicationCron这是主从复制的核心函数void replicationCron(void) { static long long re原创 2021-02-01 12:37:11 · 132 阅读 · 0 评论 -
redis源码分析--set命令
单值的情况下可以使用set命令。set key valueset命令在源码会直接调用setCommand//set命令 set key valuevoid setCommand(client *c) { .... //值的编码 c->argv[2] = tryObjectEncoding(c->argv[2]); setGenericCommand(c,flags,c->argv[1],c->argv[2],expire,unit,NULL,原创 2021-01-25 11:12:48 · 284 阅读 · 0 评论 -
redis 源码探讨--AOF实现
redis是内存型的数据库,当机器宕机以后,数据就会丢失。redis为了数据的持久化,提供了两种机制,AOF和RDB。下一篇分析RDB。打开AOF需要在配置文件里面打开appendonly yes会在配置文件的目录里面生成appendonly.aof文件AOF是以明文记录操作的,比如收到"set testkey testvalue",记录的明文是*3$3set$7testkey$9testvalue其中 *3 表示当前命令有三个部分,每个部分由“$+数字”开头,后面跟着的是具体原创 2021-01-06 14:40:14 · 172 阅读 · 0 评论 -
redis 源码探讨---网络处理流程
//server.cint main(int argc, char **argv) {//启动函数解析参数.....initServer();..... redisSetCpuAffinity(server.server_cpulist);//进入主循环aeMain(server.el);} //初始化服务器配置信息,创建新连接处理事件void initServer(void) { //初始化服务器配置 server.el = aeCreateEventLo原创 2021-01-04 19:09:26 · 233 阅读 · 0 评论