为什么要处理数据过期 1.过期设置为程序逻辑的一部分,所以为了保证逻辑正确(不读取到过期数据),不得不对缓存做数据过期处理 2.过期数据,对业务来说已是无用数据,但是却仍然占有服务资源(主要是内存和磁盘),故处理过期数据,将其删除可以使服务资源得到释放 处理过期数据的常用策略 策略 说明 优点 缺点 定时删除 根据键的过期时间设置定时器,触发超时及删除对应键 删除及时,内存友好 在... 作者:Shreck66 发表于 2019/03/19 16:35:46 原文链接 https://blog.csdn.net/Shreck66/article/details/88665882 阅读:51 继续阅读 >>


苗帅 19/03/19 16:35:46
redis 使用到的位域 今天在看redis源码的时候在3.0版本的redis.h 文件中发现了这样的几行代码,看了有趣,研究了一番,才发现这个东西就是c语言中的位域。 /* * redisObject Redis对象 */ typedef struct redisObject { unsigned type : 4; // 类型 unsigned encoding : 4; //... 作者:Holy_666 发表于 2019/01/20 21:32:19 原文链接 https://blog.csdn.net/Holy_666/article/details/86566590 阅读:42 继续阅读 >>


刘嘉辉 19/01/20 21:32:19
壹、sds (SDS)Simple Dynamic String, 从字面意思上来简单理解就是简单的动态字符,其为具有动态增加空间的能力,扩容不需要使用者担心。 好的咱们来看一下他的数据结构吧 这个版本是黄所注释的3.0版本 typedef char *sds; //注意,sds其实不是一个结构体类型,而是被typedef的char*,好处见下文 struct sdshdr { ... 作者:Holy_666 发表于 2018/12/12 10:44:08 原文链接 https://blog.csdn.net/Holy_666/article/details/84967117 阅读:41 继续阅读 >>


刘嘉辉 18/12/12 10:44:08
学习总结一下官方发布的C版本客户端 hiredis,了解hiredis 客户端大致实现细节。在理解代码之间需要了解通信协议的特点,我上一篇转载的文章已经有过介绍,大家可以去看一下。 hiredis 提供了同步、异步访问,异步 API 需要与一些事件库协同工作,主要看一下同步API的实现。 hiredis 与服务端通信的API比较简单,主要有这几个步骤: 建立连接 发送命令 等待结果并处理 ... 作者:Tanswer_ 发表于 2018/06/28 21:03:07 原文链接 https://blog.csdn.net/Tanswer_/article/details/80848182 阅读:2368 评论:1 查看评论 继续阅读 >>


杜肖孟 18/06/28 21:03:07
本文档翻译自: http://redis.io/topics/protocol 。 Redis 协议在以下三个目标之间进行折中: 易于实现 可以高效地被计算机分析(parse) 可以很容易地被人类读懂 网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。 客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾。 请求 ... 作者:Tanswer_ 发表于 2018/06/28 17:41:22 原文链接 https://blog.csdn.net/Tanswer_/article/details/80846757 阅读:791 继续阅读 >>


杜肖孟 18/06/28 17:41:22
没有代码的解释不是解释,没有deadline的任务不是任务,没有流程图或分享的源码阅读不是源码阅读,没有报告的性能测试不是性能测试。 —— 漠冰 曰这篇文章打算作为INFO命令的输出整理汇总,目前还未全部完成…1. 环境代码版本:redis-4.0.6 工具:本地用CLion打开,增加CMakeLists.txt就可以调试了 作者:yangbodong22011 发表于 2018/01/27 19:03:44 原文链接 https://blog.csdn.net/yangbodong22011/article/details/79182475 阅读:2789 继续阅读 >>


杨博东 18/01/27 19:03:44
定义 adlist.h typedef struct listNode{ struct listNode *prev; struct listNode *next; void *value; } 可以看出,redis的链表是一个双向链表,拥有前驱和后继,数据域为void型指针,意味着数据域可以指向需要的类型。 管理链表 adlist.h typedef struct list{ listNode *head; listNode *tail; unsigned long len; //节点复制函数 void *(*dup)(void *ptr); //节点释放函数 void (*free)(void *ptr); //节点比较函数 int (*match)(void *ptr,void *key); } 容易看出,为了管理链表,redis定义了一个结构体,会去存储链表头、尾、和长 继续阅读 >>


李余通 17/12/24 20:31:44
源码分析章节,我尽量使用原生的redis源码,不去看黄建宏的注释,提高自己阅读源码的能力,此外,redis版本还是3.0 源码下载,大家可以到这 http://download.redis.io/releases/ sdsnew typedef char *sds; sds sdsnewlen(const void *init, size_t initlen) { struct sdshdr *sh; //分配内存 if (init) { sh = zmalloc(sizeof(struct sdshdr)+initlen+1); } else { sh = zcalloc(sizeof(struct sdshdr)+initlen+1); } //分配失败返回NULL if (sh == NULL) return NULL; sh->len = initlen; s 继续阅读 >>


李余通 17/12/19 22:48:51
本系列所有文章基于《Redis设计与实现》学习而做的随笔,本文使用的redis源码为3.0版本,以后不再赘述 c语言的字符串 首先,我们都知道,Redis是用c语言实现的,而c语言,有个很大的弊端,那就是没有原生的字符串,字符串,是使用字符数组实现的。 基于这个原因,我们可以分析一下c字符串的缺点。 1. 字符串的拼接需要提前判断空间是否足够,否则可能造成缓冲区溢出。此外还必须进行malloc分配内存占用大量系统资源。 2. 字符串缩短时需要释放空间,否则可能造成内存泄漏。 那么,Redis的第一个要解决的就是实现一个高效的字符串 Redis的SDS 简单动态字符串(simple dynamic string,SDS)的定义如下: sds.h struct sdshdr{ int len; //记录buf中字符串的长度(strlen) int free; //记录buf中未使用的空间大小; char buf[]; //保存字符串的数组 } 继续阅读 >>


李余通 17/12/18 22:56:14
背景 最近在学习restful api的开发,遇到这样的问题,书上使用itsdangerous生成token,但是同一个用户可以短时间内生成多个token,而这些token在有效期内都是可以使用的。现在就是要实现的需求是仅最新的token有效。老的token失效。 说明 假设一共开发了三种客户端:WEB,ANDROID,IOS,同一种客户端的token只保存最新的一份。 思路 使用数据库保存token,每次生成token时仅需更新token,验证时候先验证token是否有效,再去数据库查找是否是最新的token。 设计 数据库使用redis,提高查询速率。 现在需要确定使用hash还是k-v更好一些。 存法: hash: token:uid{ WEB:tokenweb, ANDROID:tokenandroid, IPHONE:tokeniphone, } k-v: token:uid:WEB:tokenweb token:uid:ANDROID:tokena 继续阅读 >>


李余通 17/12/04 17:03:36